Version complète: sur le forum Webmaster Hub : recherche multi critere
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
gontran
Bonjour le hub,

me revoila avec un nouveau souci.

CODE
if ($anneeurl!="" && $couleururl!="" && $appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl'
                        and couleur='$couleururl'
                        and appelation='$appelationurl'");
        $reschato=mysql_fetch_array($req);


Le code ci dessus verifie que les champs du formulaire sont bien remplis, ensuite j'interoge ma table pour savoir si il esiste des enregistrements correspodant à la requete.
Mon probleme est que lorsque j'ai plusieurs enregistrement correspondant à ma requete je n'arrive à selectionner que le premier.

J'ai essayer de faire ca :

CODE
if ($anneeurl!="" && $couleururl!="" && $appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl'
                         and couleur='$couleururl'
                         and appelation='$appelationurl'");
        while ($reschato=mysql_fetch_array($req));


Ca ne marche pas, la requete ne trouve aucun enregistrement alors qu'il y en a 2 dans la table.

Est-ce que quelqu'un aurai une idée ?

Merci

Gontran
gontran
ok c'est bon j'ai trouvé

y'avais un ";" en trop derriere ma boucle while

en fait non ca marchait pas...
Portekoi
Bonjour,

Pourquoi ne pas essayer de faire ca :

CODE
<?php

//On vide $sqlwhere au cas où il serait utilisé pls haut...
$sqlwhere =  "";

//Si $anneeurl  est différent de rien, je le rajoute dans ma clause where
if ($anneeurl != "")
//En francais, ca donne : $sqlwhere est égale à 'and millesime= 'valeur de $anneeurl '
//Donc cela me construit ma clausse where de ma requete...
$sqlwhere = $sqlwhere . " and millesime='$anneeurl'";

if ($couleururl != "")
$sqlwhere = $sqlwhere . " and couleur='$couleururl'";

if ($appelationurl != "")
$sqlwhere = $sqlwhere . " and appelation='$appelationurl'";

//A la fin, on peut faire un : echo $sqlwhere afin de voir à quoi va ressembler notre requete...
echo $sqlwhere;

$req=mysql_query("SELECT id from vin WHERE 1=1 " . $sqlwhere . ");
$reschato=mysql_fetch_array($req);

?>


A tester smile.gif
gontran
alors j'en suis la :

CODE
    elseif ($anneeurl!="" && $couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl' and couleur='$couleururl'");
}
        elseif ($anneeurl!="" && $appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl' and appelation='$appelationurl'");
}
        elseif ($appelationurl!="" && $couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE couleur='$couleururl' and appelation='$appelationurl'");
}
        elseif ($anneeurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl'");    
}
        elseif ($couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE couleur='$couleururl'");    
}
        elseif ($appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE appelation='$appelationurl'");    
}
                while ($reschato=mysql_fetch_array($req))


est-ce que ca vous semble propre et correct ??

De plus j'ai tester et ca a l'air de fonctionner...

Me retse juste un petit truc a reussir, qui est d'afficher le message "pas de resultat trouvé pour votre recherche" si la requete ne trouve rien
Portekoi
BOnsoir,

Je vois que cela ne sert pas à grand chose de vous aider dans la mesure où vous ne tenez pas compte des solutions proposées.

Ma solution remplace la votre le tout en 10 lignes.

Bonne soirée


Portekoi
gontran
j'ai essayer votre solution, mais j'ai un peu de mal a comprendre et ca ne fonctionner pas

de plus j'ai mis celle la en fonction mais je n'ai pas dit que j'allais en rester la...

et celle que j'ai mis en fonction fais 12 lignes...
Portekoi
CODE
  elseif ($anneeurl!="" && $couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl' and couleur='$couleururl'");
}
        elseif ($anneeurl!="" && $appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl' and appelation='$appelationurl'");
}
        elseif ($appelationurl!="" && $couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE couleur='$couleururl' and appelation='$appelationurl'");
}
        elseif ($anneeurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE millesime='$anneeurl'");    
}
        elseif ($couleururl!="")
{
        $req=mysql_query("SELECT id from vin WHERE couleur='$couleururl'");    
}
        elseif ($appelationurl!="")
{
        $req=mysql_query("SELECT id from vin WHERE appelation='$appelationurl'");    
}
                while ($reschato=mysql_fetch_array($req))


Cette solution là? Au vu du else if au dessus, je vois que ce n'est qu'une partie.

Faites comme bon vous semble. smile.gif
gontran
je veux ressayer votre solution.

est-ce qu'il serai possible que vous la documentier un peu...

merci
Portekoi
J'ai modifié ma source plus haut. Je ne peux pas faire plus pour le moment. smile.gif
gontran
bon je me suis remis sur mon moteur de recherche...

une petite question :
CODE
$req=mysql_query("SELECT id from vin WHERE 1=1 " . $sqlwhere . ");


a quoi correspond le "where1=1" ?

merci
Bourinho
salut,

a mon avis c'est pour éviter que la requête sql plante si $sqlwhere est vide....

C'est un bon moyen d'éviter les embrouilles sans que cela coûte en ressource!!!

A+
gontran
ok

merci
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.