$str = preg_split('/\s/is', $str);
print_r($str);
Si vous n'avez pas besoin de la puissance des expressions régulières, vous pouvez choisir des alternatives plus rapides (quoique plus simples) comme explode() ou str_split().
Code : Tout sélectionner
//extraction des mots
$mots = preg_split('/\s/is', $rech);
....
//construction de la condition de la requete
for ($i=0; $i<$long;$i++)
{
$condition_proc = $condition_proc .'AND proc_s_description like \'%'.$mots[$i].'%\' ';
$condition_proc = ltrim($condition_proc,'AND');
$tab_proc="proc_soft";
- .....
....
//creation de la requete
$sql_proc_logi='Select * from '.$tab_proc.' where '.$condition_proc ;
...
// Séparation des mots clefs dans un tableau
$words = preg_split('#[^\S]+#si', $rech);
foreach ($words AS $key => $word)
{
// Ici tu filtre, par exemple inutile de garder les mots de deux lettres ou moins
if ($word && strlen($word) > 2)
{
$query .= (($query) ? ' AND ' : '') . ' proc_s_description LIKE \'%' . mysql_real_escape_string($word) . '%\' ';
}
}
echo $query;
PS : il est important que tu saches que la recherche avec LIKE est extrèmement lente, dès que tu commenceras à avoir plus de 1000 entrées ça risque de fortement ralentir. Il existe une méthode bien plus efficace : le FULLTEXT //ici je test le retour a la ligne
//parti code
//je recupere les mot un a une de la recherche
$mots = preg_split('#[^\S]+#si', $rech);
// je test a l'affichage
echo '0 <br>'; [b]//cela m'affiche bien test[/b]
echo $mots[0];
echo '<br>1<br>';//cela m'affiche bien test
echo $mots[1];
echo '<br>2<br>';[b]//cela m'affiche bien la coupure du retour a la ligne[/b]
echo $mots[2];
echo '<br>3<br>';//cela m'affiche bien test
echo $mots[3];
echo '<br>4<br>';
echo '<br>';
// je recupere le nombre de mots il m'en compte 4
$long = count($mots);
echo 'count = '.$long;[b] // il maffiche bien une longueur de 4[/b]
//initialisation de la variable condition
$condition = "";
$i=0;
//condition de test
if($type="3" and $rtype="2")
{
//recherche par mot clé (tous) - logiciel
for ($i=0; $i<$long;$i++)
{
if($mots[$i]=! "")[b]//test forcer pour kil prenne tous les mot pour afficher la requete[/b]
{
echo $table[$i].'<br>'; // je souhaiter tester l'affichage des mots un par un mais cela m'affiche une lettre par ligne dans notre test 3, et c'est lettre corresponde pas forcement au text rechercher: r e l
$condition = $condition .'AND proc_soft.proc_s_description like \'%'.$mots[$i].'%\' OR pb_soft.pb_s_description like \'%'.$mots[$i].'%\'';
$condition = ltrim($condition,'AND');
$table = '(relation_soft_pb LEFT JOIN proc_soft ON proc_soft.proc_s_num = relation_soft_pb.proc_s_num)LEFT JOIN pb_soft ON relation_soft_pb.pb_s_num = pb_soft.pb_s_soft';
}
}
}
la requete en sorti me donne :
Code : Tout sélectionner
Select * from (relation_soft_pb LEFT JOIN proc_soft ON proc_soft.proc_s_num = relation_soft_pb.proc_s_num)LEFT JOIN pb_soft ON relation_soft_pb.pb_s_num = pb_soft.pb_s_soft where proc_soft.proc_s_description like '%1%' OR pb_soft.pb_s_description like '%1%'AND proc_soft.proc_s_description like '%1%' OR pb_soft.pb_s_description like '%1%'AND proc_soft.proc_s_description like '%1%' OR pb_soft.pb_s_description like '%1%'AND proc_soft.proc_s_description like '%1%' OR pb_soft.pb_s_description like '%1%'
if($mots[$i]=! "")
Edit bis : précision... l'opérateur n'existe pas, mais tu ne dois pas avoir d'erreur cas php doit probablement t'associer la valeur inverse de "chaine vide" (donc considéré comme false, l'inverse étant true) dans ta variable $mots[$i] ...C'est justement pour la lisibilité de met com étan,t un post avec beaucoup de com j'ai mit les principaux en gras pour permettre au sauveur de comprendre commen j'ai testais mes étapes.Modération :
cyberneo, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).
Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.
Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