PHP SQL PDO champs de recherche n'affiche rien ! [Résolu/Fermé]

Signaler
Messages postés
244
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
17 janvier 2019
-
watarux
Messages postés
244
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
17 janvier 2019
-
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>";
}
}
?>

11 réponses

Messages postés
840
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
20 décembre 2015
117
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.
watarux
Messages postés
244
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
17 janvier 2019
22
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');
ElementW
Messages postés
4889
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
9 octobre 2019
879
Corrigé ;)
$sql2 = $DB->prepare('SELECT * FROM tp_film WHERE id_genre = :genre ORDER BY titre');
$sql2->execute(array(':genre' => $_POST['genre']));
// Plus loin: $sql2->fetch ou fetchAll

Pas de risque d'injection comme ça
watarux
Messages postés
244
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
17 janvier 2019
22
désolé de t'embêter mais j'aimerais bien comprendre ce code pourrais tu me le détailler un peu ? ^^' excuse moi vraiment... que signifi :genre ? et $sql2->execute(array(':genre' => $_POST['genre']));
ElementW
Messages postés
4889
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
9 octobre 2019
879
:genre
ici se fera remplacer par PDO (en l'échappant au besoin pour ne pas permettre d'injection), car dans
execute
(qui exécute la requête), on a précisé que
:genre
doit se faire remplacer par le contenu de
$_POST['genre']
(c'est un tableau associatif).
Bien que ton code précédent puisse marcher, cette méthode est plus claire: il est plus simple de lire la requête SQL. Et en bonus c'est facile de déplacer un paramètre si besoin, plutôt que de s'embêter avec mille et une concaténations (
"a".$truc_1."b".$truc_2
, etc).
watarux
Messages postés
244
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
17 janvier 2019
22
D'accord je te remercie beaucoup de ton aide ^^ je mets le problème en résolu :)