Unknown column ' ' in 'where clause'

Bonjour,
<?php

if (isset($_POST['mot_de_passe']) &&  isset($_POST['nom']) && isset($_POST['prenom'])) 
{  mysql_connect("localhost", "root", "");
        mysql_select_db("tests");
    
    $nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
		$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
        $mot_de_passe = mysql_real_escape_string(htmlspecialchars($_POST['mot_de_passe']));
		$reponse = mysql_query('SELECT mot_de_passe FROM visiteurs WHERE nom ='. addslashes($nom) .' && prenom ='. addslashes($prenom) .'')or die(mysql_error());
$donnees = mysql_fetch_array($reponse); 

le code suivant m'envoie l'erreur Unknown column ' ' in 'where clause' si je m'authentifie avec hind par exemple dans un formulaire
Configuration: Windows XP
Firefox 2.0.0.16

4 réponses

  1. Webmaster
    Il faut entourer les valeurs avec des guillemets et remplacer "&&" par "AND" :

    if (isset($_POST['mot_de_passe']) &&  isset($_POST['nom']) && isset($_POST['prenom'])) 
    {  
            mysql_connect("localhost", "root", "");
            mysql_select_db("tests");
        
            $nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
            $prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']))­;
            $mot_de_passe = mysql_real_escape_string(htmlspecialchars($_POST['mot_de_pas­se']));
            $reponse = mysql_query('SELECT mot_de_passe FROM visiteurs WHERE nom ="'. addslashes($nom) .'" AND prenom ="'. addslashes($prenom) .'"') or die(mysql_error());
    $donnees = mysql_fetch_array($reponse); 
    

    Jean-François Pillou

    Fondateur de CommentCaMarche.net

    1. Enlève sa mysql_real_escape_string ...
      Signature non conforme ==> Supprimée
      Modération CCM
      1. Webmaster
        Au contraire il faut le laisser, ça protège des injections SQL !
      2. @JeffAh oui c'est vrai ! Je suis habitué d'écrire via une fonction préfaite et qui fait tout pour moi et comme j'ai pas ré-écrit sa depuis très longtemps, j'avais oublié. Merci du rappel en tous cas !
    2. merci jeff! il m'envoie aucune erreur pour le moment à l'affichage mais il n'exucute pas les boucles! ie il permet pas d'afficher la deuxieme page qui doit etre affichée aprés l'authentification :(
      je t'explique comme je l'ai fait tout à l'heure : mon code doit afficher deux pages la premiere pour l'authentification et le passage a la deuxieme page se fait en vérifiant que les coordonnées postées par l'utilisateur dans la premiere sont les memes que celles existées dans une base de donnée
      1. voici mon code
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
            <head>
                <title>Page protégée par mot de passe</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            </head>
            <body>
        
        
        <fieldset>
               <legend><strong>Vos coordonnées:</strong></legend>
        <form action="...;.php" method="post">
        <p>
               <label for="prenom"><strong>votre prenom</strong></label> :<br /> <input type="text" name="prenom" id="prenom" />
           </p>
           <p>
               <label for="nom"><strong>Votre nom</strong></label>:<br /> <input type="text" name="nom" id="nom" />
           </p>
            <p>
               <label for="password"><strong>Votre mot de passe</strong></label> :<br /> <input type="password" name="mot_de_passe" id="pseudo" />
           </p>
           </fieldset>
            <p>
        	
               <input type="submit" value="Valider"  /> <input type="reset" />
           </p>
        
        </form>
        
            </body>
        </html>
        
        
          <?php 
        
        
        if (isset($_POST['mot_de_passe']) AND  isset($_POST['nom']) AND isset($_POST['prenom'])) // Si la variable existe
         
        {
            if ($_POST['prenom'] != NULL AND $_POST['mot_de_passe'] != NULL AND $_POST['mot_de_passe'] != NULL) 
        {   mysql_connect("localhost", "root", "");
                mysql_select_db("tests");
        
                $nom = ($_POST['nom']);
        		$prenom = ($_POST['prenom']);
                $mot_de_passe = ($_POST['mot_de_passe']);
        		$reponse = mysql_query('SELECT mot_de_passe FROM visiteurs WHERE nom =". addslashes($nom) ." && prenom =". addslashes($prenom) ."')or die(mysql_error());
        		$donnees = mysql_fetch_array($reponse);
        		while ($donnees['mot_de_passe'] == $mot_de_passe)
        {   mysql_close();
         
        ?>
            
        
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
            <head>
                <title>..</title>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            </head>
            <body>
                <form action="...php" method="post">
                
                ...........
               
            </body>
        
        
        <?php
        }
        
           }
            }
        ?>