Php/mysql - query improbable (where and)

Résolu/Fermé
Jer - 21 sept. 2010 à 14:32
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 22 sept. 2010 à 09:17
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 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
21 sept. 2010 à 14:56
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
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 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
21 sept. 2010 à 15:27
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
><
Ca marche pas, erreur de syntaxe 1064.
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
21 sept. 2010 à 15:52
et voila d'ou vient l'erreur ^^

montre nous ce que retourne le echo.
0
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 lundi 13 septembre 2010 Statut Membre Dernière intervention 1 septembre 2011 13
21 sept. 2010 à 16:09
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
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 lundi 13 septembre 2010 Statut Membre Dernière intervention 1 septembre 2011 13
21 sept. 2010 à 16:19
k pour key
v pour value

Dans les exemples c'est souvent k et v ou key et val.
0
OK, merci !
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
21 sept. 2010 à 14:36
Bonjour,

est tu sur qu'il existe au moins une ligne que ta requête peut retourner?
0
Oui, j'ai testé beaucoup de possibilités.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 sept. 2010 à 14:53
Bonjour,

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

Xavier
0
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
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 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
21 sept. 2010 à 15:44
sa reviens a faire un echo de sa requete ^^
0
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 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 sept. 2010 à 16:01
D'un autre côté, * n'est pas un métacaractère en SQL, donc ça c'est normal. Mets % plutôt.
0
C'était dans le formulaire html. Avec * ou %, j'obtiens la même chose.
0