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();
}
?>
Configuration: Windows XP
Firefox 2.0.0.6

21 réponses

  • 1
  • 2
  1. 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
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sclormu
     
    Merci pour ton aide, j'essairai d'appliquer tes conseils demain, pas mal le cours MySQL...
    0
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  • 1
  • 2