2011-02-18 194 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")

問候