2013-01-12 281 views
0

我正在嘗試構建登錄表單,因此我在數據庫中指定的管理員可以將圖像插入到我的數據庫中。管理員登錄表格

我有幾個誤區:

1)我使用<?php echo $_SERVER['PHP_SELF']; ?>稱自己(調用login.php中),所以它會加載它下面的PHP代碼(這是在同一個文件)。無論何時按下提交,它都不會轉到PHP代碼中的指定標題,而是返回到homepage.php。

的login.php:管理員登錄的HTML表單

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table> 
    <tr> 
     <td>Username: </td><td><input type="text" name="username"></td> 
    </tr> 
    <tr> 
     <td>Password: </td> <td><input type="text" name="pw"></td> 
    </tr> 
</table> 
<br /> 
<input type="submit" value="Log in"> 
</center> 

2)第二個問題是...查看PHP代碼,我試圖找到一種功能,可以讓我搶關聯數組的特定鍵。例如,我運行數據庫查詢並將其作爲關聯數組存儲在$ result中,然後返回該數組。然後我想從用戶表中獲取一個密鑰(「用戶名」和「密碼」),並將它們與上述html表單中的輸入進行比較。

我試過使用array_keys,但那需要一個數組,而不是一個對象。所以我鑄造了它,但它仍然無法工作。

我使用print_r(array_keys($userResult, "username"));來查看它是否會打印我想要的密鑰。

的login.php PHP代碼

<?php 

$username = isset($_POST['username']) ? $_POST['username'] : ""; 
$password = isset($_POST['pw']) ? $_POST['pw'] : ""; 

$userResult = verify($username, $password); 
$array = (array)$userResult; //cast to array 

print_r(array_keys($userResult, "username")); 

if(array_keys($userResult, "username") == "dan" && array_keys($userResult, "password") == "12345") { 
    header("Location: ?action=admin"); 
} 
else { 
    echo "<center>Incorrect credentials</center>"; 
} 

function verify($user, $pw) { 
    include './scripts/dbconnect.php'; 

    $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

    return $result; 
} 

include 'include/footer.php'; 
?> 

任何想法,將不勝感激!

+1

嘗試使用object $ object =(object)$ userResult;你可以簡單地調用$ object-> username;和$ object-> password; – Arun

+0

順便說一句,我建議不要將管理員登錄URL設置爲MySite/Admin或者太容易找到的東西。 – frenchie

+0

@frenchie好點...並且實際上,我想知道是否有任何其他方式阻止某人輸入數據,如果他們碰巧找到了正確的URL。 – Growler

回答

1

您可以將行動留在空白處,如action="",它會在同一頁面發佈。 我不記得什麼$_SERVER['PHP_SELF']返回內部/外部包括但這必須是你的問題。

此外,你正在檢查用戶名和密碼在你的查詢,然後你只需要知道它是否返回結果或不。檢查行數:)

+0

哈哈哦,是啊,呃...哎呀哈哈。所以我應該使用'return mysqli_num_rows($ result);'並檢查是否是== 1? – Growler

+1

是的,我不知道你的dbconnect腳本提供了什麼,但檢查是否有辦法做類似$ result-> rows() – nimlhug

1

對於第一部分,如果你只是刷新頁面,你可以做到這一點。

<form action='' method=''> 

否則,只需將login.php中的路徑硬編碼到處理文件可能更容易。

對於第二部分,我認爲你錯誤地創建了你的數組。

$array = array(); 
$array[$username] = $password; // $username is the key and $password is the value aka.. array ($username => $password) 

我不知道爲什麼,但它似乎像

$array = (array)$userResult; 

您要設置一個數組作爲一個元組運行雖然函數和方法似乎比剛纔設置少了很多明確鍵和值。

0

感謝nimlhug,得到它的工作原因...忘了我檢查數據庫的主要原因是要真正看到是否有匹配的結果...不知道爲什麼我再次檢查是否有匹配,我可以剛剛使用num_rows == 1,哈哈。

   <?php 
      include 'include/header.php'; 
      ?> 
      <center> 

      <h2>Admin Log in</h2> 
      <br/> 

      <form action="" method="post"> 
       <table> 
        <tr> 
         <td>Username: </td><td><input type="text" name="username"></td> 
        </tr> 
        <tr> 
         <td>Password: </td> <td><input type="text" name="pw"></td> 
        </tr> 
       </table> 
       <br /> 
       <input type="submit" value="Log in"> 
       </center> 
      <?php 

      $username = isset($_POST['username']) ? $_POST['username'] : ""; 
      $password = isset($_POST['pw']) ? $_POST['pw'] : ""; 


      if(verify($username, $password) == 1) { 
       header("Location: ?action=admin"); 
      } 
      else { 
       echo "<center>Incorrect credentials</center>"; 
      } 

      function verify($user, $pw) { 
       include './scripts/dbconnect.php'; 

       $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

       return $result->num_rows; 
      } 

      include 'include/footer.php'; 
      ?>