Problème requête SQL et formulaire

Résolu
Bonjour,

C'est mon premier post sur un forum. Je demande l'aide de qui voudra bien parce que je bloque sur l'écriture d'un script php basique. J'ai un formulaire d'inscription sur index.php et je voudrais créer un site avec authentification et espace personnel (donc chaque utilisateur aurait son profil). Problème: je n'arrive même pas à écrire sur dans ma base de donnée à partir de mon formulaire. Je vous mets donc le formulaire en question, ainsi que la page inscription.php (appelé dans mon formulaire). Chose qui m'embête aussi, c'est que toutes les variables apparaissent dans l'URL comme si j'utilisais la méthode get. Est ce normal ? Merci d'avance de vos aides.

<form name="form1" method="post" action="inscription.php">
<tr>
<td>Nom</td>
<td><input type="text" name="Nom" id="Nom"></td>
</tr>
<tr>
<td>Prénom</td>
<td><input type="text" name="Prenom" id="Prenom"></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" name="Email" id="Email"></td>
</tr>
<tr>
<td>Mot de passe</td>
<td><input type="password" name="Mot_de_passe" id="Mot_de_passe"></td>
</tr>
<tr>
<td id="bouton" height="50" colspan="2">
<input type="submit" name="submit" value="S'inscrire">
</td>
</tr>
</form>

Et inscription.php:

<?php
//Si l'utilisateur a cliqué sur s'inscrire
if(isset($_POST['submit']))
{
//Se connecter à la base
mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("abc");

//je déclare mes variables qui viennent du formulaire
$Nom=$_POST['Nom'];
$Prenom=$_POST['Prenom'];
$Email=$_POST['Email'];
$mdp5=md5($_POST['Mot_de_passe']);

$requete = mysql_query("INSERT INTO user(ID
, Nom
, Prenom
, Mot_de_passe
, Email )
VALUES(''
, '$Nom'
, '$Prenom'
, '$Mot_de_passe'
, '$Email'
)
");
$req = mysql_query($requete) or die (mysql_error());

//se déconnecter de MySQL
mysql_close();

}

?>
Configuration: Windows Vista, WAMP

