problème de recherche
Hors ligneAsquel Le 16/05/2006 à 12:33 Profil de Asquel Configuration de Asquel

salut tout le monde

bon j'ai un tit pb avec une recherche en sql :

$base->connectBase($serveur_z, $login_z, $pass_z, $base_z);
$sql = 'SELECT * FROM gbs_SE WHERE Titel like\'%'.$_GET['name'].'%\' LIMIT 1';
$base->executeRequete($sql);
if (mysql_num_rows($base->resultatRequete)>0) {
          $m=$base->getLigneResultatSuivante();
          echo $m['Titel'].'<br/>';
          echo $m['UhrZ'].'<br/>';
          echo $m['Subject'].'<br/>';




en fait il arrive que j'ai des requêtes avec des apostrophes dans le champs de recherche.
J'ai regardé sur le serveur (c'est pas le mien) y a les Magic Quotes d'activées donc normalement j'ai pas besoin de faire
addslashes() ... ou real_escape_string()  mais ca marche pas !!
ca commence à me monter à la tête lol j'en ai marre ... alors si vous aviez une idée ca serait cool

merci d'avance

edit : en désespoir de cause, j'ai séparé chaque mots de ma requête, ensuite je cherche pour chaque mot si il y a un apostrophe ou pas et je cherche sur l'ensemble des mots avec un AND mais bon ...
j'aurais préféré ne pas faire ca alors si quelqu un voit la solution du problème ...

je vous montre ce que j'ai fais et qui marche :

$name=$_GET['name'];
$name=trim($_GET['name']);
$name=explode(" ",$name);
for ($i=0;$i<sizeof($name);$i++) {
     if ($place=strpos($name[$i],"'"))
          $name[$i]=substr_replace($name[i]," ",$place,1);
     if ($i==0) {
     $requete='`Titel` '
                  . ' LIKE \'%'.$name[$i].'%\' OR `Subject` '
                      . ' LIKE \'%'.$name[$i].'%\')';
          }
     else
          {
     $requete=$requete.'AND (`Titel` '
                  . ' LIKE \'%'.$name[$i].'%\' OR `Subject` '
                      . ' LIKE \'%'.$name[$i].'%\')';
          }
     }
$sql = 'SELECT * '
        . ' FROM `zhsweb`.`gbs_SE` '
        . ' WHERE ( '.$requete.''
        . ' LIMIT 0 , 30';

Hors ligneAnthony Le 16/05/2006 à 22:44 Profil de Anthony Configuration de Anthony

Admin
Salut,

peux-tu faire un echo de ta requête juste avant le mysql_query, et exécuter cette requête dans PHPMyadmin pour nous dire ce qui s'affiche ? merci
--

Hors ligneAsquel Le 18/05/2006 à 12:24 Profil de Asquel Configuration de Asquel

j'ai inversé un peu mon code et je me suis servi des variables de session au lieu du GET pour transporter le nom
j'ai trouvé un truc bizarre avec firefox, quand je transportais un nom un peu long (mais moins de 255 caractères) ca faisait tout planter alors que avec IE non ...

bref tiens ca donne ca :

$i=$_GET['i'];
$name=$_SESSION['name'][$i];

if ($place=strpos($name,"'"))
     $name=substr_replace($name," ",$place,1);
$name=explode(" ",$name);
     for ($i=0;$i<sizeof($name);$i++) {
          if ($i==0) {
          $requete='`Titel` '
               . ' LIKE \'%'.$name[$i].'%\' OR `Subject` '
               . ' LIKE \'%'.$name[$i].'%\')';
               }
          else
               {
          $requete=$requete.'AND (`Titel` '
                         . ' LIKE \'%'.$name[$i].'%\' OR `Subject` '
                         . ' LIKE \'%'.$name[$i].'%\')';
               }
          }
$sql = 'SELECT * '
        . ' FROM `zhsweb`.`gbs_SE` '
        . ' WHERE ( '.$requete.''
        . ' LIMIT 0 , 30';
$base->executeRequete($sql);




et après ca affiche une requête avec tous mes mots du genre

SELECT * FROM gbs_SE WHERE Titel LIKE (%Je% OR Subject LIKE %Je%) AND (Titel Like .... etc

voili voilou
Hors ligneAnthony Le 18/05/2006 à 12:41 Profil de Anthony Configuration de Anthony

Admin
Tes parenthèses dans la requête sont mal placées.

Faut que ça donne SELECT * FROM gbs_SE WHERE (Titel LIKE %Je% OR Subject LIKE %Je%) AND (Titel Like .... etc
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels