PHP SQL PDO champs de recherche n'affiche rien !

Résolu
watarux Messages postés 324 Statut Membre -  
watarux Messages postés 324 Statut Membre -
Bonjour, Je souhaite faire un champs de recherche, en gros je demande à l'utilisateur de taper le nom d'un film dans le formulaire

à l'envoie du formulaire ça devrait me retourner Le titre du film et son résumé.

j'ai essayé plusieurs choses mais à chaque fois je n'ai pas d'erreur dans le code mais a l'envoie du formulaire ça ne me renvoie rien

merci de votre aide :)
je vous poste la partie du code concernée

Cordialement watarux :)

<form method="post">
<label for="nom">Nom</label>
<input type="text" name="nom" />
<input type="submit" name="subnom" value="The" />
</form>

<php
if(isset($_POST['subnom']))
{

$me = htmlentities($_POST['nom']);

$sql5 = $DB->prepare('SELECT * FROM tp_film WHERE titre='.$me.'');
$sql5->execute();
$tab4 = $sql5->fetchall();

foreach ($tab5 as $a)
{
echo "<div>";
echo "<h2>";
echo $a['titre'];
echo "</h2>";
echo "<p>";
echo $a['resum'];
echo "</p>";
echo "</div>";
}
}
?>

1 réponse

  1. Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
     
    Bonjour !
    Tu a un problème de nommage de variable, c'est pas une bonne idée de nommé tes variables tab5, tab4, etc ... c'est le meilleurs moyen de se planter.
    Tu l'aurais appelé films tout simplement, ça aurait été plus compréhensible et source de moins d'erreur.

    donc l'erreur est ici :
    $tab4 = $sql5->fetchall(); 
    foreach ($tab5 as $a) 

    Et mettre :
    $tab4 = $sql5->fetchall(); 
    foreach ($tab4 as $a) 


    Sinon, tu devrais revoir ta requêten celle-ci n'est pas protégé des injections Sql.
    0
    1. watarux Messages postés 324 Statut Membre 42
       
      Merci de ta réponse ! je débute encore en programmation, peux-tu me dire comment je peux protéger ma requête ?

      et dois-je sécuriser aussi des liste déroulant ?
      0
    2. Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
       
      Revoit tout simplement le principe des requête préparé, tu trouvera les explications et exemple sur php.net
      https://www.php.net/manual/fr/pdo.prepare.php

      Une variable en GET ou en POST peut être égal à n'importe quoi, n'importe qui peut y envoyer ce qu'il veut, que ce soit une checkbox, un select ou un champ caché.
      Il faut toujours tout vérifier.
      0
    3. watarux Messages postés 324 Statut Membre 42
       
      Si je fais ceci je serais sécuriser ? $me = htmlentities(trim(mysql_real_escape_string($_POST['nom'])));


      je doute mais sur phpmanuel je comprends pas toujours comment les choses sont expliqué...
      0
    4. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      Non, les fonctions
      mysql_*
      sont:
      1. obsolètes donc à bannir
      2. incompatibles avec PDO
      Les requêtes préparées que PDO te permet de faire gèrent ça à ta place. Cf les exemples de PDO::prepare pour savoir comment insérer des paramètres.
      Après tu peux (et même dois) quand même utiliser
      htmlentities
      et
      trim
      : ça n'a rien a voir avec la BDD en soi, c'est pour protéger la sortie texte de tout code HTML non voulu.
      0
    5. watarux Messages postés 324 Statut Membre 42
       
      après quelque recherche j'ai fait ceci peut tu me donner ton avis ? merci à toi désolé de te faire perdre ton temps


      $sql2 = $DB->prepare('SELECT * FROM tp_film WHERE id_genre = '.$DB->quote($_POST['genre'], PDO::PARAM_INT).'ORDER BY titre');
      0