Plusieurs mots dans un même champ?
Sclormu
-
Dalida Messages postés 7114 Date d'inscription Statut Contributeur Dernière intervention -
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();
}
?>
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();
}
?>
A voir également:
- Plusieurs mots dans un même champ?
- Générateur de mots - Télécharger - Sécurité
- Mots de passe enregistrés - Guide
- Comment souligner un mot dans un sms ✓ - Forum Jeux vidéo
- Écrire en gras, italique, souligner - Forum Téléphones & tablettes Android
- Mettre un mot de passe sur un dossier - Guide
21 réponses
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 :
mais je peux aussi saisir
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 :
et tu construis ta requête avec une boucle 'foreach'.
explode()
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()
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...
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 :
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’)
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 :
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’)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
salut,
???
as-tu essayé avec :
???
as-tu essayé avec :
SELECT id, nom, prenom, age FROM $table WHERE couleur IN (‘muller’, ‘dupont’)
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...
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
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
Avec un seul input, si tu découpes la chaine que t'as tu devrais avoir ce que tu veux :
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"
$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"
Merci kangaxx pour ta contribution...
J'ai essayé mais toujours pas de résultat avec plusieurs mots, je doit mal m'y prendre...
J'ai essayé mais toujours pas de résultat avec plusieurs mots, je doit mal m'y prendre...
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...
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...
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é.
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é.
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]."'";
$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]."'";
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...
Bonjour Dalida, pour l'instant avec phpMyAdmin j'avais uniquement créer ma table, je découvre les autres fonctions...
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.
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.
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...
comme je l'ai dit la recherche fonctionne parfaitement du moment que je ne recherche pas 2 noms dans le même champ...
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à...
???
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à...