OVH Cloud OVH Cloud

probleme de l'exactitude dans un SELECT

4 réponses
Avatar
AAA
Bonjour,
Je ne trouve pas la solution pour sélectionner exactement une donnée.
Je m'explique.
Dans une table j'ai un champ 'email'
je fais une recherche à l'aide d'un formulaire

$colname_je_mail = "1";
if (isset($_POST['email'])) {
$colname_je_mail = (get_magic_quotes_gpc()) ? $_POST['email'] :
addslashes($_POST['email']);
}
mysql_select_db($database, $LienBase);
$query_je_mail = sprintf("SELECT * FROM ma_table WHERE email = '%s'",
$colname_je_mail);
$je_mail = mysql_query($query_je_mail, $LienBase) or die(mysql_error());
$row_je_mail = mysql_fetch_assoc($je_mail);
$totalRows_je_mail = mysql_num_rows($je_mail);


cela fonctionne "presque" toujours !!!
$totalRows_je_mail = 1 ou plus si c'est exact.
sauf pour certaines adresses du genre jmb696bmj@hotmail.com ou autre de ce
genre là ... exemple : da66da@toto.com

en faisant des tests avec phpmyadmin, il faut utiliser :
WHERE email LIKE '%jmb696bmj@hotmail%'
pour que l'enregistrement soit trouvé !

je ne comprends pas pourquoi.
Je ne trouve pas d'explications dans les manuels. Pour moi LIKE ne donne pas
le résultat exact comme opérateur de comparaison. Mais plutôt tous les
résultats qui contiennent cette chaine de caractère. Or je cherche une
adresse et une seule !
Si quelqu'un peut éclairer ma lanterne, je l'en remercie d'avance

IB

4 réponses

Avatar
CrazyCat
AAA wrote:
je ne comprends pas pourquoi.
Je ne trouve pas d'explications dans les manuels. Pour moi LIKE ne donne pas
le résultat exact comme opérateur de comparaison. Mais plutôt tous les
résultats qui contiennent cette chaine de caractère. Or je cherche une
adresse et une seule !
Si quelqu'un peut éclairer ma lanterne, je l'en remercie d'avance


Tout d'abord, ton code est, amha, bien trop compliqué:

mysql_select_db($database, $LienBase);
if (isset($_POST['email']) && ($_POST['email'] != "")) {
$query_je_mail = "SELECT COUNT(*) AS nb_rec FROM ma_table WHERE
email='".$_POST['email']."'";
$je_mail = mysql_query($query_je_mail, $LienBase) or die(mysql_error());
list($totalRows_je_mail) = mysql_fetch_row($je_mail);
} else {
$totalRows_je_mail = 0;
}

A priori, plus simple et fonctionne (du moins chez moi)


--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
AAA
"CrazyCat" a écrit dans le message de news:
d07mdt$37c$

Tout d'abord, ton code est, amha, bien trop compliqué:

mysql_select_db($database, $LienBase);
if (isset($_POST['email']) && ($_POST['email'] != "")) {
$query_je_mail = "SELECT COUNT(*) AS nb_rec FROM ma_table WHERE
email='".$_POST['email']."'";
$je_mail = mysql_query($query_je_mail, $LienBase) or
die(mysql_error());
list($totalRows_je_mail) = mysql_fetch_row($je_mail);
} else {
$totalRows_je_mail = 0;
}

A priori, plus simple et fonctionne (du moins chez moi)



merci
en réalité le problème vient de caractères invisibles qui sont présents dans
la base de données.
La syntaxe (même un peu compliquée faite par DMX) était valable
IB

Avatar
CrazyCat
AAA wrote:
en réalité le problème vient de caractères invisibles qui sont présents dans
la base de données.
La syntaxe (même un peu compliquée faite par DMX) était valable


Caractères invisibles dans la base de données pour un email?
A mon avis, ton formulaire d'enregistrement des emails est mal traité...


--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
AAA
"CrazyCat" a écrit dans le message de news:
d093ca$md7$
AAA wrote:
en réalité le problème vient de caractères invisibles qui sont présents
dans la base de données.
La syntaxe (même un peu compliquée faite par DMX) était valable


Caractères invisibles dans la base de données pour un email?
A mon avis, ton formulaire d'enregistrement des emails est mal traité...


le problème est venu de l'importation de fichiers au format CSV et pas de la
saisie en ligne via le formulaire, bien entendu.
IB