Recherche par formulaire en "couplant" plusieurs champ

caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010 - 1 mai 2009 à 17:39
caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010 - 2 mai 2009 à 11:31
Bonjour à tous,
J'ai un gros soucis pour pouvoir coder, j'ai beau chercher partout pas moyen d'obtenir une réponse

J'explique mon cas..

J'ai un formulaire que le visteur dois remplir pour effectuer une
recherche dans ma bdd...jusque là pas trop compliquer me direz-vous !

Là où ça coince c'est que les réponses retournées par ma bdd doivent tenir compte de tout les champ rempli...j'explique

Par exemple j'ai dans ma bdd les champs suivant:

prénom nom ville hobby date naissance mail

dans mon formulaire j'ai trois champs à remplir:

prénom ville hobby

Donc si l'utilisateur rempli sophie paris tennis

ma bdd dois lui répondre:

sophie dumoulin paris tennis 24/05/1978 dumoulin.s@....

sophie dufour paris tennis 12/02/1975 sophie.dufour@...

sophie dupré paris tennis 06/03/1974 dupré.sophie@...

et ainsi de suite...

Donc mon problème c'est de savoir comment obliger ma bdd à tenir
compte de tout les champs rempli pour rechercher ceux qui entrent dans
les conditions.

Pour lui dire d'afficher tout ceux qui entre dans 1 condition, pas
de soucis, je fait mon codage sans problème avec ma boucle et op
l'affaire est dans le sac mais lorsqu'il sagit de tenir compte de
plusieurs conditions alors là je sèche...

Ca fait 3 jours que je cale là dessus

voici mon code de base qui ne reprend pas l'exemple donné (l'exemple est simpliste pour comprendre ma question)

<?php

if (isset($_POST['recherche_cp'])){

mysql_connect("localhost","root","mysql" );

mysql_select_db ("belgitopia" );

$cpo_q = $_POST['recherche_cp'];

$cpo_sql ="SELECT * FROM recherche WHERE cp LIKE '%$cpo_q%'";

$cpo_req=mysql_query($cpo_sql) or die(mysql_error());

mysql_close();

while($cpo=mysql_fetch_array($cpo_req)){

?>

<hr id="recherche_haut_hr" style="color: #f7b309;">

<center>" width="500px"></center>

<?php
echo $cpo['type_activite']; ?>
, </td>

<?php echo $cpo['nom']; ?>
, </td><?php echo $cpo['lien_site']; ?>,

----
<?php echo $cpo['descriptions'];
?>, ,

<?php echo $cpo['tel'];
?>
<?php echo $cpo['fax']; ?>
<?php
echo $cpo['horaires']; ?>,

, <?php echo $cpo['adresse']; ?>
<?php
echo $cpo['cp']; ?>
<?php echo $cpo['commune'];
?>
<?php echo $cpo['mail']; ?>
<?php
//echo $cpo['plan_acces']; ?>


<?php

}

}

?>

6 réponses

caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010
1 mai 2009 à 18:15
Ben voilà j'ai trouver finalement...donc je file l'info pour ceux qui cherchent aussi :-)

