SELECT tout quand champ est vide

Eléphanteau du PHP | 27 Messages

24 avr. 2005, 17:47

Bonjour !

Voila un simple pro... mais je sais pas comment faire

2 champs texte

type
Ville + validation formulaire

je fais une recherche en base du type
SELECT * from matable WHERE type='$type' && ville='$ville'

Voila le truc, j'aimerais que si l'utilisateur ne rempli
pas un des champs que la recherche se fasse sur tout les types ou villes.
Je m'explique, s'il ne rempli pas le champ ville, la recherche se fais
sur toute les villes et pas celle choisi (qui d'ailleurs est NULL...)
Idem pour le type

Merci car vraiment je sèche !!

Mammouth du PHP | 19672 Messages

24 avr. 2005, 18:13

SAlut,
représente toi le schéma suivant : tu dois construire dynamiquement ta requête : elle a trois possibilités:

Code : Tout sélectionner

/* -1- */ SELECT * from matable WHERE type='". $type ."' AND ville='". $ville. "' /* -2- */ SELECT * from matable WHERE type='". $type ."' /* -3- */ SELECT * from matable WHERE ville='". $ville ."'
On remarque une constante : tu peux donc créer une variable de base:
$sql = "SELECT * from matable WHERE ";
/* On vérifie quels champs ont été utilisés pour la requête */
if($type != "" && $ville != "")
{
    $sql .= "type = '". $type ."' AND ville = '". $ville ."'";
}
elseif($type != "" && $ville == "")
{
    $sql .= "type = '". $type ."'";
}
elseif($type == "" && $ville != "")
{
    $sql .= "ville = '". $ville ."'";
}
Maintenant, ta requête sera complête selon le choix. J'aurais pu simplifier un peu, mais là, c'est ce qui me semble le plus visuellement compréhensible dans son principe de fonctionnement :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

25 avr. 2005, 18:52

Oui, construit ta requette sur des element logik (si, sinon, alors...) ou bien tu teste le IS NULL et tu mé un '%' (tout) sur ton champ ville (comme cela, ca liste toute les ville) :)

Eléphanteau du PHP | 27 Messages

25 avr. 2005, 20:46

Merci, je vais faire des tests avec %... maintenant pour le transcrire !

Ca rique d'être chaud.... si qq peut m'aider ...

En tout cas un grand merci

Mammouth du PHP | 19672 Messages

25 avr. 2005, 20:55

Ben commence un bout de script et si tu cales, viens nous voir :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VentduSud.
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 18:44

Bon ben je lache because ca fait 1 mois que je cherche et je n'ai jamais réussi....

ET pour simplifier, j'avais mis 2 champs et en réalité, j'en ai 5...

Bref...

Merci en tous cas ....

Mammouth du PHP | 19672 Messages

28 mai 2005, 18:59

Fais-nous voir ce que tu as fait, c'est peut-être pas si loin du compte ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

28 mai 2005, 19:12

sinon pour construire une requête dynamiquement et facilement on peut faire comme ça :
$req = "SELECT * FROM table WHERE 'true' = 'true'";

if($type != "") {
   $req .= " AND type = '".$type."'";
}

if($ville != "") {
   $req .= " AND ville = '".$ville."'";
}
ce qui évite de tester à chaque critère si c'est le premier ou non et donc si on doit mettre WHERE ou AND

parcequ'avec 5 critères t'as pas finis avec tes if et elseif Cyrano :lol:

VentduSud.
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 19:16

En fait mon code à atteint des centaines de ligne car comme je le précisait plus haut, Il a fallu tester pour 5 champ...

Le code est interminable... et ca me parait pas très sain.
Dans un second, temps j'ai cherché a mettre un "all" pour valeur d'un des
champs lorsque celui ci est vide... sans succès.

Ce qui me parait hyper curieux, c'est que je ne dois pas être le seul
à avoir galéré la dessus et je n'ai trouvé aucune soluce fiable.

Pour résumer, il y a 5 puissance 5 combinaison.... c'est complétement
dément à écrire....

Doit y avoir une autre soluce.... c'est sur...

En tous cas, merci pour tes encouragements et pour ton aide...

Mammouth du PHP | 19672 Messages

28 mai 2005, 19:19

C'est vrai que ta méthode est plus simple et probablement un poil plus rapide.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

28 mai 2005, 19:20

Pour résumer, il y a 5 puissance 5 combinaison.... c'est complétement
dément à écrire....

