2013-09-27 75 views
-2

我還是個新手,想要學習php。我有一個表單,每次運行它我都會收到一個錯誤消息,顯示變量未設置時應該是。我肯定錯過了一些東西。請解釋爲什麼變量$ _POST ['login_button']在我第一次運行頁面時沒有設置?當我第一次打開頁面時沒有設置

代碼可以發現如下:提前

<?php 

require 'connect.inc.php'; 

    if (isset($_POST['login_button']) && isset($_POST['username']) && isset($_POST['password'])){ 

     $login_button = $_POST['login_button'];    
     $username = $_POST['username']   ; 
     $password = $_POST['password'];   
     $password_hash = md5($_POST['password']);   

      if(!empty($username)&&!empty($password)){     
      $sql = "SELECT `id` FROM `golden_acres_username` WHERE `uname`='$username' AND '".$password_hash."'";    
       if($sql_run = mysql_query($sql)){   
        $query_num_rows = mysql_num_rows($sql_run); 
       }  
        if($query_num_rows==0){  
         echo'User name and password are incorrect';  
         }    
        else if($query_num_rows==1) 
         { 
         echo 'Username and password are correct'; 
         } 
        } 

      else             
      {      
      echo 'Please fill in user name and password';      
      } 
    }  
    else 
    {       
    echo'Fields are not set';       
    }       
?>          
<form class="home_logon_area" action="test.php" method="POST"> 
    Username: 
    <input type="text" name="username" /> 
    Password: 
    <input type="password" type="password" name="password"/> 
    <input type="submit" name="login_button"> 
</form> 

感謝,

約瑟夫

+0

如果表單沒有提交,它迴應正確,你應該填寫someting。至少代碼是這樣的。把'if(!isset($ _ POST ['login_button'])){...'放在正確的行。但我擔心你不能。 – djot

+0

第一次運行代碼時,我收到消息說'沒有設置字段(我的php代碼的最後一行),但是我想刪除它並將變量設置在第一位。 – joebegborg07

+0

**通過構建帶有外部變量的SQL語句,您可以全面開放SQL注入攻擊。**此外,任何帶有單引號的輸入數據,如名稱「O'Malley」,都會炸燬您的SQL查詢。請了解使用參數化查詢(最好是使用PDO模塊)來保護您的Web應用程序。 http://bobby-tables.com/php有例子讓你開始,並且[這個問題](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php)有很多例子的細節。 –

回答

1

的$ _POST變量是由服務器設置以捕捉由瀏覽器作爲一部分被髮送數據內容的POST行爲。最初加載頁面時,瀏覽器僅執行/請求頁面內容的GET調用,而不發送POST請求。

希望有幫助!

2

$_POST包含提交表單的結果。如果還沒有提交表格,它將不包含任何內容。

你的腳本工作得很好;刪除echo 'Fields are not set';,或使用該行代碼只有表單尚未提交時運行。

1

這是很容易理解的phpscript被執行來獲取表單;-)

  • 第一次

    所以會有根本沒有信息(訪問者是新的,沒見過前的形式)

  • 然後用戶填寫表格,再按提交按鈕

    的形式被連接到相同的側,從而在S AME phpscript被再次執行

  • 現在你有公式推值傳輸,你可以訪問它們超過$ _ POST

欲瞭解更多信息,看看php.net

0

從您的代碼和更新刪除最後else與這一個的形式

<form class="home_logon_area" action="test.php" method="POST"> 
    Username: 
    <input type="text" name="username" required /> 
    Password: 
    <input type="password" type="password" name="password" required/> 
    <input type="submit" name="login_button"> 
</form> 
相關問題