PHP-MySQL: LIKE +variables saisies dans FORM

Résolu/Fermé
Jer - 21 sept. 2010 à 11:27
 joh; - 6 nov. 2010 à 23:51
Bonjour,

Je me casse la tête depuis hier pour adapter les bouts de codes que ja glane à droite et à gauche pour convenir à mes besoins. Vous l'avez compris, je ne m'y connais pas vraiment, et j'apprends sur le tas.

J'ai une page1.htm dans laquelle se trouve un FORM en méthode POST, action=page2.php. Les INPUT et SELECT de cette page doivent permettre aux utilisateurs de sonder la db avec des mots ou des parties de mots.

Avec la page2.php, dont le code se trouve ci-dessous, je reçois tous les enregistrements, sans le(s) filtre(s) prévus dans le FORM.

<?php

$con = mysql_connect("aaaa","bbbb","cccc") OR die( "Erreur de connexion.<br />\nErreur MySQL '" . mysql_error() . "'" );

mysql_select_db("aaaa", $con) OR die ( "Impossible de sélectionner la base spécifiée.<br />\nErreur MySQL '" . mysql_error() . "'" );


$query = "SELECT * FROM marginalia
WHERE margindex LIKE '$_POST[$margindex]%'
ORDER BY margindex
";

$result = mysql_query($query) OR die(mysql_error());

echo "<table>
<tr>
 <th>Index</th>
 <th>Nota</th>
 <th>Variante</th>
 <th>Variante suscrite</th>
 <th>Chapitre</th>
 <th>Réf Ed. 1601</th>
 <th>Sujet (texte)</th>
 <th>Lien texte-note</th>
 <th>Sujet (note)</th>
 <th>Vices & vertus</th>
 <th>Nombre de mots</th>
 <th>Main</th>
 <th>Commentaire</th>
</tr>";

while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['margindex'] . "</td>";
echo "<td>" . $row['nota'] . "</td>";
echo "<td>" . $row['nota_var'] . "</td>";
echo "<td>" . $row['nota_sup'] . "</td>";
echo "<td>" . $row['ref_txt'] . "</td>";
echo "<td>" . $row['ref_1601'] . "</td>";
echo "<td>" . $row['t_suj'] . "</td>";
echo "<td>" . $row['lien'] . "</td>";
echo "<td>" . $row['n_suj'] . "</td>";
echo "<td>" . $row['v_v'] . "</td>";
echo "<td>" . $row['nombre'] . "</td>";
echo "<td>" . $row['main'] . "</td>";
echo "<td>" . $row['commentaire'] . "</td>";
echo "</tr>";
}
echo "</table>";

?>


Pouvez-vous me mettre sur une piste de solution ?

Merci mille fois.


A voir également:

2 réponses

Jug4tsu Messages postés 56 Date d'inscription lundi 13 septembre 2010 Statut Membre Dernière intervention 1 septembre 2011 13
21 sept. 2010 à 11:37
Dans ta requête, comme index de $_POST tu utilises une variable, qui semble ne pas avoir été définie. Du coup le $_POST ne retourne rien, et ta recherche se fait juste sur le % ce qui retourne toues tes entrées.
Aussi, pense bien à échapper toutes tes données en POST/GET avec mysql_real_escape_string pour éviter les requêtes malveillantes !

Essaye ça :

$margindex = mysql_real_escape_string($_POST['margindex']);
$query = "SELECT * FROM marginalia WHERE margindex LIKE '".$margindex."%'ORDER BY margindex";
3
Extra, la rapidité de réponse ! Merci ! La prochaine fois, j'aurai l'humilité de poser mes questions plutôt que de m'entêter à chercher par moi-même pendant des heures...

Ton exemple fonctionne bien.

Je voudrais cependant ajouter d'autres valeurs, et je pense que je les combine mal, car ça n'affiche plus rien quand j'ajoute des critères dans la requête (en les prenant un par un, ça marche, mais j'ai besoin de tous les combiner) ... :

$margindex = mysql_real_escape_string($_POST['margindex']);   
$nota = mysql_real_escape_string($_POST['nota']);   
$nota_var = mysql_real_escape_string($_POST['nota_var']);   
$nota_sup = mysql_real_escape_string($_POST['nota_sup']);   
$ref_txt = mysql_real_escape_string($_POST['ref_txt']);   
$ref_1601 = mysql_real_escape_string($_POST['ref_1601']);   
$t_suj = mysql_real_escape_string($_POST['t_suj']);   
$lien = mysql_real_escape_string($_POST['lien']);   
$n_suj = mysql_real_escape_string($_POST['n_suj']);   
$v_v = mysql_real_escape_string($_POST['v_v']);   
$nombre = mysql_real_escape_string($_POST['nombre']);   
$main = mysql_real_escape_string($_POST['main']);   
$commentaire = mysql_real_escape_string($_POST['commentaire']);   

$query = "SELECT *    
FROM marginalia    
WHERE margindex LIKE '%".$margindex."%'   
AND nota LIKE '%".$nota."%'   
AND nota_var LIKE '%".$nota_var."%'   
AND nota_sup LIKE '%".$nota_sup."%'   
AND ref_txt LIKE '%".$ref_txt."%'   
AND ref_1601 LIKE '%".$ref_1601."%'   
AND t_suj LIKE '%".$t_suj."%'   
AND lien LIKE '%".$lien."%'   
AND n_suj LIKE '%".$n_suj."%'   
AND v_v LIKE '%".$v_v."%'   
AND nombre LIKE '%".$nombre."%'   
AND main LIKE '%".$main."%'   
AND commentaire LIKE '%".$commentaire."%'   
ORDER BY margindex";   

$result = mysql_query($query) OR die(mysql_error());   

echo [bla bla bla]
0
va prendre des cours....
0
Info_Queno Messages postés 849 Date d'inscription mardi 17 août 2010 Statut Membre Dernière intervention 12 novembre 2010 92
21 sept. 2010 à 11:33
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql
Si tu as envie de comprendre un peu plus en détail.

Sinon je comprend pas ton problème en fait, est ce que tu pourrais reformuler ?
0