begin process at 2012 05 30 21:15:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Formulaire multi-critères


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Formulaire multi-critères

samedi 4 septembre 2010 à 16:46:16 | Formulaire multi-critères

kryow

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

<taille valeur="gros"><souligne><gras>Ma base de données :</gras></souligne></taille>
Voici un screenshot de ma base de données :



Mon formulaire :

Code HTML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Rechercher une moto</title>
<link rel="stylesheet" media="screen" type="text/css" title="css" href="css.css" />
</head>

<body>

<form method="post" action="choix.php" id=criteres>
<p class="titre">Chercher une moto :</p>
    <div id="Marque_Annee">
   <p>
       <span class="sous-titre">Marque :</span><br />
       <input type="checkbox" name="beta" id="beta" tabindex="10" /> <label for="beta">Beta</label><br />
       <input type="checkbox" name="derbi" id="derbi" tabindex="20" /> <label for="derbi">Derbi</label><br />
       <input type="checkbox" name="yamaha" id="yamaha" tabindex="30" /> <label for="yamaha">Yamaha</label><br />
   </p>
   <p>
       <span class="sous-titre">Année :</span><br />
       <input type="checkbox" name="2003" id="2003" tabindex="40" /> <label for="2003">2003</label><br />
       <input type="checkbox" name="2004" id="2004" tabindex="50" /> <label for="2004">2004</label><br />
       <input type="checkbox" name="2005" id="2005" tabindex="60" /> <label for="2005">2005</label><br />
       <input type="checkbox" name="2006" id="2006" tabindex="70" /> <label for="2006">2006</label><br />
       <input type="checkbox" name="2007" id="2007" tabindex="80" /> <label for="2007">2007</label><br />
       <input type="checkbox" name="2008" id="2008" tabindex="90" /> <label for="2008">2008</label><br />
       <input type="checkbox" name="2009" id="2009" tabindex="100" /> <label for="2009">2009</label><br />
   </p></div>
   <div id="Prix_Note">
   <p>
       <span class="sous-titre">Prix :</span><br />
       <input type="checkbox" name="-1000" id="-1000" tabindex="110" /> <label for="-1000">-1 000 ¤</label><br />
       <input type="checkbox" name="1000_a_1200" id="1000_a_1200" tabindex="120" /> <label for="1000_a_1200">1 000 ¤ à 1 200 ¤</label><br />
       <input type="checkbox" name="1200_a_1500" id="1200_a_1500" tabindex="130" /> <label for="1200_a_1500">1 200 ¤ à 1 500 ¤</label><br />
       <input type="checkbox" name="1500_a_1700" id="1500_a_1700" tabindex="140" /> <label for="1500_a_1700">1 500 ¤ à 1 700 ¤</label><br />
       <input type="checkbox" name="+1700" id="+1700" tabindex="150" /> <label for="+1700">+1 700 ¤</label><br />
   </p>
   <p>
       <span class="sous-titre">Note :</span><br />
       <input type="checkbox" name="1" id="1" tabindex="160" /> <label for="1">1</label><br />
       <input type="checkbox" name="2" id="2" tabindex="170" /> <label for="2">2</label><br />
       <input type="checkbox" name="3" id="3" tabindex="180" /> <label for="3">3</label><br />
       <input type="checkbox" name="4" id="4" tabindex="190" /> <label for="4">4</label><br />
       <input type="checkbox" name="5" id="5" tabindex="200" /> <label for="5">5</label><br />
   </p></div>
   <div id="Couleur_Kilometrage">
   <p>
       <span class="sous-titre">Couleur :</span><br />
       <input type="checkbox" name="noir" id="noir" tabindex="210" /> <label for="noir">Noir</label><br />
       <input type="checkbox" name="rouge" id="rouge" tabindex="220" /> <label for="rouge">Rouge</label><br />
       <input type="checkbox" name="bleu" id="bleu" tabindex="230" /> <label for="bleu">Bleu</label><br />
       <input type="checkbox" name="blanc" id="blanc" tabindex="240" /> <label for="blanc">Blanc</label><br />
       <input type="checkbox" name="vert" id="vert" tabindex="250" /> <label for="vert">Vert</label><br />
       <input type="checkbox" name="orange" id="orange" tabindex="260" /> <label for="orange">Orange</label><br />
   </p>
   <p>
       <span class="sous-titre">Kilométrage :</span><br />
       <input type="checkbox" name="0_a_1000" id="0_a_1000" tabindex="270" /> <label for="0_a_1000">0 à 1 000 KM</label><br />
       <input type="checkbox" name="1000_a_10000" id="1000_a_10000" tabindex="280" /> <label for="1000_a_10000">1 000 à 10 000 KM</label><br />
       <input type="checkbox" name="10000_a_15000" id="10000_a_15000" tabindex="290" /> <label for="10000_a_15000">10 000 à 15 000 KM</label><br />
       <input type="checkbox" name="15000_a_20000" id="15000_a_20000" tabindex="300" /> <label for="15000_a_20000">15 000 à 20 000 KM</label><br />
   </p></div>
   <div id="Distance_Frais">
   <p>
       <span class="sous-titre">Distance :</span><br />
       <input type="checkbox" name="-50" id="-50" tabindex="310" /> <label for="-50">-50 KM</label><br />
       <input type="checkbox" name="50_a_60" id="50_a_60" tabindex="320" /> <label for="50_a_60">50 KM à 60 KM</label><br />
       <input type="checkbox" name="60_a_75" id="60_a_75" tabindex="330" /> <label for="60_a_75">60 KM à 75 KM</label><br />
       <input type="checkbox" name="75_à_100" id="75_à_100" tabindex="340" /> <label for="75_à_100">75 KM à 100 KM</label><br />
       <input type="checkbox" name="+100" id="+100" tabindex="350" /> <label for="+100">+100 KM</label><br />
   </p>
   <p>
       <span class="sous-titre">Frais Supplementaires :</span><br />
       <input type="checkbox" name="0" id="0" tabindex="360" /> <label for="0">0</label><br />
       <input type="checkbox" name="1" id="1" tabindex="370" /> <label for="1">1</label><br />
       <input type="checkbox" name="2" id="2" tabindex="380" /> <label for="2">2</label><br />
       <input type="checkbox" name="3" id="3" tabindex="390" /> <label for="3">3</label><br />
   </p></div>
   <div id="boutons">
   <p>
       <input type="submit" value="Chercher" /> <input type="reset" />
   </p>
   </div>
