PHP SQL PDO champs de recherche n'affiche rien !

Résolu/Fermé
watarux Messages postés 266 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 30 janvier 2023 - 9 juin 2014 à 10:53
watarux Messages postés 266 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 30 janvier 2023 - 9 juin 2014 à 14:43
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

Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
9 juin 2014 à 11:28
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
watarux Messages postés 266 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 30 janvier 2023 42
Modifié par watarux le 9/06/2014 à 12:17
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
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
9 juin 2014 à 13:51
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
watarux Messages postés 266 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 30 janvier 2023 42
9 juin 2014 à 14:09
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
9 juin 2014 à 14:20
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
watarux Messages postés 266 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 30 janvier 2023 42
9 juin 2014 à 14:21
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