Formulaire multi-critères

kryow Messages postés 4 Date d'inscription jeudi 13 août 2009 Statut Membre Dernière intervention 4 septembre 2010 - 4 sept. 2010 à 16:46
omarino_007 Messages postés 24 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 27 décembre 2010 - 5 sept. 2010 à 00:04
onjour à tous,

Je sollicite votre aide pour un projet sur lequel je travaille depuis un certain temps...sans succès !

Le "Cahier des charges" :


Je souhaiterais créer un formulaire de recherche multi-critères afin de rechercher des motos plus facilement à partir de critères. Les champs du formulaire (sous forme de cases à cocher) correspondraient aux caractéristiques des différents critères.

Le formulaire comporterait les champs suivants :

- Marque (choix possibles : Beta, Derbi, Yamaha)
- Couleur (choix possibles : Noir, Rouge, Bleu, Blanc, Orange, Vert)
- Kilometrage (0 à 1000km, 1000 à 10 000km, 10 000 à 15 000km, 15 000 à 20 000km)
- Année (choix possibles : 2003, 2004, 2005, 2006, 2007, 2008, 2009)
- Distance (choix possibles : -50km, 50 à 60km, 60 à 75km, 75 à 100km, +100km)
- Note (choix possibles : 1, 2, 3, 4, 5)
- Frais supplementaires (choix possibles : 0, 1, 2, 3)
- Prix (choix possibles : -1 000 €, 1 000 à 1 200 €, 1 200 à 1 500 €, 1 500 à 1 700 €, +1 700 €)

Tous ne doivent pas être forcément renseignés.

En résumé, j'aimerai avir quelque chose qui ressemble à ce systeme (le cadre "Affiner votre recherche" ainsi que les résultats bien évidement).

Ma base de données :
Voici un screenshot de ma base de données :



Mon formulaire :







Rechercher une moto






Chercher une moto :





Marque :

Beta

Derbi

Yamaha





Année :

2003

2004

2005

2006

2007

2008

2009







Prix :

-1 000 €

1 000 € à 1 200 €

1 200 € à 1 500 €

1 500 € à 1 700 €

+1 700 €





Note :

1

2

3

4

5







Couleur :

Noir

Rouge

Bleu

Blanc

Vert

Orange





Kilométrage :

0 à 1 000 KM

1 000 à 10 000 KM

10 000 à 15 000 KM

15 000 à 20 000 KM







Distance :

-50 KM

50 KM à 60 KM

60 KM à 75 KM

75 KM à 100 KM

+100 KM





Frais Supplementaires :

0

1

2

3


























Le Code PHP :


C'est cette partie du code qui me pose problème...
Je ne vois pas comment faire pour que, par exemple, si beta et 2003 sont cocher, n'afficher que les betas de 2003, si yamaha, bleu, 2004 et -1 000 € sont cocher, n'aficher que les Yamaha bleu de 2004 à moins de 1 000 €.

Je proposerais bien ça mais le problème est que si on coche par exemple derbi, sa affiche toutes les derbi, mais si on coche derbi ET 2003, sa n'affiche que les derbi :




Marque :

Couleur :

Kilométrage :

Année :

Distance :

Note :

Frais supplémentaires :

Prix :






Marque :

Couleur :

Kilométrage :

Année :

Distance :

Note :

Frais supplémentaires :

Prix :






Marque :

Couleur :

Kilométrage :

Année :

Distance :

Note :

Frais supplémentaires :

Prix :






Marque :

Couleur :

Kilométrage :

Année :

Distance :

Note :

Frais supplémentaires :

Prix :






Marque :

Couleur :

Kilométrage :

Année :

Distance :

Note :

Frais supplémentaires :

Prix :







Merci d'avance à ceux qui voudront bien m'aider à rendre mon formulaire utilisable...

1 réponse

omarino_007 Messages postés 24 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 27 décembre 2010
5 sept. 2010 à 00:04
Bonjour kryow,
-Quand tu fais une checkbox, n'oubli pas de mettre value="valeur_que_tu_veux"

Exemple :
<td></td>

Comme tu peux voir, selection[] est une liste contenant la valeur des champs selectionnés

Quand tu veux avoir par la suite les valeurs récupérées par la liste selection :
foreach($_POST['selection'] as $item){ 
             echo $item; 
}


-Maintenant, pour le filtre :
Une astuce simple consiste à concaténer dans la requête SQL les conditions que tu veux :

Exemple :

$aValues = array(
'category' => '',
'style' => '',
'theme' => '',
'owner' => '',
'format' => '',
'price' => '',
'maincolor' => ''
);

//Compteur utilisé pour énumérer le nombre de conditions
$i=0;

//Récupération des variables transmises par la méthode GET

if(empty($_GET['category'])) $aValues['category'] = '';
else{ 	$aValues['category'] = $_GET['category'];
}

if(empty($_GET['style'])) $aValues['style'] ='';
else{ 	$aValues['style'] = $_GET['style'];
}

if(empty($_GET['theme'])) $aValues['theme'] = '';
else{ 	$aValues['theme'] = $_GET['theme'];
}

if(empty($_GET['artist'])) $aValues['owner'] = '';
else{ 	$aValues['owner'] = $_GET['artist'];
}

if(empty($_GET['format'])) $aValues['format'] = '';
else{	$aValues['format'] = $_GET['format'];
}

if(empty($_GET['price'])) $aValues['price'] =  '' ;
else{	$aValues['price'] = $_GET['price'];
}

if(empty($_GET['color'])) $aValues['maincolor'] =  '';
else{ 	$aValues['maincolor'] = $_GET['color'];
}
foreach($aValues as $key => $value) {			
if(!empty($value)){
if($key=='price'){								
if($value=='1to2'){
$condition[$i]=$key." BETWEEN 1000 AND 2000";
}

else if($value=='2to5'){
$condition[$i]=$key." BETWEEN 2000 AND 5000";
}

else if($value=='5to10'){
$condition[$i]=$key." BETWEEN 5000 AND 10000";
}

else if($value=='morethan10'){
$condition[$i]=$key." >=1000";
}

$i++;
}else{
$condition[$i]=$key."='".$value."'";
$i++;
}
}
}	

$q "SELECT * from table where isvalidated '1'";

for($j=0;$j<$i;$j++){
if(isset($condition[$j])) $q .= " AND ".$condition[$j];
}


Peut-être que le code n'est pas très propre mais c'est juste des exemples pour t'en sortir avec des astuces pas trop compliquées.
Bon courage et n'hésites pas si tu as des questions
0
Rejoignez-nous