Php/mysql - query improbable (where and)

Résolu
Jer -  
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Ce matin, j'ai pu me faire aider pour la définition de mes variables dans ma requête (requête php > mysql pour interroger une db en fonction du contenu des champs dans un formulaire html (méthode post).

La requête passe bien quand on prend les champs 1 par 1, par exemple avec ceci:

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


Mais ça coince lorsque je veux les combiner, comme ceci :

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


Pourquoi la combinaison des critères n'appelle-t-elle donc aucun résultat ?

Merci d'avance !


mysql_connect (etc...)
mysql_select_db (etc...)

$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 ref_txt LIKE '%".$ref_txt."%'
AND v_v LIKE '%".$v_v."%'
AND nombre LIKE '%".$nombre."%'
AND main LIKE '%".$main."%'
ORDER BY margindex";


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


echo (etc...)


A voir également:

5 réponses

varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
et as tu essayer ta requête en brut? je veut dire par la, sans passer par le php, directement dans ton éditeur sql?
2
Jer
 
Oui, la requête en brut est OK dans l'éditeur car je dois remplacer '%".$margindex."%' et autres par les valeurs demandées. Ici, c'est le fait de combiner les termes de recherches de plusieurs champs de mon formulaire qui pose problème.
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
ok, alors essaye de faire ça:

ajoute un echo $query; juste après ta requête, et test cette requête tel quel dans ton éditeur sql
0
Jer
 
><
Ca marche pas, erreur de syntaxe 1064.
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
et voila d'ou vient l'erreur ^^

montre nous ce que retourne le echo.
0
Jer
 
Lorsque j'exécute ceci dans l'éditeur :

SELECT * 
FROM marginalia 
WHERE margindex LIKE '%".$margindex."%'
AND nota LIKE '%".$nota."%'
AND nota_var LIKE '%".$nota_var."%'
AND ref_txt LIKE '%".$ref_txt."%'
AND v_v LIKE '%".$v_v."%'
AND nombre LIKE '%".$nombre."%'
AND main LIKE '%".$main."%'
ORDER BY margindex;
echo $query;


J'obtiens ceci :
Erreur

requête SQL:

echo $query;

MySQL a répondu: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'echo $query' at line 1


J'ai peut-être mal interprété ce que tu me conseillais de faire. :-/
0
Jug4tsu Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   13
 
Au passage, a la place de tous tes mysql_real_escape_string mets ça, tu gagneras de la place ;)

foreach ($_POST as $k=>$v) {
	$$k = mysql_real_escape_string($v);
}
1
Jer
 
Cool, merci. Je cherchais un truc du genre ce midi, en vain.
;-)

(Pour mon info perso : pourquoi les lettres k et v ?)
0
Jug4tsu Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   13
 
k pour key
v pour value

Dans les exemples c'est souvent k et v ou key et val.
0
Jer
 
OK, merci !
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
Bonjour,

est tu sur qu'il existe au moins une ligne que ta requête peut retourner?
0
Jer
 
Oui, j'ai testé beaucoup de possibilités.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Tu es sûr que tu ne voudrais pas des OR à la place des AND ?

Xavier
0
Jer
 
Oui, des AND.
(J'ai qd-même essayé avec OR, mais ça rend la même chose : rien.)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kalidou
 
teste si tes variables php ne sont pas vides avant d'executer la requete
exple: if((!empty($margindex))and..... )
{

//ta requete
}
0
varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
 
sa reviens a faire un echo de sa requete ^^
0
Jer
 
Il me dit que la query est vide, alors que j'ai envoyé les valeurs exactes d'un enregistrement à rechercher. :-s
Quand je mets des * partout, il me retourne uniquement les titres des colonnes, tableau vide.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
D'un autre côté, * n'est pas un métacaractère en SQL, donc ça c'est normal. Mets % plutôt.
0
Jer
 
C'était dans le formulaire html. Avec * ou %, j'obtiens la même chose.
0