que strpos retourne 0 et plante pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : que strpos retourne 0 et plante pas

Re: que strpos retourne 0 et plante pas

par jeorcal » 31 juil. 2010, 21:50

je vais essayer merci

Re: que strpos retourne 0 et plante pas

par stealth35 » 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

Re: que strpos retourne 0 et plante pas

par jeorcal » 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; }

Re: que strpos retourne 0 et plante pas

par Ryle » 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)

Re: que strpos retourne 0 et plante pas

par AB » 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...

Re: que strpos retourne 0 et plante pas

par jeorcal » 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

Re: que strpos retourne 0 et plante pas

par Ryle » 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...

Re: que strpos retourne 0 et plante pas

par jeorcal » 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

Re: que strpos retourne 0 et plante pas

par Berzemus » 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:

Re: que strpos retourne 0 et plante pas

par jeorcal » 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()

Re: que strpos retourne 0 et plante pas

par ouckileou » 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"

que strpos retourne 0 et plante pas

par jeorcal » 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