PHP SQL PDO champs de recherche n'affiche rien !

Résolu/Fermé
Signaler
Messages postés
265
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
25 octobre 2021
-
Messages postés
265
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
25 octobre 2021
-
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

Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
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
Messages postés
265
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
25 octobre 2021
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
Messages postés
838
Date d'inscription
vendredi 2 novembre 2012
Statut
Membre
Dernière intervention
17 décembre 2015
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
Messages postés
265
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
25 octobre 2021
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
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 305
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
Messages postés
265
Date d'inscription
dimanche 28 avril 2013
Statut
Membre
Dernière intervention
25 octobre 2021
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