Module recherche

Résolu/Fermé
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009 - 30 juil. 2009 à 13:56
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009 - 17 août 2009 à 15:31
Bonjour à tous,
Je viens parmis vous car je rencontre quelque petit problème.
Alors je dois faire un module de recherche en php/mysql, c'est à dire un formulaire qui selon les champs remplis me renverras les données souhaitée.
Pour l'instant je me demande si ej suis sur la bonne voie , En effet pour avoir les résultats je ne vois qu'une solution, faire des if de partout, Cela fonctionnera mais je ne trouve pas sa très propre.Quelqu'un pourrait m'aider
Merci

12 réponses

M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
30 juil. 2009 à 14:01
Bonjour,

Je n'arrive pas à bien cerner ton module de recherche.

Que doit-il chercher???
Ce que je veux dire, c'est doit-il chercher des mots dans des pages web de ton site, ou bien chercher des données dans une base de données?
De quoi serait constitué ton formulaire?
0
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009
30 juil. 2009 à 14:05
Exacte désolé j'ai oublier de préciser vraiment désolé
Alors ce formulaire doit rechercher des infos dans une base de données, c'est un module de recherche de contact .Et pour l'instant je commence a avoir enormement de if ^^.Donc je dois etre sur al mauvaise route.

<form method="get" action="resrecherche.php">
Sexe (Obligatoire):
<INPUT type="checkbox" name="Sexe[]" value="Homme"> Homme
<INPUT type="checkbox" name="Sexe[]" value="Femme"> Femme<br><br>
Origine (Obligatoire): <br><br>
<div class="taborigine">
<INPUT type="checkbox" name="origines[]" value="toto"> 1
<INPUT type="checkbox" name="origines[]" value="titi"> 2
<INPUT type="checkbox" name="origines[]" value="tutu"> 3<br><br>
<INPUT type="checkbox" name="origines[]" value="lolloo"> 4
</div>
<br><br>

Email <input type="text" name="email" /><br><br>
Tel <input type="text" name="tel" /><br><br>
Départements séparés par / (rien si toute la France)<input type="text" name="departement" /><br><br>
age entre <input type="text" name="agemin" /> et <input type="text" name="agemax" /><br><br>
Date entree <input type="text" name="DateEnt" /><br><br>
Date fraicheur<input type="text" name="DateFrai" /><br><br>

Client payant?? <br>
<INPUT type="checkbox" name="ClientPWap" value="ClientPWap"> Client Payant Wap
<INPUT type="checkbox" name="ClientPNet" value="ClientPTel"> Client Payant tel
<INPUT type="checkbox" name="ClientPWeb" value="ClientPWeb"> Client Payant Web<br><br>

Abonné a quelle news?? <br>
<INPUT type="checkbox" name="abonnenewent" value="abonnenewent"> abonné à notre newsletter
<INPUT type="checkbox" name="abonnenewpart" value="abonnenewpart"> abonné à la newsletter partenaire<br><br>

<input type="submit" value="valider">
</form>
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juil. 2009 à 14:16
je dois faire un module de recherche en php/mysql, c'est à dire un formulaire qui selon les champs remplis me renverras les données souhaitée.

oui tu es sur la bonne voie

mais si je comprend bien tu coinces au niveau de la recherche en fonction des champs remplis : un ou plusieurs ?

une piste:

tu nomme tes champ du formulaire avec des []

<input type="text" name="mot_recherche['mot1']" >mot1
<input type="text" name="mot_recherche['mot2']" >mot2
etc..

tu recupereras ainsi tes mots dans un array $_POST['mot_recherche']

et tu construit ta requette en parcourant l'array et en concatenant en tenant compte du premier pour mettre le AND ou pas
0
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009
30 juil. 2009 à 14:23
Merci pour cette réponse rapide.
Je coince sur le fait que certains champs ne soient pas obligatoire et donc si la personne ne la remplis pas , ma requete est donc changée.

Je ne sais aps si je peux faire ce que tu me dit soit je n'ai surment aps compris .Car par exemple pour le sexe ou l'origine ce sont des checkbox et je peux donc en cocher plusieurs et ces deux champs sont obligatoires.

Enfin je ne vois aps comment préparer mes requetes à l'avance.
Pour ton cas aurais tu un exemple s'il te plait.
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juil. 2009 à 14:27
tiens j'ai retrouvé un exemple un peu différent de ce que je t'avais dit mais ça revient au même
La requette est construit automatiquement en fonction des champs remplis ou cochés

<?php
//moteur de recherche multicriteres (5)
//ATTENTION les noms des select et les noms de champs de la BDD doivent etre IDENTIQUES
//definition des noms des champs
$nom_champ1="numero";
$nom_champ2="marque";
$nom_champ3="serie";
$nom_champ4="carburant";
$nom_champ5="couleur";

