Version complète: sur le forum Webmaster Hub : User Agent
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Poppy
Bonjour smile.gif

Suite à cet article, http://www.actulab.com/cloaking-en-php.php

Je veux faire la même chose mais dans le sens inverse, c'est à dire identifier les utilisateurs smile.gif

CITATION
$user_agent = "msnbot/1.0 (+http://search.msn.com/msnbot.htm)";

$test1 = strpos($user_agent,"mozilla");

$test2 = strpos($user_agent,"msie");

$test3 = strpos($user_agent,"gecko");

$test4 = strpos($user_agent,"firefox");


if ($test1==FALSE OR $test2==FALSE OR $test3==FALSE OR $test4==FALSE)
    echo 'Tu n\'es pas un robot';
else
    echo 'Tu es un robot';


Or à chaque fois, ça me répond: "Tu n'es pas un robot"

Ma condition marche donc mal, pouvez vous m'aider ? blush.gif

Merci d'avance tongue.gif
Dan
Salut Poppy,

C'est un Robot si toutes les conditions sont fausses... et pas seulement l'une d'elles. Il te faut donc utiliser AND au lieu de OR, non ?

Et utilise les === au lieu de == car strpos peut tout de même retourner 0 si la chaîne débute par ta recherche. Il faut donc vérifier le type, et pas seulement la valeur wink.gif

Dan
Jan
Par ailleurs tes critères de test ne me semblent pas pertinents: certains robots ont "Mozilla" dans leur user agent (Slurp et certains Googlebots).

Et méfie-toi de la casse: "mozilla" n'est pas la même chose que "Mozilla".
Dudu
Salut,

Gaffe avec Safari qui utilise les mots "Mozilla" et "Gecko" dans son User-Agent, alors qu'il n'a rien à voir avec Mozilla et que son moteur de rendu n'est pas Gecko (c'est KHTML)
wink.gif
Poppy
CITATION(Dan @ samedi 16 juillet 2005, 17h40)
Salut Poppy,

C'est un Robot si toutes les conditions sont fausses... et pas seulement l'une d'elles. Il te faut donc utiliser AND au lieu de OR, non ?

Et utilise les === au lieu de == car strpos peut tout de même retourner 0 si la chaîne débute par ta recherche. Il faut donc vérifier le type, et pas seulement la valeur wink.gif

Dan
*

J'ai exactement ce que tu m'as dit et le résultat est le même sad.gif
Poppy
CITATION(Dudu @ samedi 16 juillet 2005, 18h12)
Salut,

Gaffe avec Safari qui utilise les mots "Mozilla" et "Gecko" dans son User-Agent, alors qu'il n'a rien à voir avec Mozilla et que son moteur de rendu n'est pas Gecko (c'est KHTML)
wink.gif
*

C'est pas grâve ça en faite biggrin.gif

Le but de mon script est de me faire des stats en fonction des différents robots.

J'aimerai continuer, mais si vous en avez un bien, je suis preneur rolleyes.gif
Dan
CITATION
J'ai exactement ce que tu m'as dit et le résultat est le même
Salut Poppy,

Si le test est faux partout c'est un robot... c'est ton if qui est mis à l'envers.
Mais comme on te l'a signalé, tester de cette manière uniquement sur le User_Agent n'est pas correct. Googlebot a des User_Agents avec Mozilla ...
Poppy
CITATION(Dan @ samedi 16 juillet 2005, 19h27)
Salut Poppy,

Si le test est faux partout c'est un robot... c'est ton if qui est mis à l'envers.
Mais comme on te l'a signalé, tester de cette manière uniquement sur le User_Agent n'est pas correct. Googlebot a des User_Agents avec Mozilla ...
*

Ah ok, très bien. Je vais tenter autrement alors whistling.gif

Merci bcp pour vos réponses wink.gif
Jan
CITATION(Poppy @ samedi 16 juillet 2005, 19h36)
Je vais tenter autrement alors whistling.gif
*

Il suffit de faire exactement comme dans l'(excellent laugh.gif )article que tu cites en référence non?
Anonymus
Pour finir, les $test1,.. sont des booléens. Tu n'as donc pas besoin de les comparer avec les booléens, tu peux écrire comme ceci :
if ($test1 AND $test2 AND... )

Mais tu devrais t'intéresser aux expressions régulières, qui ne sont pas si difficiles que cela (surtout pour trouver une chaine de caractères wink.gif )
Dan
CITATION(Anonymus @ dimanche 17 juillet 2005, 00h51)
Pour finir, les $test1,.. sont des booléens. Tu n'as donc pas besoin de les comparer avec les booléens, tu peux écrire comme ceci :
if ($test1 AND $test2 AND... )
*

Ben non Nico, justement pas ! ... whistling.gif

strpos() retourne la position de la sous-chaîne dans la chaîne principale. Mais comme cette sous-chaîne peut très bien se trouver au début, la valeur 0 est une valeur correcte...

C'est pour cette raison que je lui suggérais d'utiliser les === au lieu de ==, pour s'assurer que le type booléen est respecté, et non une valeur 0.
Poppy
CITATION(Dan @ dimanche 17 juillet 2005, 09h37)
C'est pour cette raison que je lui suggérais d'utiliser les === au lieu de ==, pour s'assurer que le type booléen est respecté, et non une valeur 0.
*

Ca parait logique, surtout que dans l'article de Jan ainsi que dans php.net, ils utilisent !==.

Habituellement: == et !=
Ici: === et !==

wink.gif
Anonymus
hummm..oui..

En fait, mon analyse tient surtout du fait que :
[mode mauvais perdant]c'est une méthode couramment employée de chercher le 'début d'une chaine' dans une autre chaine, pour voir si la première chaine est bien dans la seconde. Cependant, le raisonnement est faux. Il existe des méthodes (les expressions régulières) qui permettent de chercher une chaine dans une autre, et qui renvoient un booléen s'ils le trouvent.
C'est cette méthode qui est juste. Celle que tu utilises marche, mais n'est pas 'logique' :
On ne cherche pas "la position d'un caractère dans une chaine" pour savoir si ce caractère est dans la chaine.
On cherche "si le caractère est dans la chaine".
[fin mode mal luné]
D'ailleurs, la méthode que tu emploies t'oblige à utiliser une astuce (comparer les 2 valeurs ET le type, avec le triple signe '=').
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.