2011-02-18 192 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'); 
} 
?> 

当我去admin.php?action = login并且我尝试登录时,我会再次发送到窗体?管理员登录不会登录?

请帮忙!

问候

回答

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

PHP的字符串比较是区分大小写的,并且REQUEST_METHOD是全大写:“POST”或“GET”,从不“后”或'得到'。

0

问题是与这条线的位置:

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

您发布的GET变量一样,所以请求的方法将被据我所知GET及本声明绝不会等同于真实。

+0

GET将返回查询字符串这正是他要寻找的。我希望POST会覆盖REQUEST_METHOD中的GET,但是谁知道。 – Kris 2011-02-18 17:12:24

+0

`

`可以正常工作。你会得到$ _POST中的表单域,并且你还会得到一个`$ _GET ['a']`包含`b`。 – 2011-02-18 17:13:42

+0

我并不是在争论这个事实,我只是说他的REQUEST_METHOD检查可能不会被满足,因为他发送的是GET和POST变量。我不确定哪些优先于$ _SERVER ['REQUEST_METHOD']变量 – JamesHalsall 2011-02-18 17:15:37

1

由于唯一的条件你必须确定登录或没有给予操作是:

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

然后,你必须断定此条件没有被满足。也许你忽视了大小写敏感性? $_SERVER['REQUEST_METHOD']的实际价值是多少?

+0

@Kris - 它是生成登录表单的唯一条件。其他条件将会产生不同的结果。也许你应该更仔细地阅读代码。 – 2011-02-18 17:15:31

0

使用PHP内建功能strcmp()比较stirngs

0

也许你的IP地址不是你所期望的?你是否连接到远程服务器,但使用本地IP或其他东西?如果删除条件会发生什么?

0

我发现我自己的答案:我需要使用大写字母,如:

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

问候