$choix=array();
//recup des champs postes et mise dans un array $choix
if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]!= -1){$choix[$nom_champ1]=$_POST[$nom_champ1];}
if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]!= -1){$choix[$nom_champ2]=$_POST[$nom_champ2];}
if(isset($_POST[$nom_champ3]) AND $_POST[$nom_champ3]!= -1){$choix[$nom_champ3]=$_POST[$nom_champ3];}
if(isset($_POST[$nom_champ4]) AND $_POST[$nom_champ4]!= -1){$choix[$nom_champ4]=$_POST[$nom_champ4];}
if(isset($_POST[$nom_champ5]) AND $_POST[$nom_champ5]!= -1){$choix[$nom_champ5]=$_POST[$nom_champ5];}

if(isset($_POST['rechercher'])){
	if(sizeof($choix) == 0){
		echo "<font color='red'>Vous devez choisir au moins un critere !</font>";
	}elseif(sizeof($choix) > 0){
	//construction de la requette
	$query="SELECT *FROM table";
	
		$nb=1;
		foreach($choix as $cle=>$value){
			if ($nb == 1){
				$query.=" WHERE ".$cle."='".$value."'";
			}else{
				$query.=" AND ".$cle."='".$value."'";
			}
			$nb ++;
		}
	}
}
?>
<h2>Moteur de recherche multicrit&egrave;res</h2>
<form name="form1" method="post" action="moteur_multicriteres.php">
Numero:<br>
<select name="<?php echo $nom_champ1; ?>">
<option value=-1 <?php if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]==-1) echo "selected"; ?>>---Choisissez --</option>
<option value=1 <?php if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]==1) echo "selected"; ?>>1</option>
<option value=2 <?php if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]==2) echo "selected"; ?>>2</option>
<option value=3 <?php if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]==3) echo "selected"; ?>>3</option>
<option value=4 <?php if(isset($_POST[$nom_champ1]) AND $_POST[$nom_champ1]==4) echo "selected"; ?>>4</option>
</select>
<br><br>
Marque:<br>
<select name="<?php echo $nom_champ2; ?>">
<option value=-1 <?php if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]==-1) echo "selected"; ?>>---Choisissez --</option>
<option value="Peugeot" <?php if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]=="Peugeot") echo "selected"; ?>>Peugeot</option>
<option value="Citroen" <?php if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]=="Citroen") echo "selected"; ?>>Citroen</option>
<option value="Renault" <?php if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]=="Renault") echo "selected"; ?>>Renault</option>
<option value="Toyota" <?php if(isset($_POST[$nom_champ2]) AND $_POST[$nom_champ2]=="Toyota") echo "selected"; ?>>Toyota</option>
</select>
<br><br>
Serie:<br>
<select name="<?php echo $nom_champ3; ?>">
<option value=-1 <?php if(isset($_POST[$nom_champ3]) AND $_POST[$nom_champ3]==-1) echo "selected"; ?>>---Choisissez --</option>
<option value="Prestige" <?php if(isset($_POST[$nom_champ3]) AND $_POST[$nom_champ3]=="Prestige") echo "selected"; ?>>Prestige</option>
<option value="Economique" <?php if(isset($_POST[$nom_champ3]) AND $_POST[$nom_champ3]=="Economique") echo "selected"; ?>>Economique</option>

</select>
<br><br>
Carburant:<br>
<select name="<?php echo $nom_champ4; ?>">
<option value=-1 <?php if(isset($_POST[$nom_champ4]) AND $_POST[$nom_champ4]==-1) echo "selected"; ?>>---Choisissez --</option>
<option value="SP95" <?php if(isset($_POST[$nom_champ4]) AND $_POST[$nom_champ4]=="SP95") echo "selected"; ?>>SP95</option>
<option value="SP98" <?php if(isset($_POST[$nom_champ4]) AND $_POST[$nom_champ4]=="SP98") echo "selected"; ?>>SP98</option>
<option value="Diesel" <?php if(isset($_POST[$nom_champ4]) AND $_POST[$nom_champ4]=="Diesel") echo "selected"; ?>>Diesel</option>
</select>
<br><br>
Couleur:<br>
<select name="<?php echo $nom_champ5; ?>">
<option value=-1 <?php if(isset($_POST[$nom_champ5]) AND $_POST[$nom_champ5]==-1) echo "selected"; ?>>---Choisissez --</option>
<option value="Bleu" <?php if(isset($_POST[$nom_champ5]) AND $_POST[$nom_champ5]=="Bleu") echo "selected"; ?>>Bleu</option>
<option value="Rouge" <?php if(isset($_POST[$nom_champ5]) AND $_POST[$nom_champ5]=="Rouge") echo "selected"; ?>>Rouge</option>
<option value="Vert" <?php if(isset($_POST[$nom_champ5]) AND $_POST[$nom_champ5]=="Vert") echo "selected"; ?>>Vert</option>
</select>
<br><br>
<input type="submit" name="rechercher" value="Recherche">
</form>
<br><br>
<?php
if(!empty($query)){
	echo "<font color='green'>La requette sera: <b>".$query."</b></font>";
}

