impossible de rentrer dans le while

impossible de rentrer dans le while - PHP - Programmation

Marsh Posté le 26-07-2017 à 16:20:26    

Bonjour a tous !  
 Je debute en programmation et en realisant un petit site me voila coince parce que je n'arrive pas a rentrer dans la boucle while !  
 
voici le code :  

Code :
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>Face</title>
  5. <meta charset="UTF-8" />
  6. </head>
  7. <body>
  8.    
  9.     <?php include("header.php" ); ?>
  10.     <?php include("menu.php" ); ?>
  11.     <div id="body">
  12.            
  13.         <p>
  14.            
  15.             <?php try
  16. {
  17. $bdd = new PDO('mysql:host=localhost;dbname=website;charset=utf8', 'root', '');
  18.     $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  19. }
  20. catch (Exception $e)
  21. {
  22.         die('Erreur : ' . $e->getMessage());
  23. }
  24. // On récupère tout le contenu de la table
  25. $reponse = $bdd->query('SELECT * FROM makeup where name=".$_POST[choix]."');
  26. // On affiche chaque entrée une à une
  27. while ($donnees = $reponse->fetch())
  28. {
  29.    
  30. ?>
  31.     <p>
  32.         <strong>Brand</strong> : <?php echo $donnees['brand']; ?><br />
  33.         <strong>Name</strong> : <?php echo $donnees['name']; ?><br />
  34.         <strong>Description</strong> : <?php echo $donnees['description']; ?><br />
  35.         <strong>Price</strong> : <?php echo $donnees['price']; ?><br />
  36.         <strong>Link</strong> : <a href="<?php echo $donnees['link']; ?>">link</a><br />
  37.         <div class="img_face">
  38.             <strong>img1<br /></strong> : <img src="img/<?php echo $donnees['image1']; ?>" style="width: 50%; margin-left: 25%;"/><br />
  39.             <strong>img2<br /></strong> : <img src="img/<?php echo $donnees['image2']; ?>"style="width: 50%; margin-left: 25%;"/><br />
  40.             <strong>img3<br /></strong> : <img src="img/<?php echo $donnees['image3']; ?>"style="width: 50%; margin-left: 25%;"/><br />
  41.         </div>
  42.    </p>
  43. <?php
  44. }
  45. $reponse->closeCursor(); // Termine le traitement de la requête
  46. ?>
  47.         </p>
  48.     </div>
  49.    
  50.     <?php include("footer.php" ); ?>
  51.    
  52.     </body>
  53. </html>


 
Merci pour votre retour

Reply

Marsh Posté le 26-07-2017 à 16:20:26   

Reply

Marsh Posté le 26-07-2017 à 16:47:19    

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 :
  1. $reponse = $bdd->query('SELECT * FROM makeup where name="' . $_POST['choix'] . '"');


ou (toujours une concaténation mais les types de quotes sont inversés)

Code :
  1. $reponse = $bdd->query("SELECT * FROM makeup where name='" . $_POST['choix'] . "'" );


ou (interpolation de la variable)

Code :
  1. $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 :
  1. $reponse = $bdd->query('SELECT * FROM makeup where name=' . $bdd->quote($_POST['choix']));


Ou bien meilleure option, préparer la requête :

Code :
  1. $reponse = $bdd->prepare('SELECT * FROM makeup where name=?');
  2. $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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed