2013-04-11 69 views
0

當前我試圖創建一個提交給自己的登錄表單,這樣如果他們將顯示在登錄表單上方而不是發送到另一個頁面。此外,如果登錄成功,則會將其發送到所需的頁面。這裏是我的代碼如下,我感謝任何幫助,謝謝!提供錯誤信息並提交給自己的登錄頁面

<?php 
if ((isset($_REQUEST['username'])) && (isset($_REQUEST['password']))) { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } 

    $query = mysql_query("SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"); 

    $numrows = mysql_num_rows($query); 
    if ($numrows != 0) { 

     while ($row = mysql_fetch_assoc($query)) { 
      $dbusername = $row['username']; 
      $dbpassword = $row['password']; 
     }    

     if ($adminusername == $dbusername && ($adminpassword == $dbpassword)) { 
      $_SESSION['username'] = $adminusername; 
      header("Location: admin.php"); 
     } 
    } else { 
     echo " ($error) Username and password do not match"; 
    }     
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+1

你在堅持什麼?它在做什麼,它不應該做什麼?或者它沒有做什麼,它應該如何? – andrewsi 2013-04-11 18:39:12

+0

和你的問題是...?除了[sql注入攻擊](http://bobby-tables.com)漏洞,當然。 – 2013-04-11 18:39:28

+0

當我輸入正確的信息,應該把我發送到管理頁面,沒有任何反應,沒有錯誤信息 - 什麼都沒有。如果信息是正確的,它應該重定向到管理區... – cja91 2013-04-11 18:43:01

回答

1

我縮進你的代碼,這樣你可以更清楚地看到結構。

如果用戶名和密碼爲空,則會輸出錯誤,但數據庫仍將被查詢。

您不檢查數據庫查詢是否實際工作。您應該檢查$query是否爲假,並且是否報告錯誤。

您正在檢查用戶名和密碼匹配兩次(一次在SQL中,稍後再次),這是矯枉過正,而且如果第二次檢查失敗則不報告。

header()只有在您還沒有發送任何輸出時才能正常工作......如果在您顯示的代碼之前有任何輸出,即使是PHP以外的空白行,那麼標題也不起作用。

就其本身而言,這對我的作品(SQL注入可能的除外):

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $adminusername = $_POST["username"]; 
    $adminpassword = $_POST["password"]; 
    if ($adminusername == '' || $adminpassword == '') { 
     echo "<b>You must complete all sections</b><br/>"; 
    } else { 
     $sql = "SELECT * FROM admin WHERE username = '$adminusername' AND password = '$adminpassword'"; 
     $query = mysql_query($sql); 

     if ($query === false) { 
      echo "Could not successfully run query ($sql) from DB: " . mysql_error(); 
      exit; 
     } 

     if (mysql_num_rows($query) > 0) { 
      $_SESSION['username'] = $adminusername; 
      header('Location: /admin.php'); 
      exit; 
     } 

     echo "<b>Username and password do not match</b><br/>"; 
    } 
} 
?> 
<h3>Admin Login</h3> 
<form name="login" action="<?= $_SERVER['PHP_SELF'] ?>" method="POST"> 
    Username: <input type="text" name="username"><br/> 
    Password: <input type="password" name="password"><br/><br/> 
    <button type="submit">Log In</button> 
</form> 
+0

非常感謝你的工作! – cja91 2013-04-11 21:23:57

0

要提交<form>,你需要一個提交按鈕;你有:

<button type="submit">Log In</button> 

嘗試:

<input type="submit" value="Log In" /> 

我不認爲你目前正在提交表單,所以什麼都不會發生,當你點擊提交。

+0

感謝您的回覆,我已經嘗試過,沒有任何更改,不幸的是... – cja91 2013-04-11 18:49:28

+1

'

+0

呵呵。所以他們是。我想這是我今天學到的新東西。 – andrewsi 2013-04-11 18:53:29

0

而不是 header(「Location:admin.php」);

嘗試Java腳本

echo "<script>window.location = 'admin.php';</script> 
如果你已經

outpu頁面頁眉不會工作

+0

但是,除非錯誤沒有被報告,否則PHP會通知您頭文件已經發送。 – 2013-04-11 18:50:54

0

我的解決方案回聲形式與div內下方的錯誤。我仍然在學習,但我希望它能幫助別人。

<div> 
    <?php 
    //make sure the form action='' is set to itseslf 
echo " 
     <form action='self_page_name' method='post'> 
      <table> 
      <tr>  
       <td>UserName:</td> 
      </tr> 
      <tr> 
       <td><input type='text' name='username' required='required' /></td> 
      </tr> 
      <tr> 
       <td>Password: </td> 
      </tr> 
      <tr> 
       <td><input type='password' name='password' required='required' /></td> 
      </tr> 
      <tr> 
       <td><input type='submit' name='submit' value='Login' /></td> 
      </tr> 
      </table> 
     </form> 
    "; 
//////////your php validation script here//////////// 
    ?> 
</div> 
+0

對於新問題的解答比一年前的問題更好,而且回答標記的問題通常更有意義。 – Paul 2014-10-27 04:14:12

相關問題