Aller au contenu

recherche multi critere


Sujets conseillés

Posté

Bonjour le hub,

me revoila avec un nouveau souci.

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 :

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

Posté (modifié)

ok c'est bon j'ai trouvé

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

en fait non ca marchait pas...

Modifié par gontran
Posté

Bonjour,

Pourquoi ne pas essayer de faire ca :

<?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 :)

Posté (modifié)

alors j'en suis la :

	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

Modifié par gontran
Posté

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

Posté (modifié)

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

Modifié par gontran
Posté

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

Posté

bon je me suis remis sur mon moteur de recherche...

une petite question :

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

a quoi correspond le "where1=1" ?

merci

Posté

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+

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...