2011-02-18 3 views
0
<?php 
if(isset($_GET['action'])){ 
    switch ($_GET['action']) { 
     case 'login': 
      include 'header.php'; 
       if($_SERVER['REQUEST_METHOD'] == "post"){ 
        if(!empty($_POST['password']) && $_SERVER['REMOTE_ADDR'] == "My IP Adress" && $_POST['password'] == "Password"){ 
         $_SESSION['AlphenWeerNladmin'] = 1; 
         echo 'Logged in!'; 
        } 
        else 
        { 
         echo 'Wrong password or IP adress'; 
        } 
       } 
       else 
       { 
        ?> 
         <form action="admin.php?action=login" method="post"> 
          <input type="password" name="password"> 
          <input type="submit" value="submit"> 
         </form> 
        <?php 
       } 
      include 'footer.php'; 
      break; 
     case 'logout': 
      include 'header.php'; 
      $_SESSION['AlphenWeerNladmin'] = 0; 
      echo 'Logged out!'; 
      include 'footer.php'; 
      break; 

     default: 
      header('Location: 404.php'); 
      break; 

    } 
} 
else 
{ 
    header('Location: 404.php'); 
} 
?> 

Quand je vais à admin.php? Action = login et que j'essaie de me connecter, je reçois de nouveau le formulaire?La connexion admin ne se connecte pas?

Aidez s'il vous plaît!

Salutations

Répondre

1
  if($_SERVER['REQUEST_METHOD'] == "post"){ 

Les comparaisons de chaînes de PHP sont sensibles à la casse, et REQUEST_METHOD est tout-capitales: 'POST' ou 'GET', jamais 'post' ou « obtenir'.

0

Le problème est avec cette ligne ici:

if($_SERVER['REQUEST_METHOD'] == "post"){ 

Vous affichage des variables GET ainsi, la méthode de demande sera GET pour autant que je sache, et cette déclaration ne sera jamais équivaut à vrai.

+0

GET renverront les chaînes de requête qui est ce qu'il cherche. Je m'attendrais à un POST pour remplacer le GET dans REQUEST_METHOD mais qui sait. – Kris

+0

'

' fonctionnera très bien. vous obtiendrez les champs de formulaire dans $ _POST, et vous obtiendrez également un '$ _GET ['a']' contenant 'b'. –

+0

je ne défends pas ce fait, je disais que son chèque REQUEST_METHOD pourrait ne pas être satisfait ici parce qu'il est l'envoi de variables GET et POST. Je ne savais pas qui a la priorité dans le $ _SERVER [ « de REQUEST_METHOD »] variables – JamesHalsall

1

Puisque la seule condition que vous avez pour déterminer la connexion ou non donné l'action est:

if($_SERVER['REQUEST_METHOD'] == "post") 

Ensuite, vous devez conclure que cette condition n'est pas satisfait. Peut-être y a-t-il une sensibilité à la casse que vous négligez? Quelle est la valeur réelle de $_SERVER['REQUEST_METHOD']?

+0

@Kris - c'est la seule condition qui produira le formulaire de connexion. Les autres conditions donneront tous des résultats différents. Peut-être devriez-vous lire le code de plus près. –

0

Utiliser php build en fonction strcmp() Comparer stirngs

0

Peut-être que votre adresse IP est pas ce que vous attendez? Êtes-vous connecté à un serveur distant mais en utilisant une adresse IP locale ou autre chose? Que se passe-t-il si vous supprimez ce conditionnel?

+0

S'il s'agissait de l'adresse IP, la page devrait toujours fournir le message pour mot de passe ou adresse IP incorrect. –

+0

Hmmm ... putain, probablement à moins qu'il n'ait une logique bizarre ailleurs qui se redirigera vers lui-même ou quelque chose comme ça. – Kris

0

J'ai trouvé ma réponse: je devais utiliser des lettres majuscules, comme ceci:

if($_SERVER['REQUEST_METHOD'] == "POST")

Salutations

+0

Ce que je fais habituellement est strtolower()/strtoupper() et vérifie en conséquence. Cela élimine la possibilité de retour de la méthode de requête dans un cas différent. –