</form>
<div id="resultat">

<!-- ICI LE CODE PHP -->

</div>

</body>
</html>


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 :

Code PHP :
<?php
if ($_POST['beta'] == "on") // Debut
{
    try
{
	$bdd = new PDO('mysql:host=localhost;dbname=motos', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM liste WHERE marque=\'beta\'');

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Marque</strong> : <?php echo $donnees['marque']; ?><br />
    <strong>Couleur</strong> : <?php echo $donnees['couleur']; ?><br />
    <strong>Kilométrage</strong> : <?php echo $donnees['kilometrage']; ?><br />
    <strong>Année</strong> : <?php echo $donnees['annee']; ?><br />
    <strong>Distance</strong> : <?php echo $donnees['lieux']; ?><br />
    <strong>Note</strong> : <?php echo $donnees['note']; ?><br />
    <strong>Frais supplémentaires</strong> : <?php echo $donnees['fraissup']; ?><br />
    <strong>Prix</strong> : <?php echo $donnees['prix']; ?><br />
   </p>
<?php
}

$reponse->closeCursor();
} // Fin

elseif ($_POST['derbi'] == "on") // Debut
{
    try
{
	$bdd = new PDO('mysql:host=localhost;dbname=motos', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM liste WHERE marque=\'derbi\'');

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Marque</strong> : <?php echo $donnees['marque']; ?><br />
    <strong>Couleur</strong> : <?php echo $donnees['couleur']; ?><br />
    <strong>Kilométrage</strong> : <?php echo $donnees['kilometrage']; ?><br />
    <strong>Année</strong> : <?php echo $donnees['annee']; ?><br />
    <strong>Distance</strong> : <?php echo $donnees['lieux']; ?><br />
    <strong>Note</strong> : <?php echo $donnees['note']; ?><br />
    <strong>Frais supplémentaires</strong> : <?php echo $donnees['fraissup']; ?><br />
    <strong>Prix</strong> : <?php echo $donnees['prix']; ?><br />
   </p>
<?php
}

$reponse->closeCursor();
} // Fin

elseif ($_POST['yamaha'] == "on") // Debut
{
    try
{
	$bdd = new PDO('mysql:host=localhost;dbname=motos', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM liste WHERE marque=\'yamaha\'');

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Marque</strong> : <?php echo $donnees['marque']; ?><br />
    <strong>Couleur</strong> : <?php echo $donnees['couleur']; ?><br />
    <strong>Kilométrage</strong> : <?php echo $donnees['kilometrage']; ?><br />
    <strong>Année</strong> : <?php echo $donnees['annee']; ?><br />
    <strong>Distance</strong> : <?php echo $donnees['lieux']; ?><br />
    <strong>Note</strong> : <?php echo $donnees['note']; ?><br />
    <strong>Frais supplémentaires</strong> : <?php echo $donnees['fraissup']; ?><br />
    <strong>Prix</strong> : <?php echo $donnees['prix']; ?><br />
   </p>
<?php
}

$reponse->closeCursor();
} // Fin

