Les Allergies
Alimentaires
Posez votre question Signaler

PHP-MySQL: LIKE +variables saisies dans FORM [Résolu]

Jer - Dernière réponse le 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.
Lire la suite 

PHP-MySQL: LIKE +variables saisies dans FORM »

4 réponses
Réponse
+2
moins plus
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";
Jer - 21 sept. 2010 à 12:11
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]
joh; - 6 nov. 2010 à 23:51
va prendre des cours....
Ajouter un commentaire
Réponse
+0
moins plus
http://www.siteduzero.com/...
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 ?
Ajouter un commentaire
Ce document intitulé « PHP-MySQL: LIKE +variables saisies dans FORM » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?