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...)


5 réponses

  1. 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
    1. 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
    2. 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
    3. Jer
       
      ><
      Ca marche pas, erreur de syntaxe 1064.
      0
    4. 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
    5. 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
  2. Jug4tsu Messages postés 56 Statut Membre 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
    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
    2. Jug4tsu Messages postés 56 Statut Membre 13
       
      k pour key
      v pour value

      Dans les exemples c'est souvent k et v ou key et val.
      0
    3. Jer
       
      OK, merci !
      0
  3. 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
    1. Jer
       
      Oui, j'ai testé beaucoup de possibilités.
      0
  4. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

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

    Xavier
    0
    1. Jer
       
      Oui, des AND.
      (J'ai qd-même essayé avec OR, mais ça rend la même chose : rien.)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

    //ta requete
    }
    0
    1. varfendell Messages postés 3259 Date d'inscription   Statut Membre Dernière intervention   707
       
      sa reviens a faire un echo de sa requete ^^
      0
    2. 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
    3. Reivax962 Messages postés 3742 Statut Membre 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
    4. Jer
       
      C'était dans le formulaire html. Avec * ou %, j'obtiens la même chose.
      0