Ta requête est fausse : tu cherches littéralement un name qui a pour valeur .$_POST[choix].
Pour rappel, les variables ne sont pas substituées par leur valeur quand la chaîne est délimitée par des quotes simples ('). Il en faut des doubles (" ) pour ça. De plus, ou tu fais une concaténation (via l'opérateur .) ou tu comptes sur une interpolation de la variable mais pas les deux sinon tes points font partie de la chaîne, ça n'en fait plus des concaténations.
Il aurait fallu écrire (concaténation) :
Code :
$reponse = $bdd->query('SELECT * FROM makeup where name="' . $_POST['choix'] . '"');
|
ou (toujours une concaténation mais les types de quotes sont inversés)
Code :
$reponse = $bdd->query("SELECT * FROM makeup where name='" . $_POST['choix'] . "'" );
|
ou (interpolation de la variable)
Code :
$reponse = $bdd->query("SELECT * FROM makeup where name='{$_POST['choix']}'" );
|
Mais n'en fais rien, $_POST['choix'] serait un vecteur d'injection SQL.
Il faut, au final, pour du non-préparé échapper avec PDO::quote (noter qu'elle ajoute les quotes pour le SQL autour de la valeur) comme ceci :
Code :
$reponse = $bdd->query('SELECT * FROM makeup where name=' . $bdd->quote($_POST['choix']));
|
Ou bien meilleure option, préparer la requête :
Code :
$reponse = $bdd->prepare('SELECT * FROM makeup where name=?'); $reponse->execute([$_POST['choix']]);
|
PS : il vaut mieux éviter d'utiliser les doubles quotes pour délimiter une chaîne dans une requête - niveau SQL donc - ce n'est pas standard et, de toute façon, même si MySQL l'accepte, ça dépend de son sql_mode où elles peuvent prendre une autre signification (celle des ` pour protéger des identificateurs)
Message édité par pluj le 26-07-2017 à 16:57:41