Recherche à partir d'un input text et de 7 listes déroulantes

cs_ines57 Messages postés 15 Date d'inscription lundi 14 janvier 2008 Statut Membre Dernière intervention 9 juin 2009 - 5 mai 2009 à 10:42
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Derniè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']; ?> €

 &amp;nbsp;
<?php echo $donnees['ann_titre']; ?> 
 
 &amp;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());



Merci pour votre aide :)

1 réponse

alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Derniè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
0
Rejoignez-nous