elseif ($_POST['2003'] == "on") // Debut
{
    try
{
	$bdd = new PDO('mysql:host=localhost;dbname=motos', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM liste WHERE annee=\'2003\'');

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Marque</strong> : <?php echo $donnees['marque']; ?><br />
    <strong>Couleur</strong> : <?php echo $donnees['couleur']; ?><br />
    <strong>Kilométrage</strong> : <?php echo $donnees['kilometrage']; ?><br />
    <strong>Année</strong> : <?php echo $donnees['annee']; ?><br />
    <strong>Distance</strong> : <?php echo $donnees['lieux']; ?><br />
    <strong>Note</strong> : <?php echo $donnees['note']; ?><br />
    <strong>Frais supplémentaires</strong> : <?php echo $donnees['fraissup']; ?><br />
    <strong>Prix</strong> : <?php echo $donnees['prix']; ?><br />
   </p>
<?php
}

$reponse->closeCursor();
} // Fin

elseif ($_POST['2004'] == "on") // Debut
{
    try
{
	$bdd = new PDO('mysql:host=localhost;dbname=motos', 'root', 'root');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$reponse = $bdd->query('SELECT * FROM liste WHERE annee=\'2004\'');

while ($donnees = $reponse->fetch())
{
?>
    <p>
    <strong>Marque</strong> : <?php echo $donnees['marque']; ?><br />
    <strong>Couleur</strong> : <?php echo $donnees['couleur']; ?><br />
    <strong>Kilométrage</strong> : <?php echo $donnees['kilometrage']; ?><br />
    <strong>Année</strong> : <?php echo $donnees['annee']; ?><br />
    <strong>Distance</strong> : <?php echo $donnees['lieux']; ?><br />
    <strong>Note</strong> : <?php echo $donnees['note']; ?><br />
    <strong>Frais supplémentaires</strong> : <?php echo $donnees['fraissup']; ?><br />
    <strong>Prix</strong> : <?php echo $donnees['prix']; ?><br />
   </p>
<?php
}

$reponse->closeCursor();
} // Fin

else
{
    echo "Désolé mais aucunes moto ne correspondent à vos criteres";
}
?>


Merci d'avance à ceux qui voudront bien m'aider à rendre mon formulaire utilisable...
dimanche 5 septembre 2010 à 00:04:39 | Re : Formulaire multi-critères

omarino_007

Bonjour kryow,
-Quand tu fais une checkbox, n'oubli pas de mettre value="valeur_que_tu_veux"

Exemple :
Code HTML :
<td><input type="checkbox" value="ma_valeur" name="selection[]"/></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 :
Code PHP :
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 :

Code PHP :
$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


Cette discussion est classée dans : bdd, marque, reponse, km, derbi


Répondre à ce message

Sujets en rapport avec ce message

Comment vérifier un lien ? [ par MaTHieU ] Salut, Je voudrais savoir comment vérifier un lien... Par exemple : http://www.monsite.fr/fichier.zip Si le fichier est présent ça marque "OK" Si le l MySQL [ par intello2001 ] j'ai fait une base MySQL toute neuve, toute VIDE !!je voudrai avoir des exemple de création de table et tt sa...je c juste sa :$host="sql.free.fr";$ba 2 COMBOS BOX LIÉES À UNE BDD AVEC DÉPENDANCE [ par nash ] Le probléme est que je n'arrive pas à faire un formulaire avec 2 combos box dont la 2ème est initialisée selon la sélection effectuée dans la première envoyer une donnée a la bdd au dechargement de la page [ par Urukai1 ] Salut za tousje cherche le moyen de comptabiliser de temps de connexion sur une page et de l'envoyer a ma bdd pour cela au chargement je sais envoyer alimentation BDD [ par angelique ] Bonjour,J'ai créé des formulaires php pour alimenter ma BDD MySQL.Est il possible de l'alimenter avec un lecteur optique à partir de questionnaire?Et MAJ dans formulaire [ par bertrand85 ] Bonjour,j'ai une BDD (modifier par programme externe) et un formulaire, je voudrais que quand les infos de la BDD sont modifiés alors les données du f BDD et les image / lien [ par kodiask ] bjr je voudrai savoir coment on peu faire pr envoyer ds la BBD un lien sui sera clikable lorsqu'il sera afficher ds la page.ou pour faire qu'une im Fonction de mail dans BDD [ par zeuking ] Bonjour,imaginon, j'ai 1 BDD avec 89 tables dedans.1 table correspond a 1 membres ... Comment faire pour que chaque membres de la BDD puisse envoyer u Mettre un log et psw sur bdd mysql ??? [ par nova85 ] Comment met ton un login et un mot de passe sur une base mysql avec phpmyadmin ?nova Php & MySql ??? [ par nova85 ] Je voudrai savoir si il est possible de realiser un site assez important juste avec une BDD mysql , si c'est capable de resister , et surtout savoir s


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales