URGENT... envoie forulaire dans bdd sql

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,
J'ai fait un script d'inscription pour mon site, mais il est victime d'un problème, j'aimerais savoir si qqu pouvait me dire quel est l'erreur

Voici mon script php :

<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
$base = mysql_connect ('mon local host', 'mon login', 'mon mot de passe');
mysql_select_db ('ma base', $base);

// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM membres WHERE login="'.mysql_escape_string($_POST['login']).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

if ($data[0] == 0) {
$sql = 'INSERT INTO membres VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string(md5($_POST['pass'])).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre possède déjà ce login.';
}
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>

2 réponses

  1. fiu
     
    Salut

    Mes connaissances en php sont extrêmement limitées, mais il me semble que dans
    // on recherche si ce login est déjà utilisé par un autre membre
    $sql = 'SELECT count(*) FROM membres WHERE login="'.mysql_escape_string($_POST['login']).'"';
    la variable $sql n'est pas terminée (pas d'apostrophe terminale) et donc, ça fout le bordel dans ton code.
    0
  2. Utilisateur anonyme
     
    Voici tous les codes et bdd que j'ai fait (pour ceux que ca intéresse.
    ATTENTION le localhost et tous ca doivent être changé ATTENTION
    inscription.php :
    <?php
    // on teste si le visiteur a soumis le formulaire
    if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
    // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
    // on teste les deux mots de passe
    if ($_POST['pass'] != $_POST['pass_confirm']) {
    $erreur = 'Les 2 mots de passe sont différents.';
    }
    else {
    $base = mysql_connect ('localhost', 'login', 'pass');
    mysql_select_db ('base_nom', $base);

    // on recherche si ce login est déjà utilisé par un autre membre
    $sql = 'SELECT count(*) FROM membres WHERE login="'.mysql_escape_string($_POST['login']).'"';
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $data = mysql_fetch_array($req);

    if ($data[0] == 0) {
    $sql ='INSERT INTO membres (id, login, pass_md5, e_mail) VALUES ("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string(md5($_POST['pass'])).'", "'.mysql_escape_string($_POST['e_mail']).'");';

    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: membre.php');
    exit();
    }
    else {
    $erreur = 'Un membre possède déjà ce login.';
    }
    }
    }
    else {
    $erreur = 'Au moins un des champs est vide.';
    }
    }
    ?>

    <LI>Login : <br><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>" onfocus="this.style.backgroundColor='#CCCCFF';"onfocus="this.style.backgroundColor='white';" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
    <LI>Mot de passe : <BR><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>" onfocus="this.style.backgroundColor='#CCCCFF';" onfocus="this.style.backgroundColor='white';" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
    <LI>Confirmation du mot de passe : <BR><input type="password" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"
    name="pass_confirm" onfocus="this.style.backgroundColor='#CCCCFF';" onfocus="this.style.backgroundColor='white';"> <br />

    <li>Email :<br>
    <input name=e_mail onfocus="this.style.backgroundColor='#CCCCFF';" onfocus="this.style.backgroundColor='white';"><BR><div align=center><input type="submit" name="inscription" value="Inscription" onfocus="this.style.backgroundColor='#CCCCFF';" onfocus="this.style.backgroundColor='white';"></div>
    </form>

    </ol><?php
    if (isset($erreur)) echo '<br />',$erreur;
    ?></P></TD>

    Table membres :
    CREATE TABLE 'membres' (
    'id' int(11) NOT NULL auto_increment,
    'login' text NOT NULL,
    'pass_md5' text NOT NULL,
    'e_mail' text NOT NULL,
    'avatar' blob NOT NULL,
    PRIMARY KEY ('id')
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    Membre.php
    <?php
    session_start();
    if (!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit();
    }
    ?>
    (a mettre tout en heut de la page)

    Index.php

    <?php
    // on teste si le visiteur a soumis le formulaire de connexion
    if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

    $base = mysql_connect ('serveur', 'login', 'password');
    mysql_select_db ('nom_base', $base);

    // on teste si une entrée de la base contient ce couple login / pass
    $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $data = mysql_fetch_array($req);

    mysql_free_result($req);
    mysql_close();

    // si on obtient une réponse, alors l'utilisateur est un membre
    if ($data[0] == 1) {
    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: membre.php');
    exit();
    }
    // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    elseif ($data[0] == 0) {
    $erreur = 'Compte non reconnu.';
    }
    // sinon, alors la, il y a un gros problème :)
    else {
    $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    }
    }
    else {
    $erreur = 'Au moins un des champs est vide.';
    }
    }
    ?>
    <html>
    <head>
    <title>Accueil</title>
    </head>

    <body>
    Connexion à l'espace membre :<br />
    <form action="index.php" method="post">
    Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
    Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
    <input type="submit" name="connexion" value="Connexion">
    </form>
    <a href="inscription.php">Vous inscrire</a>
    <?php
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    </body>
    </html>

    deconnexion.php :
    <?php
    session_start();
    session_unset();
    session_destroy();
    header('Location: index.php');
    exit();
    ?>
    0