Combiner le résultat de deux requêtes sur une même table

Combiner le résultat de deux requêtes sur une même table - SQL/NoSQL - Programmation

Marsh Posté le 29-03-2007 à 10:07:34    

Bonjour !
 
Je travaille sur un formulaire relativement simple composé de deux champs de saisie, name et motclé
 
Je voudrais, quand le visiteur saisit quelque chose dans les deux champs en même temps, que s'affichent les résultats de la requête sur "name" et ceux de la requête "motclé".
 
J'ai tenté à faire cela grâce à AND ou OR mais ça ne marche pas; j'ai même essayé avec UNION, sans résultat aussi. Je commence à désespérer.
 
Voici le code actuel du fichier php qui traite ce que renvoye le formulaire (je laisse tomber les trucs de connexion et d'affichage de tableau):  
 
$name = $_GET['name'];
$motcle = $_GET['motcle'];
       
  if($name){
       $requete="SELECT * FROM Etat WHERE Identification LIKE '$name%'";
       $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );}
       
  if($motcle){
       $requete="SELECT * FROM Etat WHERE Identification LIKE '%$motcle%'";
       $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );}
 
else{
        $requete="SELECT * FROM Etat WHERE Identification LIKE '$name%' OR '%$motcle%'";
        $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );}
 
Cela donne un résultat qui ne prend en compte que ce qui est inséré sous motclé, name est ignoré... je n'y comprends rien  :cry: !


Message édité par 1cat le 02-05-2007 à 18:24:00
Reply

Marsh Posté le 29-03-2007 à 10:07:34   

Reply

Marsh Posté le 29-03-2007 à 10:42:02    

Salut,

 

il y a un problème dans tes conditions je pense. Tel quel, ton code veut dire ceci :

 

si name -> requete 1
si motcle -> requete 2 ; sinon -> requete 3

 

le "sinon" ne porte que sur le deuxième test et surtout, "$resultat"  de la premiere condition est écrasé par celui de la deuxième condition (qu'elle soit if ou else).

 

Je te proposerais plutôt un truc du genre :

 
Code :
  1. if (isset($_GET['name']) && !isset($_GET['motcle']))   // bien plus propre d'utiliser un isset()
  2. { // requete 1
  3. }
  4. elseif (!isset($_GET['name']) && isset($_GET['motcle']))
  5. { // requete 2
  6. }
  7. elseif (isset($_GET['name']) && isset($_GET['motcle']))
  8. { // requete 3
  9. }
  10. else
  11. { echo "<p>ERREUR</p>";
  12. }
 


Message édité par ZeBix le 29-03-2007 à 10:44:07
Reply

Marsh Posté le 29-03-2007 à 10:45:20    

Je vais essayer cela, grand merci !

Reply

Marsh Posté le 29-03-2007 à 10:54:46    

Malheureusement ça ne marche pas. Si nom et motclé sont rempli, il ne me sort que les réponses pour nom. Si seulement motclé est rempli, il me sort l'ensemble des lignes contenus dans la base, sans tri aucun...

Reply

Marsh Posté le 29-03-2007 à 14:18:40    

Normalement la logique est correcte maintenant, alors je dirais ce sont soit tes requêtes qui ne sont pas bonnes (*), soit ta base de données qui est mal peuplée, soit tu vas chercher les mauvais éléments
 
(*) je viens de remarquer une erreur majeure dans ta troisième requête :  
 
$requete="SELECT * FROM Etat WHERE Identification LIKE '$name%' OR '%$motcle%'";  
 
--> $requete="SELECT * FROM Etat WHERE Identification LIKE '$name%' OR Identification LIKE '%$motcle%'";  

Reply

Marsh Posté le 30-03-2007 à 06:42:28    

Merci pour ce tuyau : enfin, cette partie de la requête s'exécute correctement. Mais, un nouveau problème apparaît: maintenant les recherches sur un seul critère (nom ou motclé) ne marchent plus, elles renvoient l'ensemble du contenu de la base de données.
 
Je n'y comprends plus rien, c'est super lourd cette histoire.


Message édité par 1cat le 30-03-2007 à 07:13:39
Reply

Marsh Posté le 30-03-2007 à 07:16:35    

J'ai l'impression que dès qu'une des trois requêtes marche, les deux autres ne fonctionnent plus et donnent comme résultat le contenu de la base, sans tri.

Reply

Marsh Posté le 30-03-2007 à 07:42:18    

Eh bien, ça marche maintenant; bizarrement, ce sont les isset qui ont causé le problème, et l'appel des (!_GET[truc]). Grand merci zebix car la structure est bien celle que tu as indiqué et l'erreur sur la dernière requête m'aurait empeché d'avancer pendant un bon bout de temps !
 
Voici le résultat des efforts :
 
if (($name) && (!$motcle))
      {
    $requete="SELECT * FROM Etat WHERE Identification LIKE '$name%'";
   $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );
   }
 
elseif (($motcle) && (!$name))
      {
    $requete="SELECT * FROM Etat WHERE Identification LIKE '%$motcle%'";
   $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );
   }
   
elseif (($name) && ($motcle))
    {
   $requete="SELECT * FROM Etat WHERE Identification LIKE '$name%' OR Identification LIKE '%$motcle%'";
   $resultat=mysql_query($requete) or die("Exécution de la requête impossible" );
   }
   
else
                       {  
   echo "<p>ERREUR</p>";
   }

Reply

Marsh Posté le 03-04-2007 à 10:23:19    

De rien :)
 

1cat a écrit :

bizarrement, ce sont les isset qui ont causé le problème, et l'appel des (!_GET[truc]).


Tu es sûr que tu envoies bien tes variables à cette page avec un formulaire dont la method est "get", hein ?  Sorry si la question paraît stupide ;)
 
sur la page du formulaire :  

Code :
  1. <form method='get' action='pagedest.php'>
  2. <input type='text' value='name'>
  3. </form>


 
et sur 'pagedest.php', le  

Code :
  1. if (isset($_GET['name']))


 doit fonctionner ...
 
Doc sur isset():
http://be2.php.net/manual/fr/function.isset.php
 
A noter aussi que la method "get" affiche tes variables dans l'URL de ta page (sous la forme  " pagedest.php?name=toto&motcle=tata " ) , ce qui est un manquement de sécurité dans certains cas, à toi de voir ce que tu transmets ;) Sinon, utilise la méthode "post" et le $_POST['var'] pour accéder aux variables

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed