Moteur de recherche par champs spécifique

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 11:43

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

ViPHP
pjl
ViPHP | 2119 Messages

27 sept. 2005, 11:45

commence par afficher ta requête pour pouvoir la tester.

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 11:48

j'obtiens ceci quand j'ajoute print $sql;

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

Mammouth du PHP | 19672 Messages

27 sept. 2005, 13:17

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 14:35

j'ai essayé les résultats ne s'affichent toujours pas.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 sept. 2005, 14:47

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.
Modifié en dernier par sadeq le 27 sept. 2005, 15:14, modifié 2 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 15:02

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

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 15:04

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]

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 15:18

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...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

27 sept. 2005, 17:06

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é!";
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

yopla26
Invité n'ayant pas de compte PHPfrance

27 sept. 2005, 17:35

Merci bien, ca fonctionne sadeq !!!

Viva le PHP !!!