strpos simple mais ne marche pas RESOLU

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 16:41

Salut,

J'ai un problème vraiment bizarre. J'utilise un simple strpos pour savoir si des caractères spéciaux sont présents dans une chaîne mais je ne parviens pas à faire fonctionner ce simple exemple :

Code: Tout sélectionner
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring,$findme);

echo $pos.'<br/>';


Y aurait-t-il quelque chose au niveau des versions de php ou autre ?

J'utilise wampserver 2.0
PHP 5.3.0
apache 2.2.11
mysql 5.1.36

C'est la première fois que j'ai un souci sur un script aussi basique.

D'avance merci bcp

John :D
Dernière édition par hx.jonathan le Lun Juin 28, 2010 16:57, édité 1 fois.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: strpos simple mais ne marche pas

Message le Lun Juin 28, 2010 16:43

C'est normal ... strpos est bugguée lorsque la reponse est octet offsset 0 ...

Moi perso je faits toujours ca :

$mystring = 'abc';
$findme = 'a';
$pos = strpos('*'.$mystring,$findme);

et du coup je test si $pos>0

hx.jonathan
WRInaute discret
WRInaute discret
 
Messages: 162
Inscription: 2 Mar 2005

Re: strpos simple mais ne marche pas

Message le Lun Juin 28, 2010 16:57

Ah ben c cool alors. Merci pour ton aide.

John


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 17:11

Pour une fois que je peux aider en php :mrgreen:


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 17:38

Non il est pas buggué. Il suffit de savoir l'utiliser correctement ^^

Par exemple tant qu'on trouve blanc se traduit:
while (strpos('blanc',$str) !== FALSE)


A noter les opérateurs (!== et ===) sont différents de (!= et ==).


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 17:53

je trouve perso plus simple de n'avoir a faire qu'un test numerique et pas d'ajouter un test vrai faux. Juste une question de choix.

Et si c'est un bug pour une commande de ne pas savoir retourner la position 0 ...


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 18:08

Non c'est logique, ca te retourne la position de la chaine si elle existe. Donc 0 (false) ne peut pas être retourné en cas d'erreur.


Zecat
WRInaute accro
WRInaute accro
 
Messages: 12003
Inscription: 1 Mar 2005

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 18:30

YoyoS a écrit:Non c'est logique, ca te retourne la position de la chaine si elle existe. Donc 0 (false) ne peut pas être retourné en cas d'erreur.

0 c'ets pas false, c'est offset 0 ... et pour retourner false d'autres langages retournent -1

du coup

si pos >0
ok trouvee
sinon
pas trouvé
fin de si

C'est quand meme plus cool que devoir faire deux tests (un pour chaine trouvée et un second pour position trouvée). A mon avis


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: strpos simple mais ne marche pas RESOLU

Message le Lun Juin 28, 2010 19:05

Quand je dis 0 == false c'est dans le test d'existence.
Essaie de faire

Code: Tout sélectionner
$var1 = 0;
$var2 = false;
if (!$var1 && !$var2)
-> On entre dans le if



Et non réfléchis 2 secondes, c'est pas normal de dire

Code: Tout sélectionner
si pos >0
ok trouvee
sinon
pas trouvé
fin de si


Lis la doc de strpos et tu verras que c'est:
Code: Tout sélectionner
si pos !== FALSE
ok trouvee
sinon
pas trouvé
fin de si


Si pos vaut 0 (après le test d'existence !== FALSE) ca veut dire que la chaine est a été trouvée en position 0. Maintenant arrête de crasher des boules de poils, c'est pas moi qui ait inventé la fonction. Si ca été fait comme ça c'est qu'il y a une raison j'imagine, que ça soit pour les performances ou pour trouver quelques chose de générique. C'est la doc c'est comme ça mon chat :mrgreen:

Il est même marqué en rouge dans un cadre rouge ici http://www.php.net/manual/fr/function.strpos.php comment l'utiliser ^^


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités