Forum Clubic

Recherche multicritere

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 seul .
Par exemple si je cherche dupont il m’affiche les informations concernant tous les duponts mais si je cherche dupont et muller je n’obtient rien…
exemple de ma table:

id | nom | prenom | age


1 | dupont | paul | 30


2 | muller | jean | 42


3 | dupont | pierre | 53

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 “

”;
while($row = mysql_fetch_array($result))
{
echo ’

'.$row['prenom'].'

'.$row['age'].' '.$row['img'].'
'; } echo ' '; } else echo '
Aucun résulat ne corresponds à votre recherche !!...
';

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

salute!!!

Bon, avant, il faut voir le coté théorique ^^.
je propose donc avant de lancer la recherche, d’analyser les mots entrés.

Ainsi, si l’utilisateur tape le mot “et”, ou alors “ou”,
par exemple :

Dupond et muller

ceci voudra dire qu’il faudra executer une recherche multicritères.
(la recherche se fera avec un stripos)

ensuite, si la recherche trouve ce mot, on explose donc la chaine de caractère en 2 chaines de caractères.
(nous verrons plus tard pour + 2 recherches)

ce qui nous donnera 2 chaines de caractères,
$name1 = Dupond
$name2 = muller

ensuite, il suffit simplement de lancer la requete SQL, avec un And, ou un OR selon le mot tapé.
qu’en dit tu? ^^

Bon, maintenant le coté pratique.

cela fera



$nom = $_POST['nom];

// on découpe la phrase, en enlevant les espaces, ce qui nous donne un tableau de mots.
$tab_mots = split(" +",trim($nom)); 

while ($tab_mots($i))
    {
   if ($tab_mots($i) != 'et')
       {
       $mot[1] = $tab_mots($i);
       }
       else
       {
         $rech = 'et';
       }
     $i++;
    }
//si en decoupant, on trouve le mot 'et' alors ce mot la (qui est une clef), ne sera pas stocké
//on met tout les autres mots dans un tableau nommé $mot[]

$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());

// si on a plus de 2 mots dans le tableau, alors la requete se complete.
$requete ="";
if ($i>=2)
     {
     for ($j = 1;$j=$i;$j++)
          { 
          $requete = $requete."OR CHAMP".$j."=".$mot[$j];
          }
     }
$select = "SELECT * FROM $tables WHERE $champ1 = '$nom' AND $champ2 = '$prenom' AND $champ3 = '$age'".$requete;

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();
}
?>


voila a peut pres ce que ca doit faire ^^’.
c’est pas sur, meme tres sur que ca ne marche pas ^^’.
c’est juste pour te montrer a peu pres ce que cela doit faire, c’est a améliorer
Edité le 20/09/2007 à 10:49

Merci mi_hawk pour ton aide, mon niveau en php/mysql est plutot faible, alors je doute de pouvoir faire les amélioration nécessaire… je vais essayer…
Merci…

ohhh… je pensais que tu avais quelques competences… ^^’.
et je voulais que tu trouve un peu la solution par toi meme ^^’.
je vais améliorer ca pour que ca marche ^^’.

Je découvre php et sql, j’avance doucement…

J’ai essayé ta solution mais sans succès je dois mal m’y prendre… j’ai également essayé d’autres solutions retrouver sur le net… Peut etre que le code que j’utilise (trouver sur le net ici) n’est pas exacte… en tous cas merci de ton aide…

avec le code que tu as sur le lien,
on doit cocher 2 cases vraisemblablement dans le formulaire
‘et’, et ‘ou’, pour dire que la recherche se fait avec un ‘ou’ ou un ‘et’

ceci reste une solution…
par contre je ne pourrais programmer un ti quelque chose ce soir (je suis au taf la ^^), ni ce week end…
donc rendez vous lundi pour que je puisse travailler un petit quelque chose.

j’avais utilisé la fonction ‘et’ et ‘ou’ mais quand la recherche porte sur le même champ cela ne fonctionne pas alors je l’ai supprimer.

Je suis déjà content que tu regarde mon post… bon week…