【问题标题】:PHP-Authentication code error (isset($_POST['username'])) always returns false,PHP-身份验证代码错误 (isset($_POST['username'])) 总是返回 false,
【发布时间】:2012-12-14 14:03:22
【问题描述】:

我正在制作这个简单的代码来验证用户。带有表单的页面是:>login.php。使用以下代码。

登录.php:

<html>    
<body>  

<div style="position:absolute;left:300px;top:300px;width:300px;height:100px;z-index:9;>  

<form name="form1" method="POST" action="check.php">  
Username:<br />  
  <input type="text" name="Username" />  
  <br /><br />   
  Password:<br />  
  <input type="password" name="Password" />  
  <br /><br /><br/>  
  <input type=button onClick="location.href='check.php'" value='Continue'       name='continue'/>  
  </form>  
</div>  
</body>  
</html>  

表单字段值将在下一个 php 页面中使用,代码如下:

检查.php:

<?php
session_start();
$con = mysql_connect("localhost", "root", "");
mysql_select_db("aviation", $con) or die(mysql_error());
if (isset($_POST['continue'])) {
    $userName = $_POST[Username];
    $passWord = $_POST[Password];
    mysql_select_db('aviation');
    $query = "select * from users where Username='" . $userName . "'and     Password='" . $passWord . "'";
    $result = mysql_query($query, $con);
    if (!$result) {
        die('Could not enter data: ' . mysql_error());
    }
    $rows = mysql_num_rows($result);
    if ($rows == 1) {
        $_SESSION['Username'];
        $_SESSION['Password'];
        echo "Successful";
        echo "<BR>";
        echo "You are authorized to update the status of Bays.";
        echo "<BR>";
        $Msg = "Redirecting....";
        echo '<script type="text/javascript">  
         alert("' . $Msg . '");  
  </script>';
        header("location:upbstatus.php");
    } elseif ($userName == "" || $passWord == "") {
        $errorMsg = "Data was not entered <br/> Enter Username and Password";
        echo '<script type="text/javascript">  
         alert("' . $errorMsg . '");  
  </script>';
        else {
            $errorMsg = "Data Does Not Match <br/> Re-Enter Username and Password";
            $errorMsg = "Data was not entered <br/> Enter Username and Password";
            echo '<script type="text/javascript">  
         alert("' . $errorMsg . '");  
  </script>';
        }
    } else {
        echo ("  =============== not SET ===============");
    }
?>

它总是返回: =============== 未设置 ===============

我很困惑为什么会发生这种情况。有人可以帮忙吗?我们将不胜感激。
谢谢你。

【问题讨论】:

  • 不要以纯文本形式存储您的密码。
  • 女士,提交按钮在哪里?

标签: php html sql forms


【解决方案1】:

您的 onclick (onClick="location.href='check.php'") 事件处理程序在表单可以发出 POST 请求之前请求 check.php。单击按钮后,它会重定向到check.php,后者会向check.php而不是POST发送一个GET请求。

要修复它,您需要将按钮更改为提交类型的输入。

   <input type='submit' value='Continue' name='continue' />  

附加信息:

  1. 引用数组索引。喜欢$_POST['Username']
  2. 使用mysql_real_escape_string 转义sql 中的参数。或使用准备好的语句。

【讨论】:

【解决方案2】:

点击提交按钮时删除。当你在你的时候,修正你的报价。

【讨论】:

    【解决方案3】:

    代码有几个问题:

    奇怪的形式行为

    <input type=button onClick="location.href='check.php'" value='Continue'       name='continue'/>  
    

    你为什么要这样做?这根本不会发送用户名和密码字段,因为浏览器将在提交表单之前重定向。如果要在点击时提交表单,请使用&lt;input type="submit"&gt;

    <input type="submit" value="Continue" name="continue" />
    

    引用数组索引

    $userName = $_POST[Username];  
    $passWord = $_POST[Password];  
    

    这会导致在 PHP 中发出通知,因为常量 Username 不存在。改用这个:

    $userName = $_POST['Username'];
    $passWord = $_POST['Password'];
    

    我不会进入可能没有设置$_POST['Username'] 的场景。

    SQL 中的转义变量

    $query = "select * from users where Username='".$userName."'and     Password='".$passWord."'";  
    

    这很危险;你应该正确地转义变量:

    $query = sprintf("select * from users where Username='%s' and Password='%s'",
        mysql_real_escape_string($userName),
        mysql_real_escape_string($passWord)
    );
    

    不要以纯文本形式存储密码

    以纯文本形式存储密码只是自找麻烦。使用 bcrypt 来存储密码的哈希值。

    另请参阅:Secure hash and salt for PHP passwords

    不要使用mysql_xx函数

    此功能已弃用,取而代之的是 PDO / mysqli 和预处理语句。

    【讨论】:

      【解决方案4】:
      <form name="form1" method="POST" action="check.php">  
      Username:<br />  
        <input type="text" name="Username" />  
        <br /><br />   
        Password:<br />  
        <input type="password" name="Password" />  
        <br /><br /><br/>  
        <input type="submit" value="Continue" name="continue"/>  
        </form> 
      

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多