Effectuer une recherche

Signaler
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010
-
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015
-
slt ;
je suis une debutante en php j'ai besoin de creer un site immobilier je veux effectuer une recherche interne par ville et type de bien et type de transaction pour afficher les annonces correspondantes a la recherche mais je sais pas commet faire svp si qlq 1 peut m'aider.

merci d'avence

26 réponses

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

salut
tous dependra de la structure des tes differentes tables
Mais sans un bout de code ou au moins la structure de tes tables mysql pour que l'on puisse t'apporter de l'aide alors si tu en dispose tu pourra les poster ensuite on verra
CORDIALEMENT
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

Merci pour votre aide :).

j'ai une base de données de 4 table : client(cin,login,pasword,nom,...)annonce(num_annonce,type de bien,type de transaction,cin..)pays(num_pays,nom)ville(num_ville,nom,num_pays).
et voici le code html correspandant :

<html>
<title></title>
<head>
<form action="" method="post" >
type transaction:,
<select name="type_transaction" size="1"
id="ctl_type_transaction" class="TEXTE_SMALL" style="width: 150px;">
<option value="0">-------------------</option>
<option value="1">Achat</option>
<option value="2">Location</option>
<option value="4">Location saisonnière</option>
</select>,

----

Type de bien :,
<select name="type_de_bien" class="TEXTE_SMALL"
id="type_de_bien" style="width: 150px;">
<option value="">-------------------</option>
<option value="1">Maison-Villa</option>
<option value="2">Appartement</option>
<option value="16">Riad</option>
<option value="5">Commerce</option>
<option value="6">Local commercial</option>
<option value="20">Local industriel</option>
<option value="9">Terrain</option>
<option value="10">Bureau</option>
<option value="11">Immeuble</option>
<option value="12">Domaine forestier</option>
<option value="13">Domaine agricole</option>
</select>,

----

Ville :,
<select name="ville" size="1" id="ville" class="TEXTE_SMALL"
onchange="ville_change()" style="width: 150px;">
<option value="">-------------------</option>
<option value="Meknes">meknes</option>
<option value="fes">fes</option>
<option value="tetouan">casablanca</option>
<option value="casablanca">Tetouan</option>
<option value="rabatt">tanger</option>
<option value="autres">autres</option>
</select>

<center> </center>
</form>
</head>
</html>

Merci d'avance
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

donc juste en dessous tu mets
<?php
if( isset($_POST['Submit']) ){
$type_transac = isset($_POST['type_transaction'])?$_POST['type_transaction']:'';
$type_bien = isset($_POST['type_de_bien'])?$_POST['type_de_bien']:'';
$ville = isset($_POST['ville'])?$_POST['ville']:'';

$sql = "SELECT * FROM annonce" ;
//construction du where l'utilisateur peut seulement avoir choisie de recherche suivant
//le type de transaction ou type de bien ect.. dans ce cas les champs qu'il a omis serons vide
$prec = 0;//cette variable va dire si on'est a la premiere condition ou non
$where = "";
if(!empty($type_transac)) {
   $where.= "type_transaction='$type_transac'";
   $prec = 1;//signale que il y'a une condition appliquer donc sa va dire
   //On doit Mettre AND
}
if( !empty($type_bien) ) {
     if( $prec==0) {
     $where.=" type_de_bien='$type_bien'";
 $prec=1;
 } else {
     $where.= " AND type_de_bien='$type_bien'";
     $prec.=1;
 }
}
if( !empty($ville) ) {
     if( $prec==0) {
     $where.=" ville='$ville'";
 $prec=1;
 } else {
     $where.= " AND ville='$ville'";
     $prec.=1;
 }
}
$sql .= !empty($where)?" WHERE ".$where:'';
echo "
".$sql."
";
}
?>
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

le echo de la fin je l'ai fait juste pour voir si la requete est bien construit il te reste plus q'a l'executer et afficher le resultat
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

bonjour je vs remercie infiniment pour votre aide mais j'ai met le code et qd je clique sur le bouton rechercher c seulement les requête qui s'affiche comme elle est écrite ds le code (select * from annonce) si je ne choisi rien .et (SELECT * FROM annonce WHERE type_transaction='2' AND type_de_bien='10' AND ville='fes) si je rempli les champ de recherche.

merci bien encore.
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

le echo de la fin je l'ai fait juste pour voir si la requete est bien construit il te reste plus q'a l'executer et afficher le resultat

salut
c'est normal j'avait pas mis de mysql_query($sql) j'avais supposer que tu l'a remarquer mais bon voila
tu efface le echo et tu met:
mysql_query($sql) or die(mysql_error());
while( $row = mysql_fetch_assoc($query) ) {
echo $row['num_annonce'];
}

bon maintenant a toi de jouer
CORDIALEMENT
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

j'ai met le code mais tjrs rien cette fois sa affiche un msg d'erreur(Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\immobb\index.php on line 184) et ds la ligne 184 il ya ' while( $row =mysql_fetch_assoc($sql) ) {


Merci encore:)
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

t'a bien mis le mysql_query($sql) or die(mysql_error());
parce que l'erreur que tu signale c'est du a la syntaxe de la requete elle a mal fonctioner et le die(mysql_error()) est la pour arrter l'execution du script sinon remet le echo $sql; et poste le pour voir
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

