PHP-MySQL: LIKE +variables saisies dans FORM

Résolu
Jer -  
 joh; -
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   Statut Membre Dernière intervention   13
 
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
Jer
 
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
joh;
 
va prendre des cours....
0
Info_Queno Messages postés 849 Date d'inscription   Statut Membre Dernière intervention   92
 
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