Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme avec preg_match

18 réponses
Avatar
Thief13
Bonjour à tous !

Voilà, j'ai un petit probleme avec preg_match :
En fait, je m'en sert pour verifier qu'une chaine est dans une autre, et
dans le cas qui me pose probleme, je cherche la chaine contenu dans
$_SESSION['profil'] dans la chaine $infos_vue['profils_autorises'].

voici mon test :

if (preg_match($_SESSION['profil'], $infos_vue['profils_autorises']) ===
false)
{
return false;
}

$_SESSION['profil'] contient 'RPC_RT' et
$infos_vue['profils_autorises'] contient 'gqsd'

cette méthode à toujours bien marché jusqu'ici, mais dans ce cas, je me
retrouve avec un beau :

Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in D:\[...]\fonctions.php on line 817

j'ai bien essayé de lire la doc de preg_match, mais je doit être un gros
boulet, car ça ne m'a pas vraiment avancé...

Je vous remerci d'avance pour votre aide ^^

10 réponses

1 2
Avatar
CrazyCat
Thief13 wrote:
$_SESSION['profil'] contient 'RPC_RT' et
$infos_vue['profils_autorises'] contient 'gqsd'
Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in D:[...]fonctions.php on line 817


$_SESSION['profil'] est censé être un pattern, or cette variable ne
contient pas les délimiteurs autorisés.
tu devrais donc utiliser '/'.$_SESSION['profil'].'/' ou utiliser autre
chose que preg_match(), par exemple strpos()

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net

Avatar
Thief13
Bon, j'ai toujours pas compris pourquoi ça ne marche pas, mais en
désepoire de cause, je me suis vraiment replongé dans la doc, et j'ai
trouvé ça :

"N'utilisez pas preg_match() si vous voulez uniquement savoir si une
chaine est contenue dans une autre. Utilisez dans ce cas les fonctions
strpos() ou strstr(), qui sont beaucoup plus rapides."

Et oui, boulet inside XD

Donc, bon, je vais essayer de voir avec strstr()

Par contre, plusieurs choses :

- Si quelqu'un pouvais quand même m'expliquer ou je me plantais, ça me
permettrait de mieux comprendre, merci d'avance pour son aide

- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
doc a l'air assé claire :

"strpos — Trouve la position d'un caractère dans une chaine"

Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?

Merci d'avance !
Avatar
Thief13
tu devrais donc utiliser '/'.$_SESSION['profil'].'/' ou utiliser autre
chose que preg_match(), par exemple strpos()



Super, merci !

Avatar
CrazyCat
Thief13 wrote:
"strpos — Trouve la position d'un caractère dans une chaine"


Extrait de la doc:
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net

Avatar
bmayer
- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
doc a l'air assé claire :

"strpos - Trouve la position d'un caractère dans une chaine"
Oulah, lisez (toi et ton collegue) MIEUX la doc.

"strpos - Trouve la position d'UN CARACTERE dans une chaine"
strstr() va, elle, trouver une chaine dans une autre


Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?

Merci d'avance !
de rien


Avatar
bmayer
On 2 août, 11:39, Thief13 wrote:
Bon, j'ai toujours pas compris pourquoi ça ne marche pas, mais en
désepoire de cause, je me suis vraiment replongé dans la doc, et j'ai
trouvé ça :

"N'utilisez pas preg_match() si vous voulez uniquement savoir si une
chaine est contenue dans une autre. Utilisez dans ce cas les fonctions
strpos() ou strstr(), qui sont beaucoup plus rapides."

Et oui, boulet inside XD

Donc, bon, je vais essayer de voir avec strstr()

Par contre, plusieurs choses :

- Si quelqu'un pouvais quand même m'expliquer ou je me plantais, ça me
permettrait de mieux comprendre, merci d'avance pour son aide

- J'ai à coté de moi un collegue qui m'affirme que strpos() peut
chercher une chaine de caractere dans une autre chaine, cepandant, la
doc a l'air assé claire :

"strpos - Trouve la position d'un caractère dans une chaine"

Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?

Merci d'avance !


Strpos() retourne la position d'UN caractere, pas d'une chaine.
Dans ton cas, strstr() est ton amie.

Avatar
Antoine Polatouche
On 2 août, 11:39, Thief13 wrote:
Qu'en est il ? strpos serait il plus indiqué que strstr dans mon cas ?
peut il vraiment chercher plus qu'un caractere ?



Strpos() retourne la position d'UN caractere, pas d'une chaine.
Dans ton cas, strstr() est ton amie.


et dans la doc pour strstr():
Note: If you only want to determine if a particular needle occurs within
haystack, use the faster and less memory intensive function strpos()
instead.

Quant à savoir si strpos permet de chercher une chaîne, en cas de doute,
il est plus rapide de faire un test en php que de suivre un fil de
discussion ;-)

echo("strpos('pilepoilpaille','pa') -> ".strpos('pilepoilpaille','pa'));


Avatar
Thief13
Oulah, lisez (toi et ton collegue) MIEUX la doc.
"strpos - Trouve la position d'UN CARACTERE dans une chaine"
strstr() va, elle, trouver une chaine dans une autre


Bin, c'est exactement ce que je me disait, mais en fait, non, ça marche
avec une chaine, et super bien d'ailleur ^^ j'ai eu beau tester dans
tout les sens, ça marche

Avatar
bmayer
Bonjour a tous !

"strpos - Trouve la position d'un caractère dans une chaine"


Extrait de la doc:
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.
Mouais

Et le jour ou ton aplli tourne sur une config avec du PHP + ancien ?

Discussions et débats sur l'actualité:http://www.sujets-d-actu.eu
Réseau IRC Francophone:http://www.crazy-irc.net



Avatar
Thief13
Extrait de la doc:
Contrairement à la fonction strrpos() avant PHP 5, celle-ci peut prendre
une chaîne de caractères complète comme paramètre needle et cette chaîne
sera utilisée en totalité.



Ok, donc là, si ça marche avec strpos, c'est parce qu'on est en php5,
mais si on fait tourner le script sur du 4, ça va foirer...

1 2