<?php
if (isset($_POST['nom'])){
if (isset($_POST['commune'])){
if (isset($_POST['cp'])){
if (isset($_POST['type'])){
mysql_connect("localhost","root","mysql"); 
mysql_select_db ("belgitopia"); 
 
$avance_nom = $_POST['nom'];
$avance_commune = $_POST['commune'];
$avance_cp = $_POST['cp'];
$avance_type = $_POST['type'];
$avance_sql ="SELECT * FROM recherche WHERE nom LIKE '%$avance_nom%' AND commune LIKE '%$avance_commune%' AND cp LIKE '%$avance_cp%' AND type_activite LIKE '%$avance_type%'"; 
 $avance_req=mysql_query($avance_sql) or die(mysql_error()); 
 mysql_close(); 
 while($avance=mysql_fetch_array($avance_req)){ 
 ?>
 <hr id="recherche_haut_hr" style="color: #f7b309;">
 <center>" width="500px"></center>
 
  ----
<?php echo $avance['type_activite']; ?>
, </td><?php echo $avance['nom']; ?>

 , </td><?php echo $avance['lien_site']; ?>,
 ----
<?php echo $avance['descriptions']; ?>, ,
 <?php echo $avance['tel']; ?>
<?php echo $avance['fax']; ?>
<?php echo $avance['horaires']; ?>,
 , <?php echo $avance['adresse']; ?>
<?php echo $avance['cp']; ?>
<?php echo $avance['commune']; ?>

 <?php echo $avance['mail']; ?>

 <?php //echo $avance['plan_acces'];?>,
 
 

 <?php
 }
}
}
}
}
 
 ?>
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
1 mai 2009 à 21:09
je ne te conseille pas d'utiliser LIKE '%%' si tu veux un résultat juste. LIKE '%%' va rechercher toute les réponse comptenant ta recherche : exemple avec le prénom jean , il va aussi te trouver jean-claude, utiliser plutot tout simplement. champ $var plutôt que champ LIKE '%$var%'

L0rD...
0
caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010
1 mai 2009 à 22:48
Slt Xactise,

Effectivement c'est bien vu...je ne l'avait pas tester sous cet effet et n'avais donc pas remarquer ce problème.

Donc j'ai testé en remplaçant comme tu me le conseils....et là il me dit  "erreur de sintaxe"
-je l'ecrit sans ' ' il me met erreur de sintaxe
$avance_sql ="SELECT * FROM recherche WHERE nom=$avance_nom AND commune=$avance_commune AND cp=$avance_cp AND type_activite =$avance_type"; 

-j'ai essayé avec les ' ' et là il ne met pas d'erreur mais il ne trouve plus rien.
$avance_sql ="SELECT * FROM recherche WHERE nom='$avance_nom' AND commune='$avance_commune' AND cp='$avance_cp' AND type_activite='$avance_type'"; 

La seule solution que je trouve actuellement  (qui reste intermédiaire) c'est d'obliger à entrer un nombre minimum de lettre pour minimiser le problème.

Si tu vois ce qui pourrait poser problème, où ce qui ferais que j'aurais eventuellement mal compris ton instruction....n'hesites pas, et encore merci pour cet éclarage.
0
xactise Messages postés 507 Date d'inscription mardi 18 février 2003 Statut Membre Dernière intervention 22 juin 2012 2
2 mai 2009 à 06:37
$avance_sql ="SELECT * FROM recherche WHERE nom='".$avance_nom."' AND
commune='".$avance_commune."' AND cp='".$avance_cp."' AND
type_activite='".$avance_type."'";

remplace ta requete par sa.

L0rD...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010
2 mai 2009 à 11:25
Tu vas me trouver chiante lol mais j'ai tester ce code et je n'ai pas d'erreur mais cela ne fonctionne pas, il ne trouve plus rien.
0
caliche Messages postés 30 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 10 avril 2010
2 mai 2009 à 11:31
Mais finalement c'est pas grave, parce que si je change le code pour qu'il ne trouve que ce qui à été taper, il réduit les réponses...et généralement dans ce type de recherche   (en tout cas dans mon cas de site) les gens vont certainement entrer quelques lettres et attendrent les réponses pour choisir ou peuvent faire des fautes de frappe ou d'orthographe et du coups n'auront pas de reponse à leur recherche...

Donc je pense que je vais plutôt adapter le codage pour obliger à entrer un nombre minimum de lettre pour quand même eviter que si l'utilisateur tape seulement  "e" ils reçoivent en réponse pratiquement la totalité de ma bdd lol.

Mais en tout cas un grand merci pour ton aide et du suivit que tu m'as accordé :-)
0
Rejoignez-nous