Doit y avoir une autre soluce.... c'est sur...
oui, effectivement il y en a au moins une et elle est dans le message précédent ;)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 mai 2005, 20:56

$req = "SELECT * FROM table WHERE 1 = 1";
if ($type!="")  $req .= " AND type = '".$type."'";
if ($ville!="") $req .= " AND ville = '".$ville."'";
Plus c'est simple, plus c'est bon ! :langue:

VentduSud.
Invité n'ayant pas de compte PHPfrance

28 mai 2005, 21:05

Mince de mince... :D
Ce qui me gonfle, c'est que j'aurais jamais pensé a cela... ni mm l'écrire !
Je vais tester... si ca morche po, je viendrais m'humilier un peu plus... :oops:
En tout cas, merci... :wink:

Mammouth du PHP | 19672 Messages

28 mai 2005, 21:12

... si ca morche po, je viendrais m'humilier un peu plus...
Les plus humbles sont ceux qui sont en réalité ceux qui savent le mieux cacher leur grandeur :)
Mince, qu'est-ce que je cause bien quand je philosophe
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

VenduSud.
Invité n'ayant pas de compte PHPfrance

29 mai 2005, 11:43

C'est gentil... ca.... mais rien a voir avec de la fausse modestie... :wink:

Je met mon code.... because ca chuinte..... :D


<?
$Requete = mysql_query("SELECT * FROM biens WHERE 'true' = 'true'");

if($prix != "")
{
$Requete .= " AND prix = '".$prix."'";
}
if($ville != "")
{
$Requete .= " AND ville = '".$ville."'";
}
if($typ != "")
{
$Requete .= " AND typ = '".$typ."'";
}
if($surf != "")
{
$Requete .= " AND surf = '".$surf."'";
}
if($et != "")
{
$Requete .= " AND et = '".$et."'";
}

echo "<table class=\"texte\" width=\"96%\" border=\"1\" bordercolor=\"#FFE26F\" cellspacing=\"0\" align=\"center\">";
echo "<tr>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">S.</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">N°</td>";
echo "<td WIDTH=6% align=\"center\" bgcolor=\"#FFCB1A\">Ville</td>";
echo "<td WIDTH=4% align=\"center\" bgcolor=\"#FFCB1A\">Type</td>";
echo "<td WIDTH=5% align=\"center\" bgcolor=\"#FFCB1A\">Prix</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Surf</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Photo 1</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Photo 2</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Photo 3</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Photo 4</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFCB1A\">Editer</td>";

echo "</tr>";
while($Result = mysql_fetch_array($Requete))
{
echo "<tr>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFECAA\"><input type=\"button\" value=\"S\" style=\"FONT-FAMILY: Verdana; FONT-SIZE: 8pt\" OnClick=\"window.location='../../photos/photos/purge_a.php?num=".$Result[num]." && tof1=".$Result[tof1]." && tof2=".$Result[tof2]." && tof3=".$Result[tof3]." && tof4=".$Result[tof4]."'\"></td>";
echo "<td WIDTH=3% align=\"center\">". stripslashes($Result[num])."&nbsp;</td>";
echo "<td WIDTH=6% align=\"center\">". stripslashes($Result[ville])."&nbsp;</td>";
echo "<td WIDTH=4% align=\"center\">". stripslashes($Result[typ])."&nbsp;</td>";
echo "<td WIDTH=5% align=\"center\">". stripslashes($Result[prixe])."&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\">". stripslashes($Result[surf])."&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\"bgcolor=\"#FFFFE8\" ><img height=\"60\" src=\"../../photos/photos/".stripslashes($Result[tof1])."\">&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\"bgcolor=\"#FFFFE8\" ><img height=\"60\" src=\"../../photos/photos/".stripslashes($Result[tof2])."\">&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\"bgcolor=\"#FFFFE8\" ><img height=\"60\" src=\"../../photos/photos/".stripslashes($Result[tof3])."\">&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\"bgcolor=\"#FFFFE8\" ><img height=\"60\" src=\"../../photos/photos/".stripslashes($Result[tof4])."\">&nbsp;</td>";
echo "<td WIDTH=3% align=\"center\" bgcolor=\"#FFF9E1\"><input type=\"button\" value=\"E.\" style=\"FONT-FAMILY: Verdana; FONT-SIZE: 8pt\" OnClick=\"window.location='detail_a.php?num=".$Result[num]."'\"></td>";
}
echo "</table>";
?>


Mais je ne desespère pas !!!