que strpos retourne 0 et plante pas

Eléphant du PHP | 75 Messages

24 juil. 2010, 20:27

Bonjour

j'essaye

Code : Tout sélectionner

function isAdmin(){ $pos = 0; $curPage = $_SERVER['REQUEST_URI']; $pos = strpos($curPage, "administrator"); if ($pos === false){$pos =0;} return $pos; }
et si administrator est pas dans l'url ça plante le serveur

comment je peux verifier qu'administrator est ou pas dans l'url sans planter en php 5 ?

merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

24 juil. 2010, 21:27

Bon moi déjà j'aurais utilisé substr_count() que je trouve plus logique, même si strpos() fonctionne. Et je testerais que l'url récupérée via la super globale n'est pas vide.

Je suis quand même étonné que ça fasse "planter le serveur"

Eléphant du PHP | 75 Messages

24 juil. 2010, 21:39

mon localhost MAMP SERVER plante , je comprend pas trop non plus
merci pour ta réponse je vais essayer substr_count()

ViPHP
ViPHP | 4039 Messages

25 juil. 2010, 09:45

mon localhost MAMP SERVER plante , je comprend pas trop non plus
merci pour ta réponse je vais essayer substr_count()
Tout dépend de la définition qu'on donne à "planter le serveur".

Ceci dit, une fonction "isAdmin" devrait retourner une valeur purement booléenne, ce serait plus logique :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 75 Messages

25 juil. 2010, 10:08

peu importe un boolean c'est jamais que 0 ou 1 , donc 0 ou x c'est pareil
quand je dis que ça plante c'est que ça mouline sans fin et je dois arrêter par force le serveur

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 juil. 2010, 11:09

Et tu es bien certain que c'est de cette fonction que provient le problème ? Car cela ressemble plus à un problème de boucle sans fin... tu peux facilement le vérifier en collant un exit() juste après l'appel à isAdmin() et voir ce que te retourne ta fonction et si le problème a lieu avant ou après.

Cependant il y a quelque chose de bizarre dans ta fonction : si la chaine cherchée n'est pas trouvée (strpos retourne false), ta fonction va retourner 0. Si la chaine cherchée est trouvée en début de la chaine, strpos retourne 0 et ta fonction va le retourner directement ... Du coup dans ces deux cas, trouvé ou non, ta fonction retourne 0...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 75 Messages

25 juil. 2010, 12:21

non si $pos = strpos($curPage, "administrator"); je retourne une valeur > 0
j'ai testé hors boucle et ça marche sans problème en retournant la valeur voulue, mais si dans un while je vérifie isAdmin pour savoir si j'affiche ou non ça plante

ViPHP
AB
ViPHP | 5818 Messages

25 juil. 2010, 17:20

ça marche parce que $_SERVER['REQUEST_URI'] renvoie un slashe en première position (ex : /administrator.php), donc la chaine "administrator" ne peut pas être trouvée en première position (numéro 0) mais au minimum en deuxième position (soit le numéro 1). Mais la remarque de Ryle est quand même intéressante car ton code n'est pas "très satisfaisant pour l'esprit" puisque la fonction renverra 0 si le terme à rechercher est trouvé en position 0 ou s'il n'est pas trouvé du tout (puisque tu fais : if ($pos === false){$pos = 0;}return $pos;).

Tu pourrais faire une fonction plus générique et facile à comprendre en faisant par exemple :
function isAdmmin($chaine = 'administrator')
{
if (strpos($_SERVER['REQUEST_URI'],$chaine) !== false) return true; else return false;
}
Enfin bon, c'est juste pour causer... Concernant ta boucle infinie, c'est peut-être la condition de ta boucle qui interfère avec le code retourné par ta fonction...
Modifié en dernier par AB le 25 juil. 2010, 17:24, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 juil. 2010, 17:22

non si $pos = strpos($curPage, "administrator"); je retourne une valeur > 0
C'est parce que ta chaine "administrator" n'est pas au début de ta chaine $curPage. Si $curPage commence par la chaine "administrator", alors strpos t'indiquera que la chaine a bien été trouvé en t'indiquant la position "0" :)
j'ai testé hors boucle et ça marche sans problème en retournant la valeur voulue, mais si dans un while je vérifie isAdmin pour savoir si j'affiche ou non ça plante
C'est que le problème est dans le while ou dans sa condition qui doit toujours être vraie (et qui donc va boucler sans fin)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 75 Messages

25 juil. 2010, 17:42

administrator ne sera jamais au début effectivement , ce sera toujours index ou http

merci pour vos réponse je vais revoir mon code dans ce sens

Code : Tout sélectionner

function isAdmmin($chaine = 'administrator') { if (strpos($_SERVER['REQUEST_URI'],$chaine) !== false) return true; else return false; }

ViPHP
ViPHP | 5462 Messages

31 juil. 2010, 21:41

Bonjour

j'essaye

Code : Tout sélectionner

function isAdmin(){ $pos = 0; $curPage = $_SERVER['REQUEST_URI']; $pos = strpos($curPage, "administrator"); if ($pos === false){$pos =0;} return $pos; }
et si administrator est pas dans l'url ça plante le serveur

comment je peux verifier qu'administrator est ou pas dans l'url sans planter en php 5 ?

merci
en utilisant parse_str

Eléphant du PHP | 75 Messages

31 juil. 2010, 21:50

je vais essayer merci