Recherche par formulaire en "couplant" plusieurs champ
caliche
Messages postés30Date d'inscriptionmardi 26 mai 2009StatutMembreDernière intervention10 avril 2010
-
1 mai 2009 à 17:39
caliche
Messages postés30Date d'inscriptionmardi 26 mai 2009StatutMembreDernière intervention10 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());
caliche
Messages postés30Date d'inscriptionmardi 26 mai 2009StatutMembreDernière intervention10 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>
xactise
Messages postés507Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention22 juin 20122 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%'
caliche
Messages postés30Date d'inscriptionmardi 26 mai 2009StatutMembreDernière intervention10 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.
xactise
Messages postés507Date d'inscriptionmardi 18 février 2003StatutMembreDernière intervention22 juin 20122 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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
caliche
Messages postés30Date d'inscriptionmardi 26 mai 2009StatutMembreDernière intervention10 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é :-)