?>
</html>
0
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
30 juil. 2009 à 14:27
Jolie façon de réfléchir que de se dire qu'on est sur la mauvaise route quand on fait trop de if! =)

Et ça marche.^^

Je suppose que tu récupérais les données de la table et que tu filtrais avec des if si j'ai bien compris.

Je suppose également que chaque option du formulaire correspond à un champ particulier dans une table.

Pour moi, la meilleure solution est donc de modifier la requête sql pour chaque option:
$request = "SELECT * FROM table WHERE 1 ";
IF ($_POST['email'] <> "") {$request .= " AND email = '" . $_POST['email'] . "' ";}
IF ($_POST['tel'] <> "") {$request .= " AND tel = '" . $_POST['tel'] . "' ";}
...

De cette manière le filtre sera fait en SQL, ça accélèrera ta recherche par rapport à un filtre par php.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juil. 2009 à 14:36
je n'ai jamais dit qu'il ne fallait pas de if du tout

il peut les supprimer en mettant les name sous forme ...[] ce qui remplira directement l'array

ceux que j'ai dans l'exemple servent à tester les champs postés

ce qui peut lui servir c'est la partie construction de la requette par une boucle
0
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009
30 juil. 2009 à 14:37
Merci alain j'ai compris la manière de procéder maintenant je dosi emttre tout cela en place dans ma tete , et ien réussir els relatiosn avec mes tables.

M@dien oui j'étais découragé car je commençais a avoir trop de if et je pensais tourner en rond ^^.
Oui je récupéris chaque données, les filtrais et
$how_manysex = count($Sexe);
for ($i=0; $i<$how_manysex; $i++)
{

Dans ce for j'avais encore un for et plus d'une dizaine de if ^^` je commençais a tourner en rond hihi.
Et oui tu avait encore raison chaque champs correspond a un champs dans ma Bdd avec par exemple pour les origines une tables de relation ....


Je vais essayer vos idées de sutie , mais je pourrais pas vous dire si cela fonctionne dans les minutes , il me faut du temps pour que je mette tout en place encore merci.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juil. 2009 à 15:17
j'avais pas vu le code de ton formulaire

pourquoi ne mets tu pas des boutons type="radio" pour Homme /Femme il s'exclueront eux même
pareil pour origines

ça te simplifiera ton code de verif si un seul coché

tu peux même en mettre un checked par defaut

et perso je préfère la method="post"
0
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009
30 juil. 2009 à 15:20
Le bouton radio m'empeche de faire plusieur choix.Car une personne peut avoir plusieurs origines et on peut chercher les hommes et femmes, soit juste l'un et l'autre.

Et j'ai mit get car ce module est développé en interne.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 juil. 2009 à 15:43
ha ok je croyait que c'était des renseignements sur la personne

GET ou POST n'a aucun rapport avec le developpement en interne, c'est seulement la methode d'envoi des données du formulaire vers le serveur

GET= rajoutée à l'url

POST = pas par l'url

une piste:
<?php
//avec method="post"
//verif en php si au moins un coché!
if(sizeof($_POST['Sexe'])<1){
	echo "Vous devez cocher au moins un des deux Homme/ Femme";
	exit;
}elseif(sizeof($_POST['origines'])<1){
	echo "Vous devez cocher au moins une des origines";
	exit;
}else{
	//construction de la requette
	$query="SELECT * FROM ta_table WHERE ";
	foreach($_POST['Sexe'] as $cle=>$value){
		if($cle==0){
			$query.="Sexe='".$value."'"; //premier coche
		}else{
			$query.=" OR Sexe='".$value."'"; //plusieurs coche
		}
	
	}
	$query.=" AND "; //ajout deuxieme condition champ origine
	foreach($_POST['origines'] as $cle=>$value){
		if($cle==0){
			$query.="origines='".$value."'"; //premier coche
		}else{
			$query.=" OR origines='".$value."'"; //plusieurs coche
		}
	
	}
	
	//ainsi de suite
	
}	
0
leototo75 Messages postés 14 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 17 août 2009
17 août 2009 à 15:31
Merci désolé pour le retard, j'avais une autre mission. Je susi revenus dernièrement sur le module de recherche et j'ai adhérer à la méthode d'Alain.
Merci encore et désolé du retard.
0