Probleme pour fx recherche dans ma bdd

Eléphanteau du PHP | 15 Messages

18 juil. 2012, 10:40

salut les amis,

je ne comprends pas pourquoi on script ne fonctionne pas, meme pas un message d'erreur nada! Dans un input, je veux saisir le début du nom et j'aimerais qu'une liste apparaisse


if (isset($_POST['btnsearch']))
{
if(!empty($_POST['searchclient']))
{
$pdo_options [PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO ('mysql:host=localhost;dbname=projet', 'root', '', $pdo_options);
$reponse= $bdd->query('SELECT * from clients where Nom = "'.$_POST['searchclient'].'"');
while($donnees=$reponse->fetch())
{
echo ''.$donnees['Nom'].' '.$donnees['Prenom'].' '.$donnees['Adresse'].' '.$donnees['CP'].'';
}

}

else {echo '<script language="Javascript">
alert ("SAISIE VIDE");
</script>';
}
}
?>

ViPHP
xTG
ViPHP | 7331 Messages

18 juil. 2012, 15:01

L'opérateur d'égalité recherche une égalité au sens stricte du terme.
Donc en ne tapant que le début tu risques pas d'inventer la fin...

Regardes plutôt du côté de l'opérateur LIKE en SQL. ;)

Eléphant du PHP | 267 Messages

18 juil. 2012, 17:01

salut,

en SQL, il est préférable d'utiliser les simples quotes pour les valeurs de type string plutôt que les doubles quotes
et pour les noms de bases, tables et champs, il faut utiliser les quotes inversées (Alt Gr + 7)

ce qui donne :
$reponse = $bdd->query("SELECT * FROM `clients` WHERE `Nom` = '".$_POST['searchclient']."'");

ou comme le préconise xTG, avec l'opérateur LIKE :
$reponse = $bdd->query("SELECT * FROM `clients` WHERE `Nom` LIKE '".$_POST['searchclient']."%'");

@+
dix2

ViPHP
xTG
ViPHP | 7331 Messages

18 juil. 2012, 21:12

A noter que les ` pour la protection des champs ce n'est pas une norme SQL mais bel et bien spécifique à MySQL. ;)