2010-06-06 11 views

Répondre

8

Cette partie ne fonctionnera pas comme vous (probablement) voulez:

$_SERVER['REQUEST_URI'] != "login" || "thankyou" || "confirm" 

Tout d'abord, REQUEST_URI ne sera jamais égale à une de ces valeurs - il aura au moins un / supplémentaire. Si votre script est nommé test.php, REQUEST_URI contiendra au moins /test.php (voir ci-dessous les autres informations qu'il pourrait contenir). Jetez un oeil à la variable REQUEST_URI pour voir comment elle est structurée.

En outre, REQUEST_URI est traître ici: il contiendra toutes les chaînes de requête supplémentaires de sorte qu'il sera possible de confondre la comparaison en ajoutant un ?name=value arbitraire à l'URL.

Effectuez un phpinfo() pour trouver quelque chose de plus approprié que REQUEST_URI, par ex. SCRIPT_NAME. Deuxièmement, les opérations "ou" que vous effectuez seront appliquées aux valeurs avant que la comparaison ne soit effectuée.

Vous voulez probablement quelque chose comme ceci:

!in_array($_SERVER['SCRIPT_NAME'], 
      array("/login.php", "/thankyou.php", "/confirm.php")) 
+0

$ name = nom de base ($ _ SERVER ['REQUEST_URI']); $ name_array = explode ('.', $ Name); est mon code pour cela. Ah, attendez donc que ce soit plutôt $ name_array [0]. Que je suis bête. – Sam

+0

@Sam Je suppose que c'est aussi bien. Cependant, la comparaison '||' ne fonctionnera pas dans les deux cas, la méthode 'in_array()' montrée le sera. Alternativement, vous devriez faire une comparaison '! =' Sur chaque connexion, merci, et confirmez. –

+0

Ahh je vois. Merci pour la réponse rapide, cela a fonctionné :). – Sam

1

Même si elle le fait, je créerais une méthode pour ce genre de conditions « complexes ».

Le corps des méthodes ressemblerait à quelque chose comme ceci:

if(!condition1) 
    return false; 

if(!condition2) 
    return false; 

if(!conditionN) 
    return false; 

return true; 

Edit: La raison en est simplement Readbility, vous pouvez nommer ces méthodes condition appropriée et les méthodes themself sont beaucoup plus lisible qu'une très longue instruction if .