|
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';
|
|
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 |