oui j'ai bien fait tt le code ke tu m'a demander de faire mais la même erreur apparu.
en tt cas merci bcp pour votre aide c'était vrmt gentil .Merci encore :)
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

il y'a pas de koi !
qu'est ce que le echo donne et aussi regarde ici
SELECT * FROM annonce WHERE type_transaction='2' AND type_de_bien='10' AND ville='fes'
est ce que les champs type_transaction et type_de_bien existe bien dans ta table et verfie aussi ton mysql_connect() et ajoute y or die(mysql_error()) pour voir
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

slt j'espere ke vous aller bien j'ai encore besoin de votre aide.

le code lors de l'execution me donne tjrs erreur au nive de " while($row = (mysql_fetch_assoc($sql))
que doit je faire stp!!
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

je vais bien merci
reposte le code en entier pour voir
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

ok voici le code:


<form action="" method="post" name="recherche" style="display: inline;" onSubmit="return check_form_recherche(this)">
type transaction:,
<select name="type_transaction" size="1" id="ctl_type_transaction" class="TEXTE_SMALL" style="width: 150px;">
<option value="0">-------------------</option>
<option value="1">Achat</option>
<option value="2">Location</option>
<option value="4">Location saisonnière</option>
<option value="8">Viager</option>
</select>,

----

Type de bien :,
<select name="type_de_bien" class="TEXTE_SMALL" id="type_de_bien" style="width: 150px;">
<option value="">-------------------</option>
<option value="1">Maison-Villa</option>
<option value="2">Appartement</option>
<option value="3">Programme neuf</option>
<option value="16">Riad</option>
<option value="4">Prestige</option>
<option value="5">Commerce</option>
<option value="6">Local commercial</option>
<option value="20">Local industriel</option>
<option value="7">Loft/Atelier</option>
<option value="8">Parking</option>
<option value="9">Terrain</option>
<option value="10">Bureau</option>
<option value="11">Immeuble</option>
<option value="12">Domaine forestier</option>
<option value="13">Domaine agricole</option>
<option value="14">Chambre d'hote</option>
<option value="15">Mobile-home</option>
</select>,

----

Ville :,
<select name="ville" size="1" id="ville" class="TEXTE_SMALL" onChange="ville_change()" style="width: 150px;">
<option value="">-------------------</option>
<option value="Meknes">meknes</option>
<option value="fes">fes</option>
<option value="tetouan">casablanca</option>
<option value="casablanca">Tetouan</option>
<option value="rabatt">tanger</option>
<option value="autres">autres</option>
</select>

<center> </center>
</form>





<?php
$connexion=mysql_connect("localhost","root","");
$base=mysql_select_db("immob");
mysql_select_db($base,$connexion);

if( isset($_POST['Submit']) ){
$type_transac = isset($_POST['type_transaction'])?$_POST['type_transaction']:'';
$type_bien = isset($_POST['type_de_bien'])?$_POST['type_de_bien']:'';
$ville = isset($_POST['ville'])?$_POST['ville']:'';

$sql = "SELECT * FROM annonce" ;
//construction du where l'utilisateur peut seulement avoir choisie de recherche suivant
//le type de transaction ou type de bien ect.. dans ce cas les champs qu'il a omis serons vide
$prec = 0;//cette variable va dire si on'est a la premiere condition ou non
$where = "";
if(!empty($type_transac)) {
$where.= "type_transaction='$type_transac'";
$prec = 1;//signale que il y'a une condition appliquer donc sa va dire
//On doit Mettre AND
}
if( !empty($type_bien) ) {
if( $prec==0) {
$where.=" type_de_bien='$type_bien'";
$prec=1;
} else {
$where.= " AND type_de_bien='$type_bien'";
$prec.=1;
}
}
if( !empty($ville) ) {
if( $prec==0) {
$where.=" ville='$ville'";
$prec=1;
} else {
$where.= " AND ville='$ville'";
$prec.=1;
}
}
$sql .= !empty($where)?" WHERE ".$where:'';

mysql_query($sql) or die(mysql_error());
while( $row = mysql_fetch_assoc($query) ) {
echo $row['id_annonce'];
}
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

l'erreur venait que $query été vide donc pour corriger cela remplace cette ligne
mysql_query($sql) or die(mysql_error());
par
$query = mysql_query($sql) or die(mysql_error());
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

oui manant pour select * from annonce sa marche tres bien :). mais pour l'autre requete il n'affiche rien
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

quel autre requete?
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

quand je fait aucune selection c a d pour afficher tte les annonce sa marche il les affiche tte.mais qd je cherche par exemple type_transaction=location type_de_bien=riad ville=fes il n'affiche rien
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

s'il n'affiche rien ce qu'il n'a pas trouver est ce que la recherche que tu vien de poster correspond a une annonce qui existe bien dans ta base
Messages postés
16
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
4 juin 2010

oui j'ai bien choisi une annonce existant deja ds la base mais tjrs il n'affiche rien.
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

bon voila ce que j'ai remarquer
<option value="16">Riad</option> 

dans ta recherche precedente type_de_bien=riad mais ici le script ne recoit pas riad mais recoit 16 donc il ne vas pas trouver ce que tu recheche si dans ta base tu met riad au lieu de 16 j'espere que tu a compris ce que je veu dire