par
cyberneo » 13 août 2007, 11:59
bonjour a tous, ce matin j'ai un gros souci avec la fonction elle semblai marchai la semaine derniere mais ce matin petite surprise quan je commencais a attaquer les conditions recurantes...
mon souci par l'exemple:
test tapé dans la zone de recherche :
test test
test
//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%'
vous pouvez constater que la valeur 1 est testé pour chaque condition au lieux de test
si je corrige la condition affin quelle ne prenne que les valeur supérieur a 2 caractére et bien la requête plante.
J'ai besoin de votre aide merci ...
bonjour a tous, ce matin j'ai un gros souci avec la fonction elle semblai marchai la semaine derniere mais ce matin petite surprise quan je commencais a attaquer les conditions recurantes...
mon souci par l'exemple:
test tapé dans la zone de recherche :
[b]test test
test[/b]
[php] //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';
}
}
}[/php]
la requete en sorti me donne :
[code]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%'[/code]
vous pouvez constater que la valeur 1 est testé pour chaque condition au lieux de test
si je corrige la condition affin quelle ne prenne que les valeur supérieur a 2 caractére et bien la requête plante.
J'ai besoin de votre aide merci ...