Recherche à partir d'un input text et de 7 listes déroulantes
cs_ines57
Messages postés15Date d'inscriptionlundi 14 janvier 2008StatutMembreDernière intervention 9 juin 2009
-
5 mai 2009 à 10:42
alexflex25
Messages postés106Date d'inscriptionvendredi 29 septembre 2006StatutMembreDernière intervention 6 mars 2012
-
5 mai 2009 à 11:09
Bonjour,
Étant entrain de développer un portail immobilier, je programme une partie recherche se basant sur 8 critères. Il n'est pas obligatoire de les renseigner tous, mais au moins un. Pour l'instant, seule la recherche par mot-clé fonctionne. J'essaye de faire fonctionner celle avec la première liste déroulante, mais je n'y parviens pas. En effet, comment faire en sorte que la boucle affiche les résultats de la recherche par mot-clé ET des listes déroulantes?
Voici mon code pour le moment :
/* Récupération des mots clé dans le input text */
$mot= $_POST['mot'];
/* Recherche de ce mot clé dans la table annonce (champ description) */
$reponse = mysql_query("SELECT ann_no_annonce, ann_titre, ann_prix, ann_description FROM annonce WHERE ann_description LIKE '%$mot%'") or die(mysql_error());
while ($donnees=mysql_fetch_array($reponse) )
{
?>
Annonce n° <?php echo $donnees['ann_no_annonce']; ?>
Prix : <?php echo $donnees['ann_prix']; ?> €
&nbsp;
<?php echo $donnees['ann_titre']; ?>
&nbsp;
<?php echo $donnees['ann_description']; ?>
<?php
}
/* Récupération des contenus des listes déroulantes */
$listetype= $_POST['listetype'];
$reponse2 mysql_query("SELECT ann_no_annonce, ann_prix, ann_titre, ann_description, typ_no_type, typ_nom_type, app_no_type FROM type, annonce, appartient WHERE typ_no_type app_no_type AND typ_no_type= '".$_POST['listetype']."'") or die (mysql_error());
alexflex25
Messages postés106Date d'inscriptionvendredi 29 septembre 2006StatutMembreDernière intervention 6 mars 2012 5 mai 2009 à 11:09
Je vois 2 solutions:
Premièrement,
tu fais une requête du type :
SELECT * FROM annonce;
Tu stock le résultat dans un tableau:
$annonces = array();
while ($donnees=mysql_fetch_array($reponse) ){
$annonces[$i] = $donnees;
$i++;
}
Ensuite au niveau de l'affichage du résultat, tu prends les valeurs de tes listes déroulantes et de ton champ "mot clé" et tu test chaque ligne.
Comme cela par exemple:
foreach($annonces as $annonce){
if( ( empty($champ_select1) || ereg($champ_select1,$annonce["critere1"]) )
&&( empty($champ_select2) || ereg($champ_select2,$annonce["critere2"]) )
&& ...){
affichage de la ligne
}
Deuxièmement,
Tu construis ta requête SQL en fonction des champ renseigné par l'utilisateur
exemple:
critere 5 = "france"
motclé = "pepe"
$requete = "SELECT ann_no_annonce, ann_titre, ann_prix, ann_description FROM annonce WHERE ";
if( !empty($critere1)) $requete .= "champ_a_tester1" like '%'.$critere1.'%' and ";
if( !empty($critere2)) $requete .= "champ_a_tester2" like '%'.$critere2.'%' and ";
if( !empty($critere3)) $requete .= "champ_a_tester3" like '%'.$critere3.'%' and ";
if( !empty($critere4)) $requete .= "champ_a_tester4" like '%'.$critere4.'%' and ";
if( !empty($critere5)) $requete .= "champ_a_tester5" like '%'.$critere5.'%' and ";
if( !empty($critere6)) ...
if( !empty($motcle)) $requete .= "ann_description LIKE '%$motcle%' and ";
//ensuite tu termine ta requete correctement en retirant le dernier "and";
$requete = substr($requete,0,-4);
//Ensuite execution de la requete + affichage de tous les resultats
Voila.
Apres la meilleur méthode depend de ta table "annonce"
je pense que s'il y a plus de 1000 enregistrements la méthode 2 est quand meme mieu