23 réponses

  • Votes
  • Date
  • Date décroissante
  1. J'ai trouvé. En fait mes accolades était pas fermé au bon endroit. Il fallait juste bien mettre les bons trucs dans le ELSE
    1. Bonsoir encore une fois, j'ai désormais trouvé un endroit où exposer tous mes problèmes et même si ça me gêne de vous embêter avec, je préfère ça que d'abandonner mon projet. Cette fois le problème est dans la vérification de l'unicité de l'adresse mail à l'inscription. J'ai le message d'erreur suivant qui apparait:

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 61

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 61

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 62

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 62

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 63

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 63

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 64

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 64

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 65

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 65

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 66

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 66

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 67

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 67

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 68

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 68

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 69

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 69

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 70

      Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 70

      Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\wamp\www\Fuck\inscription.php on line 114

      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\wamp\www\Fuck\inscription.php on line 114
      Access denied for user 'ODBC'@'localhost' (using password: NO)

      Mon script marche très bien. Cependant dès que je rajoute la partie vérification de l'unicité ça m'affiche ça. Je vous mets la partie de mon scripts juste en dessous:

      // Vérification de l'unicité de l'adresse e-mail
      $result3 = mysql_query("
      SELECT Email
      FROM compte_utilisateurs
      WHERE Email = '" . $_POST["email"] . "'
      ");

      // Si une erreur survient
      if(!$result3)
      {
      $message = "Erreur d'accès à la base de données lors de la vérification d'unicité";
      }
      else
      {

      // Si un enregistrement est trouvé
      if(mysql_num_rows($result3) > 0)
      {

      while($row = mysql_fetch_array($result3))
      {

      if($_POST["email"] == $row["Email"])
      {
      $message = "Ladresse électronique " . $_POST["email"];
      $message .= "est déjà utilisée";
      }
      Les lignes ont questions dans le message d'erreur sont les suivantes :

      //je déclare mes variables qui viennent du formulaire
      $nom=mysql_real_escape_string(htmlspecialchars($_POST['nom']));
      $prenom=mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
      $email=mysql_real_escape_string(htmlspecialchars($_POST['email']));
      $mdp5=mysql_real_escape_string(htmlspecialchars(md5($_POST['mot_de_passe'])));
      $genre=mysql_real_escape_string(htmlspecialchars($_POST['genre']));
      $date_de_naissance=mysql_real_escape_string(htmlspecialchars($_POST['jour']));
      $code_postal=mysql_real_escape_string(htmlspecialchars($_POST['code_postal']));
      $statut=mysql_real_escape_string(htmlspecialchars($_POST['statut']));
      $etablissement_scolaire=mysql_real_escape_string(htmlspecialchars($_POST['etablissement_scolaire']));
      $niveau=mysql_real_escape_string(htmlspecialchars($_POST['niveau']));

      Je le répète encore une fois, mes variables marchent très bien dès que j'enlève la vérification de l'unicité de l'adresse mail.

      Merci à tout ceux qui veulent bien m'aider.
      1. normal tu n'affiches pas $message, je ne vois pas echo $message nulle part

        et ta partie html "merci..." s'affiche dans toius les cas

        essayes comme ça et tu verra ou ça coince:

        <?php
        
        // Redirige l'utilisateur s'il est déjà identifié
        if(isset($_COOKIE["ID"]))
        {
        header("Location: index.php");
        }
        else
        {
        
        // Vérifie que de bonnes valeurs sont passées en paramètres
        if(!ereg("^[0-9]+$", $_GET["id"]) || !ereg("^[a-f0-9]{8}$", strtolower($_GET["clef"])))
        {
        header("Location: index.php");
        }
        else
        {
        
        // Connexion à la base de données
        // Valeurs à modifier selon vos paramètres configuration
        mysql_connect("localhost", "root", "");
        mysql_select_db("abc");
        
        // Sélection de l'utilisateur concerné
        $result = mysql_query("SELECT ID, Compte_activation, Clef_activation FROM compte_utilisateurs WHERE ID = '" . $_GET["id"] . "' 
        AND Clef_activation = '" . strtolower($_GET["clef"]) . "'
        ");
        
        // Si une erreur survient
        if(!$result)
        {
        $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
        }
        else
        {
        
        // Si aucun enregistrement n'est trouvé
        if(mysql_num_rows($result) == 0)
        {
        header("Location: index.php");
        }
        else
        {
        
        // Récupération du tableau de données retourné
        $row = mysql_fetch_array($result);
        
        // Vérification que le compte ne soit pas déjà activé
        if($row["Compte_activation"] != 0)
        {
        $message = "Votre compte utilisateur a déjà été activé";
        }
        else
        {
        
        // Activation du compte utilisateur
        $result2 = mysql_query("
        UPDATE compte_utilisateurs
        SET Compte_activation = '1'
        WHERE ID = '" . $_GET["id"] . "'
        AND Clef_activation = '" . strtolower($_GET["clef"]) . "'
        ");
        
        // Si une erreur survient
        if($result2)
        {
        $message = "Votre compte utilisateur a correctement été activé";
        
        }
        else
        {
        $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
        
        }
        
        }
        
        }
        
        }
        
        // Fermeture de la connexion à la base de données
        mysql_close();
        
        }
        
        }
        
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <title>Validation de l'inscription</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        </head>
        
        <body>
        <p><?php echo $message; ?>
        </p>
        </body>
        </html>
        1. Bonjour,

          J'ai de nouveau un problème du même type. Je suis sûr que c'est une erreur bête dans mon code, mais ma base de donnée refuse de s'updater. En gros je finis mon formulaire d'inscription. Tout marche très bien. j'envoie un mail pour que l'utilisateur confirme son inscription. Le mail est envoyé, reçu. L'utilisateur clique sur le lien. Et là le mail affiche que l'inscription s'est bien passé, cependant le champs: Compte_activation reste à 0 (au lieu d'être à 1).

          Je vous mets mon code:

          <?

          // Redirige l'utilisateur s'il est déjà identifié
          if(isset($_COOKIE["ID"]))
          {
          header("Location: index.php");
          }
          else
          {

          // Vérifie que de bonnes valeurs sont passées en paramètres
          if(!ereg("^[0-9]+$", $_GET["id"]) || !ereg("^[a-f0-9]{8}$", strtolower($_GET["clef"])))
          {
          header("Location: index.php");
          }
          else
          {

          // Connexion à la base de données
          // Valeurs à modifier selon vos paramètres configuration
          mysql_connect("localhost", "root", "");
          mysql_select_db("abc");

          // Sélection de l'utilisateur concerné
          $result = mysql_query("
          SELECT ID
          , Compte_activation
          , Clef_activation
          FROM compte_utilisateurs
          WHERE ID = '" . $_GET["id"] . "'
          AND Clef_activation = '" . strtolower($_GET["clef"]) . "'
          ");

          // Si une erreur survient
          if(!$result)
          {
          $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
          }
          else
          {

          // Si aucun enregistrement n'est trouvé
          if(mysql_num_rows($result) == 0)
          {
          header("Location: index.php");
          }
          else
          {

          // Récupération du tableau de données retourné
          $row = mysql_fetch_array($result);

          // Vérification que le compte ne soit pas déjà activé
          if($row["Compte_activation"] != 0)
          {
          $message = "Votre compte utilisateur a déjà été activé";
          }
          else
          {

          // Activation du compte utilisateur
          $result = mysql_query("
          UPDATE compte_utilisateurs
          SET Compte_activation = '1'
          WHERE ID = '" . $_GET["id"] . "'
          AND Clef_activation = '" . strtolower($_GET["clef"]) . "'
          ");

          // Si une erreur survient
          if(!$result)
          {
          $message = "Une erreur est survenue lors de l'activation de votre compte utilisateur";
          }
          else
          {
          $message = "Votre compte utilisateur a correctement été activé";
          }

          }

          }

          }

          // Fermeture de la connexion à la base de données
          mysql_close();

          }

          }

          ?>
          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          <html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <title>Validation de l'inscription</title>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
          </head>

          <body>
          <p>Merci de vous être inscrit</p>
          </body>
          </html>

          Et voici le lien pour valider l'inscription:
          http://localhost/activer-compte-utilisateur.php?id=35&clef=cdef5678

          Si qqn pouvait m'aider, ça serait vraiment sympa...
          1. Merci ce fut un plaisir de t'aider si besoin d'aide en programmation, tu c'est où demandé ;)

            @++ Et bonne programmation à toi.
            1. Merci énormèment NitroGen pour ton aide précieuse. J'ai la première pierre de mon édifice grâce à toi.
              1. Au faite pour ton erreur plus haut c'est en sécurisant les variables tu oublie une parenthèse en fermeture:
                mysql_real_escape_string(htmlspecialchars($_POST[''])); 
                
                1. Voila le travail par contre je ne peu pas faire le test je n'ai pas la BDD à toi de tester:
                  Formulaire:

                  <!-- Début formulaire -->
                  <form enctype="multipart/form-data" method="post" action="inscription.php">
                  <tr>
                  <td>Nom</td>
                  <td><input type="text" name="nom"></td>
                  </tr>
                  <tr>
                  <td>Prénom</td>
                  <td><input type="text" name="prenom"></td>
                  </tr>
                  <tr>
                  <td>Email</td>
                  <td><input type="text" name="email"></td>
                  </tr>
                  <tr>
                  <td>Mot de passe</td>
                  <td><input type="password" name="mot_de_passe"></td>
                  </tr>
                  <tr>
                  <td id="bouton" height="50" colspan="2">
                  <input type="submit" value="S'inscrire">
                  </td>
                  </tr>
                  </form>
                  
                  <!-- Fin Formulaire -->
                  


                  page "inscription.php"

                  <?php
                  //On vérifie que les variables existent
                  if (isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['email']) AND isset($_POST['mot_de_passe']) )
                  {	
                  	//On vérifie que les variables contiennent quelques choses ...
                  	if($_POST['nom'] != NULL AND $_POST['prenom']!= NULL AND $_POST['email'] != NULL AND $_POST['mot_de_passe'] != NULL)
                  	{
                  		//Connexion à la BDD MySQL
                  		//Se connecter à la base
                  		mysql_connect("localhost","root","");
                  		mysql_select_db("abc");
                  		
                  		//je déclare mes variables qui viennent du formulaire
                  		$nom=mysql_real_escape_string(htmlspecialchars($_POST['nom']));
                  		$prenom=mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
                  		$email=mysql_real_escape_string(htmlspecialchars($_POST['email']));
                  		$mdp5=mysql_real_escape_string(htmlspecialchars($_POST['mot_de_passe']));
                  		
                  		
                  		mysql_query("INSERT INTO user (ID, Nom, Prenom, Mot_de_passe, Email ) VALUES('', '$nom', '$prenom', '$mdp5', '$email') ") or die (mysql_error());
                  
                  		//se déconnecter de MySQL
                  		mysql_close();
                  	
                  	echo "Inscription prise en compte, merci à vous.";
                  	}
                  }
                  else
                  {
                  echo "Désolée, Vous n'avez pas rempli tous les champs";
                  }
                  ?>
                  


                  Espérant que ce code marche car je viens de l'écrire sur le vif donc à toi de faire le test !.
                  @++
                  1. Array
                    (
                    [nom] => A
                    [prenom] => A
                    [email] => A
                    [mot_de_passe] => A
                    [submit] => S'inscrire
                    )

                    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

                    A chaque fois il me sort mes valeurs;

                    Je vous remets ma requête sql.

                    $requete = mysql_query("INSERT INTO user(ID
                    , Nom
                    , Prenom
                    , Mot_de_passe
                    , Email )
                    VALUES(''
                    , '$nom
                    , '$prenom'
                    , '$mdp5'
                    , '$email'
                    )
                    ");
                    $req = mysql_query($requete) or die (mysql_error());
                    1. En revanche en essayant de sécuriser ma base de données, ça marche plus. Voici ce que j'ai changé dans mon inscription.php:

                      //je déclare mes variables qui viennent du formulaire
                      $nom=mysql_real_escape_string(htmlspecialchars($_POST['nom']);
                      $prenom=mysql_real_escape_string(htmlspecialchars($_POST['prenom']);
                      $email=mysql_real_escape_string(htmlspecialchars($_POST['email']);
                      $mdp5==mysql_real_escape_string(htmlspecialchars(md5($_POST['mot_de_passe']));

                      Il me dit qu'il y a une erreur dès la première ligne. J'ai repris lettre par lettre la proposition de NitroGen
                      1. Merci pour vos remarques. Effectivement c'était à cause de ma variable mot de passe. je vais également profiter de NitroGen pour sécuriser ma base de données. Donc maintenant ça écris enfin dans ma base de donnée. Par contre sur la nouvelle page qui s'affiche il est écrit:

                        Array
                        (
                        [nom] => momo
                        [prenom] => momo
                        [email] => momo
                        [mot_de_passe] => momo
                        [submit] => S'inscrire
                        )

                        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

                        Qu'est ce que ça signifie svp ?
                        1. tu as une erreur au niveau mot de passe:

                          //je déclare mes variables qui viennent du formulaire
                          $nom=$_POST['nom'];
                          $prenom=$_POST['prenom'];
                          $email=$_POST['email'];
                          $mdp5=md5($_POST['mot_de_passe']);

                          $requete = mysql_query("INSERT INTO user(ID
                          , Nom
                          , Prenom
                          , Mot_de_passe
                          , Email )
                          VALUES(''
                          , '$nom'
                          , '$prenom'
                          , '$mot_de_passe'
                          , '$email'
                          )


                          tu n'utilises pas la même variable pour ta requette que celle reupérant la valeur postée par le formulaire
                          1. par contre oui il y a sa mais aussi tu as ce problème: Je te conseille vivement lorsque tu déclare tes variable venant du formulaire de rajouter des paramètres pour sécuriser ta base de donnée. $prenom=mysql_real_escape_string(htmlspecialchars($_POST['prenom']));

                            Tu fais sa pour toutes les variables.
                            1. voici mon nouveau fichier inscription.php:

                              <?php
                              //Si l'utilisateur a cliqué sur s'inscrire
                              if(isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['mot_de_passe']) AND isset($_POST['mot_de_passe']) AND isset($_POST['email']))

                              {

                              //TEST valeurs postées:
                              echo '<pre>';
                              print_r($_POST);
                              echo '</pre>';

                              //Se connecter à la base
                              mysql_connect("localhost","root","") or die (mysql_error());
                              mysql_select_db("abc");

                              //je déclare mes variables qui viennent du formulaire
                              $nom=$_POST['nom'];
                              $prenom=$_POST['prenom'];
                              $email=$_POST['email'];
                              $mdp5=md5($_POST['mot_de_passe']);

                              $requete = mysql_query("INSERT INTO user(ID
                              , Nom
                              , Prenom
                              , Mot_de_passe
                              , Email )
                              VALUES(''
                              , '$nom'
                              , '$prenom'
                              , '$mot_de_passe'
                              , '$email'
                              )
                              ");
                              $req = mysql_query($requete) or die (mysql_error());

                              //se déconnecter de MySQL
                              mysql_close();

                              }

                              ?>

                              J'ai également fais les modifications dans le formulaire en mettant tout en minuscule.

                              Mais ça ne marche toujours pas. J'ai toujours une plage blanche qui s'ouvre avec en URL variable=valeur&....
                              1. Je ne savais plus pour ma part je l'ai écrit toutes les variables en minuscule...
                                Je confond avec un autre language ...
                                1. change tous les name="Prenom" par name="prenom" car les variable n'accepte pas les majuscule pour les noms de variable enfin la première lettre je crois...


                                  NON

                                  on peut mettre une majuscule au début d'un nom de variable mais le fait de mettre en minuscule a l'avantage d'éviter de faire des erreurs
                                  1. essaie de mettre à la place de ceci dans ta condition if
                                    if(isset($_POST['submit']))
                                    {
                                    }

                                    Remplace ceci par :
                                    if(isset($_POST['nom']) AND isset($_POST['prenom']) AND ...isset(tous les attributs name tu fais comme ceci))
                                    {
                                    //Ton script
                                    }

                                    Par contre dans ton formulaire change tous les name="Prenom" par name="prenom" car les variable n'accepte pas les majuscule pour les noms de variable enfin la première lettre je crois...

                                    @++
                                    1. oui j'ai bien mis ID en bigint autoincrémenté. J'ai essayé de mettre ce que tu m'as dis juste en dessous de mon isset mais ça ne change rien. j'ai toujours une page blanche qui s'ouvre avec les informations en URL.
                                      1. Salut,

                                        rajoutes ça pour voir ce que tu reçoit:

                                        if(isset($_POST['submit']))
                                        {
                                        
                                        //TEST valeurs postées:
                                        echo '<pre>';
                                        print_r($_POST);
                                        echo '</pre>';
                                        
                                        ......
                                        


                                        ensuite dans ta table user as tu bien mis ton champ ID en INT, autoincrement, et sans valeur par defaut ?
                                        • 1
                                        • 2