2013-09-27 45 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> 
相关问题