Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1426 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1535605
1cat
Posté le 29-03-2007 à 10:07:34  profilanswer
 

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
mood
Publicité
Posté le 29-03-2007 à 10:07:34  profilanswer
 

n°1535653
ZeBix
edit > preview
Posté le 29-03-2007 à 10:42:02  profilanswer
 

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
n°1535655
1cat
Posté le 29-03-2007 à 10:45:20  profilanswer
 

Je vais essayer cela, grand merci !

n°1535659
1cat
Posté le 29-03-2007 à 10:54:46  profilanswer
 

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

n°1535804
ZeBix
edit &gt; preview
Posté le 29-03-2007 à 14:18:40  profilanswer
 

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%'";  

n°1536183
1cat
Posté le 30-03-2007 à 06:42:28  profilanswer
 

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
n°1536187
1cat
Posté le 30-03-2007 à 07:16:35  profilanswer
 

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.

n°1536188
1cat
Posté le 30-03-2007 à 07:42:18  profilanswer
 

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>";
   }

n°1537634
ZeBix
edit &gt; preview
Posté le 03-04-2007 à 10:23:19  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
[Résolu] Pb modification structure table pr rajouter auto-incrementFOR %%i do et resultat dans un fichier texte
table innodbenregistrer une table dans un fichier texte
Verifier éxistence table SQLProblème d'affichage d'une table
Optimisation requetes imbriquées Afficher les resultat de plusieurs requete provenant d'une boucle
Afficher l'ensembre d'une tableSQlite + Python: Problème de "CREATE TABLE IF NOT EXISTS"
Plus de sujets relatifs à : Combiner le résultat de deux requêtes sur une même table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR