Combiner le résultat de deux requêtes sur une même table - SQL/NoSQL - Programmation
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 :
|
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...
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%'";
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.
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.
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>";
}
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 :
|
et sur 'pagedest.php', le
Code :
|
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
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 !
Message édité par 1cat le 02-05-2007 à 18:24:00