Page 1 sur 1

Moteur de recherche par champs spécifique

Posté : 27 sept. 2005, 11:43
par yopla26
Bonjour j'aimerai faire une recherche par nom ou prenom ou telephone ou email à l'aide d'un champs texte et d'un menu déroulant. Mais voila cela ne fonctionne pas lorsque je veux afficher les résultats

Voici mon code :
<form method="POST" action="affichage_recherche.php">

	<p><input type="text" name="motscle" size="20">
	<select size="1" name="methode">
		<option value="telephone">Numéro de Téléphone</option>
		<option value="nom">Nom</option>
		<option value="prenom">Prenom</option>
		<option value="email">Email</option>
	</select>
	<input type="submit" value="Rechercher"></p>
</form>
et le formulaire d'affichage :
$methode = $_POST['methode'];
$motscle = $_POST['motscle'];

if ($methode =='' ) {

echo "Retourner sur la page d'accueil. Veuillez entrer une valeur valide !";
}
else
{

$sql="SELECT * FROM sondage WHERE '".$methode."' LIKE '".$motscle."' ORDER BY nom";


$requete = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() );

 if( $voir = mysql_fetch_assoc($requete))

  {


 echo "<center><table width='37%'><td align='left'><b>Prénom: </b>".$voir['prenom']."<br>";
            echo "<b>Nom: </b>".$voir['nom']."<br>";
            echo "<b>Téléphone: </b>" .$voir['telephone']. "<br>";
            echo "<b>Email: </b>" .$voir['email']. "<br>";
       
}
echo "</table>
    <input type='hidden' name='methode' value='<?php echo($methode) ;?>'>
    
    <table border='0' align='center' cellspacing='2' cellpadding='2'></table>";

}
Merci de m'indiquer la procédure, sinon j'ai déjà fais une recherche sur le forum en testant mais cela n'a rien rien

Posté : 27 sept. 2005, 11:45
par pjl
commence par afficher ta requête pour pouvoir la tester.

Posté : 27 sept. 2005, 11:48
par yopla26
j'obtiens ceci quand j'ajoute print $sql;

SELECT * FROM sondage WHERE 'prenom' LIKE 'JEROME' ORDER BY nom

Posté : 27 sept. 2005, 13:17
par Cyrano
Essaye en ajoutant des possibilités autres:
$sql="SELECT * FROM sondage WHERE '".$methode."' LIKE '%".$motscle."%' ORDER BY nom"; 
Note les "%" de chaque coté du mot clé: ça ouvre la possibilité de trouver "Jean-Jérome" ou "Jérome Legrand" par exemple.

Posté : 27 sept. 2005, 14:35
par yopla26
j'ai essayé les résultats ne s'affichent toujours pas.

Posté : 27 sept. 2005, 14:47
par sadeq
j'ai essayé les résultats ne s'affichent toujours pas.
Je viens de voir ton code précédent, t'as des erreurs de structuration de la table HTML et de la lecture des résultats.
Le bloc à corriger et la correction sont les suivants:
1. Pour afficher chaque résultat dans une table:
...
$sql="SELECT * FROM sondage WHERE ".$methode." LIKE '%".$motscle."%' ORDER BY nom"; 

$requete = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ); 

While ($voir = mysql_fetch_assoc($requete)) //Correction : une boucle While pour parcourir tous les résultats
  { 
//Correction : un TR est inséré pour créer une ligne de table
echo  "<center><table width='37%'><TR><td align='left'><b>Prénom: </b>".$voir['prenom']."<br>"; 
            echo "<b>Nom: </b>".$voir['nom']."<br>"; 
            echo "<b>Téléphone: </b>" .$voir['telephone']. "<br>"; 
            echo "<b>Email: </b>" .$voir['email']. "<br>"; 
        
echo "</table></center>"; //Correction : fermer la table avant de passer au suivant
} //fin de while

....
2. Pour afficher tous les résultats dans la même table:
....
$sql="SELECT * FROM sondage WHERE ".$methode." LIKE '%".$motscle."%' ORDER BY nom"; 

$requete = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() ); 

echo  "<center><table width='37%'>"; //Correction: ouvrir la table avant la boucle

While ($voir = mysql_fetch_assoc($requete)) //Correction : une boucle While pour parcourir tous les résultats
  { 
//Correction : un TR est inséré pour créer une ligne de table
echo  "<TR><td align='left'><b>Prénom: </b>".$voir['prenom']."<br>"; 
            echo "<b>Nom: </b>".$voir['nom']."<br>"; 
            echo "<b>Téléphone: </b>" .$voir['telephone']. "<br>"; 
            echo "<b>Email: </b>" .$voir['email']. "<br>"; 
        
} //fin de while
echo "</table></center>"; //fermer la table
....
Récap:
En effet, ta requête peut renvoyer plusieurs résultats (0..N), il faut utiliser une boucle (while) pour les lire.
Pour chaque résultat trouvé une ligne <TR> est créée.

Posté : 27 sept. 2005, 15:02
par yopla26
j'ai essayé ceci :
$methode = $_POST['methode'];
$motscle = $_POST['motscle'];

if ($methode =='' ) {

echo "Retourner sur la page d'accueil. Veuillez entrer une valeur valide !";
}
else
{

$sql="SELECT * FROM sondage WHERE '".$methode."' LIKE '".$motscle."' ORDER BY nom";


$requete = mysql_query($sql,$cnx)  or die ('Erreur : '.mysql_error() );

echo "<center><table width='37%'>";

While ($voir = mysql_fetch_assoc($requete))
  {


echo  "<TR><td align='left'><b>Prénom: </b>".$voir['prenom']."<br>";
            echo "<b>Nom: </b>".$voir['nom']."<br>";
            echo "<b>Téléphone: </b>" .$voir['telephone']. "<br>";
            echo "<b>Email: </b>" .$voir['email']. "<br>";

}
echo "</table> ";
}

print $sql;
y a toujours un probleme ca ne fonctionne pas, je comprend vraiment pas

Posté : 27 sept. 2005, 15:04
par yopla26
ca y é je viens de trouver le probleme c'est tout bête :

en faite cété un probleme de table

au lieu de mettre cela :
$sql="SELECT * FROM sondage WHERE '".$methode."' LIKE '".$motscle."' ORDER BY nom";
je devais mettre ceci :
$sql="SELECT * FROM sondage WHERE ".$methode." LIKE '".$motscle."' ORDER BY nom";
il fallait simplement enleve les '' entre methode[/php]

Posté : 27 sept. 2005, 15:18
par yopla26
sinon comment puis je faire pour indiquer que le moteur de recherche n'a rien trouvé ?

car lorsque je tape un mot qui ne se trouve pas dans la db, il ne m'affiche rien comme résultats.

Je pense qu'il y a moyen de l'améliorer en personnalisant les options de recherches genre pour la recherche d'un numéro : on ne peut taper que des numéros ou pour email il faut qu'il est @ etc...

Posté : 27 sept. 2005, 17:06
par sadeq
sinon comment puis je faire pour indiquer que le moteur de recherche n'a rien trouvé ?

car lorsque je tape un mot qui ne se trouve pas dans la db, il ne m'affiche rien comme résultats.

Je pense qu'il y a moyen de l'améliorer en personnalisant les options de recherches genre pour la recherche d'un numéro : on ne peut taper que des numéros ou pour email il faut qu'il est @ etc...
if (mysql_num_rows($requete) <=0) echo "Aucun résultat n'est trouvé!";

Posté : 27 sept. 2005, 17:35
par yopla26
Merci bien, ca fonctionne sadeq !!!

Viva le PHP !!!