Plusieurs mots dans un même champ?

Sclormu -  
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'utilise un formulaire de recherche multicritere qui fonctionne plutot bien mais je n'arrive pas à faire une recherche de plusieurs mot dans un champ.
Par exemple si je tape Paul, il m'affiche tous les noms paul mais si je tape paul jean il ne trouve aucun résultat, ni de paul ni de jean.
Ce que je voudrais c'est qu'il affiche les documents de paul et de jean quand je cherche paul jean.

Si quelqu'un a une une petite idée sur les changements à effectuer...

$nom = $_POST['nom];
$champ1 = "nom";
$prenom = $_POST['prenom'];
$champ2 = "prenom";
$age = $_POST['age'];
$champ3 = "age";

if(empty($_POST['nom']))
{
$nom = 1;
$champ1 = 1;
}

if(empty($_POST['prenom']))
{
$prenom = 1;
$champ2 = 1;
}

if(empty($_POST['age']))
{
$age = 1;
$champ3 = 1;
}

$host = '*****';
$user = '*****';
$pass = '*****';
$db = '*****';
$tables = 'personne';

// connection à la DB
mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

$select = "SELECT * FROM $tables WHERE $champ1 = '$nom' AND $champ2 = '$prenom' AND $champ3 = '$age'";

if($nom=="" AND $prenom=="" AND $age=="")
echo 'Vous devez preciser en moins un critére de recherche !!';
else
{
$result = mysql_query($select) or die ('Erreur : '.mysql_error());
$total = mysql_num_rows($result);

if($total)
{
echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
echo "<tr>";
while($row = mysql_fetch_array($result))
{
echo '
<td>
<div class="b13">
<table>
<h2>'.$row['prenom'].'</h2>
<tr>
<td>'.$row['age'].'</td>
<td>'.$row['img'].'</td>
</tr>
</table>
</div>
</td>
</tr>';
}
echo '
</table>';
}
else echo '<div align="center">Aucun résulat ne corresponds à votre recherche !!...</div>';

mysql_free_result($result);
mysql_close();
}
?>

21 réponses

Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

il faut que tu réussisse à obtenir un requête avec 'OR'.
"SELECT * FROM $tables WHERE $champ1 = '$nom1' OR $champ1='$nom2';"

donc soit tu mets plusieurs '<input>' pour les différentes valeurs soit tu analyses la valeur retournée pour extraire les différents noms saisis.
si tu éclates la valeur avec les espaces tu auras peut être un mauvais résultat. mieux avertir l'utilisateur qu'il doit utiliser un séparateur particulier pour préciser plusieurs noms comme la barre verticale '|', la virgule ou le point virgule.

si je cherche les odc de Jean-Paul et de Pierre, je saisie par exemple :
Jean-Paul|Pierre

mais je peux aussi saisir
Jean Paul|Pierre

sans que le script ne prenne "Jean" et "Paul" pour des prénoms différents.

et dans ton script tu découpe la valeur dans un tableau :
$separateur='|';
$noms = explode($separateur, $nom);

et tu construis ta requête avec une boucle 'foreach'.

explode()
0
Sclormu
 
Merci Dalida pour cette première piste, je souhaite que la recherche se fasse dans un seul <input> , j'ai fait quelques tentatives avec 'OR' mais il m'affiche tous les résultats. J'ai récupérer ce formulaire de recherche sur le net et j'essaye de l'adapter tant bien que mal. Pour l'instant je cale sur ce point... Si je pouvais avoir un exemple inclus dans mon code ce serai royale...
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
en premier il faut faire tourner ta requête dans phpMyAdmin, après tu trouveras toujours moyen de créer l'interface qu'il faut pour la générer.

pour le 'OR' faut dire que j'en suis pas très sûr !!

dans cet excellent cours j'ai trouvé une syntaxe qui semble bien coller à ce que tu veux faire :
SELECT modèle
FROM voitures
WHERE couleur IN (‘rouge’, ‘blanc’, ’noir’)

0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
en premier il faut faire tourner ta requête dans phpMyAdmin, après tu trouveras toujours moyen de créer l'interface qu'il faut pour la générer.

pour le 'OR' faut dire que j'en suis pas très sûr !!

dans cet excellent cours j'ai trouvé une syntaxe qui semble bien coller à ce que tu veux faire :
SELECT modèle
FROM voitures
WHERE couleur IN (‘rouge’, ‘blanc’, ’noir’)

0

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

Posez votre question
Sclormu
 
Merci pour ton aide, j'essairai d'appliquer tes conseils demain, pas mal le cours MySQL...
0
Sclormu
 
J'ai retourné le code dans tous les sens mais je n'arrive pas à extraire plusieurs noms d'un même champ...
si je cherche dupont il m'affiche les informations concernant les champs dupont mais si je cherche dupont et muller je n'obtient rien...

id | nom | prenom | age
____________________________
1 | dupont | paul | 30
____________________________
2 | muller | jean | 42
____________________________
3 | dupont | pierre | 53
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

???
as-tu essayé avec :
SELECT id, nom, prenom, age
FROM $table
WHERE couleur IN (‘muller’, ‘dupont’)

0
Sclormu
 
Merci Dalida, j'ai essayé sans succès... j'ai essayé avec plusieurs '<input>' mais le problème est le même...impossible de sélectionner deux noms dans le même champ...
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
re,

mais qu'est ce qui ne fonctionne pas exactement ?
la requête ?
et as-tu des erreurs ?
0
Sclormu
 
Non pas d'erreur, j'ai essayé avec des checkbox,

par exemple je sélectionne le nom dupont et le prénom pierre j'obtiendrai 2 résultats comme on peut le voir dans la table.
Mais si je sélectionne dupont et muller je devrai normalement obtenir 5 résultats et moi j'obtient: "aucun résultat trouver"

id | nom | prenom | age
____________________________
1 | dupont | paul | 30
____________________________
2 | muller | jean | 42
____________________________
3 | dupont | pierre | 53
____________________________
4 | muller | jean | 38
____________________________
5 | dupont | pierre |33
0
kangaxx
 
Avec un seul input, si tu découpes la chaine que t'as tu devrais avoir ce que tu veux :
$noms = explode(" ", $nom); // ca découpe en tableau ta chaine en utilisant l'espace comme délimiteur
$select = "SELECT * FROM $tables WHERE $champ2 = '$prenom' AND $champ3 = '$age'";
for ($i = 0; $i < sizeof($noms); $i++) // tu parcours le tableau que t'as construit et tu ajoutes le critere de recherche à chaque fois
   $select .= " AND $champ1 = '".$noms[$i]."'";


Voila, j'ai pas pu tester, mais pour des recherches de type "jean paul" dans un seul input, ca te retournera bien tout les trucs de "paul" et de "jean"
0
Sclormu
 
Merci kangaxx pour ta contribution...

J'ai essayé mais toujours pas de résultat avec plusieurs mots, je doit mal m'y prendre...
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
bis repetita placent.

<4>:
en premier il faut faire tourner ta requête dans phpMyAdmin, après tu trouveras toujours moyen de créer l'interface qu'il faut pour la générer.

<9>:
mais qu'est ce qui ne fonctionne pas exactement ?
la requête ?
et as-tu des erreurs ?
.
0
Sclormu
 
Je ne saisi pas très bien ce que tu veux m'expliquer par:

en premier il faut faire tourner ta requête dans phpMyAdmin, après tu trouveras toujours moyen de créer l'interface qu'il faut pour la générer.

mais qu'est ce qui ne fonctionne pas exactement ?
la requête ?
et as-tu des erreurs ?


Non pas d'erreur, simplement "aucun résultat trouver" lorsque la recherche porte sur deux noms qui sont dans le même champ...
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

est-ce que tu as essayé directement dans phpMyAdmin ?
avec les requêtes que nous t'avons conseillé, il y a forcement quelque chose qui fonctionne même si cela doit être amélioré.
0
kangaxx
 
Oui enfin j'avais pas fait gaffe j'avais fait le découpage sur le nom, pour le faire sur les prénoms oublie pas de modifier :
$prenoms = explode(" ", $prenom); // ca découpe en tableau ta chaine en utilisant l'espace comme délimiteur
$select = "SELECT * FROM $tables WHERE $champ1 = '$nom' AND $champ3 = '$age'";
for ($i = 0; $i < sizeof($prenoms); $i++) // tu parcours le tableau que t'as construit et tu ajoutes le critere de recherche à chaque fois
$select .= " AND $champ2 = '".$prenoms[$i]."'";
0
Sclormu
 
Bonjour kangaxx, c'est effectivement ce que j'ai fait, j'ai intégré dans mon code les changements que tu m'as conseillé mais la recherche ne trouve aucun résultat...
Bonjour Dalida, pour l'instant avec phpMyAdmin j'avais uniquement créer ma table, je découvre les autres fonctions...
0
Dalida Messages postés 7114 Date d'inscription   Statut Contributeur Dernière intervention   923
 
salut,

tu as inséré des valeurs quand même !
-;o)
en haut de l'interface tu as un onglet 'SQL' qui te permet d'exécuter ta requête directement sur la table.
tu fais un copier/coller de ta requête en remplaçant les variables php, et zou !
comme ça tu sauras si la requête fonctionne.
0
Sclormu
 
oui, j'ai inséré des valeurs, mais vu mon niveau la question se pose ;-)
comme je l'ai dit la recherche fonctionne parfaitement du moment que je ne recherche pas 2 noms dans le même champ...
0
Sclormu
 
salut,

???
as-tu essayé avec :

SELECT id, nom, prenom, age
FROM $table
WHERE couleur IN (‘muller’, ‘dupont’)


Alors j'arrive à faire fonctioner cette requette, cela m'affiche bien muller et dupont mais le problème c'est que peu importe la recherche que j'effectue le resultat sera muller et dupont. c'est pas gagné mais j'apprend un peu plus déjà...
0