使用PHP检查用户登录表单

使用PHP检查用户登录表单,php,jquery,html,Php,Jquery,Html,我对这种php语言有点陌生。我似乎在为用户检查数据库中的表时遇到问题。它总是成功的,即使它不是正确的密码。它只是转到“admin/index admin.php”。请帮帮我 我的代码: <form action="" method="POST"> <table align="center"> <tr> <td align="center"><h2>Adm

我对这种php语言有点陌生。我似乎在为用户检查数据库中的表时遇到问题。它总是成功的,即使它不是正确的密码。它只是转到“admin/index admin.php”。请帮帮我

我的代码:

<form action="" method="POST">
      <table align="center">
              <tr>
                      <td align="center"><h2>Administrator Login</h2></td>
              </tr>
              <tr>
                      <td align="left">Username : </td>
              </tr>
              <tr>
                      <td><input type="text" name="username" /></td>
              </tr>
              <tr>
                      <td align="left">Password : </td>
              </tr>
              <tr>
                      <td><input type="password" name="password" /></td>
              </tr>
              <tr>
                      <td align="center"><input type="submit" name="submit" value="Login" /></td>
              </tr>
      </table>
      </form>

      <?php
            $user = $_REQUEST['username'];
            $pass = $_REQUEST['password'];

            $query = "SELECT * FROM users WHERE username=".$user." AND password=".$pass."";
            $result = mysql_query($query);
            if(count($result)>0)
            {  
                    header('Location: admin/index-admin.php');

                    echo "<script type='text/javascript'>";
                    echo "alert('You are logged In Successfully.')";
                    echo "</script>";
            }
            else
            {
                    echo "Invalid Username or Password.";
            }
       ?>

管理员登录
用户名:
密码:

在查询中,您需要将变量放在单引号内:(还需要使用mysqli\u real\u escape\u字符串来防止sql注入)

您需要从resultset获取行:

$result = mysqli_query($query);
$row = mysqli_fetch_array($result);
if (!empty($row)) {
  ..
}

首先,我建议您使用不同的密码存储方法。有些是在我的脚注中公布的

试试这个对我有用的
mysqli.*
方法

<form action="" method="POST">
      <table align="center">
              <tr>
                      <td align="center"><h2>Login</h2></td>
              </tr>
              <tr>
                      <td align="left">Username: </td>
              </tr>
              <tr>
                      <td><input type="text" name="username" /></td>
              </tr>
              <tr>
                      <td align="left">Password: </td>
              </tr>
              <tr>
                      <td><input type="password" name="password" /></td>
              </tr>
              <tr>
                      <td align="center"><input type="submit" name="submit" value="Login" /></td>
              </tr>
      </table>
      </form>

<?php
DEFINE ('DB_USER', 'xxx');
DEFINE ('DB_PASSWORD', 'xxx');  
DEFINE ('DB_HOST', 'xxx');
DEFINE ('DB_NAME', 'xxx');

$mysqli = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect");

if(isset($_POST['submit'])){

    $user = mysqli_real_escape_string($mysqli,$_REQUEST['username']);
    $pass = mysqli_real_escape_string($mysqli,$_REQUEST['password']);

    $query = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
    $result = mysqli_query($mysqli,$query);

$row = mysqli_fetch_array($result);
if($row["username"]==$user && $row["password"]==$pass){
    echo "You are a validated user.";

    // header('Location: admin/index-admin.php');
    }

else{
    die("Sorry Jack");
    }

} // brace for if(isset($_POST['submit']))
?>

脚注:

密码

我注意到您正在以纯文本形式存储密码。不建议这样做

使用以下选项之一:

  • PHP5.5的函数
其他链接:


mysql.*
函数弃用注意事项:

从PHP5.5.0开始,此扩展就不推荐使用,不建议用于编写新代码,因为它将在将来被删除。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助

这些函数允许您访问MySQL数据库服务器。有关MySQL的更多信息,请访问»


MySQL的文档可以在»上找到。

您不应该使用MySQL函数,因为它们已被弃用,但请尝试一下,看看它是否有效:$result=MySQL\u query($query);如果($result){。即使查询失败,$result也会返回某些内容(可能是布尔值FALSE),因此计数将始终大于0
“从username='''.$user.'和password='.$pass.'的用户中选择*。”;
缺少单引号;请立即尝试使用单引号。您的代码易受SQL注入攻击。请阅读有关PDO和web应用程序安全性的内容。注意:不建议以纯文本形式存储密码。此外,您可能希望使用if($\u POST['submit']){在您的php之前,它只检查您是否提交了表单。我尝试了正确的信息,结果是相同的页面,而不是在admin/index admin.php中。我尝试了错误的信息,结果是空白页面。您复制了我的确切代码吗?另外,请确保您有正确的列名称。我在提交之前测试了它。@LyndonBrozCañetonelete我使用的是
mysqli\u*
而不是
mysql\u*
,因此,如果您仍然使用旧的DB登录,请不要使用。只需使用您自己的凭据替换
xxx
。这很有效。我倾向于认为问题出在您的
admin/index admin.php
文件中,而不是我的代码中。我不知道您在那里有什么,因此您必须做出选择确保内容匹配。@LyndonBrozCañetetonelete我应该在approved中使用什么数据类型?我只使用了一个VARCHAR,不必太长;它将是文本类型(是或否),所以
VARCHAR(5)< /代码>应该是好的。如果你也觉得我的答案已经解决了这个问题,考虑接受它,这样它就不会停留在未被回答的类别中。
$result = mysqli_query($query);
$row = mysqli_fetch_array($result);
if (!empty($row)) {
  ..
}
<form action="" method="POST">
      <table align="center">
              <tr>
                      <td align="center"><h2>Login</h2></td>
              </tr>
              <tr>
                      <td align="left">Username: </td>
              </tr>
              <tr>
                      <td><input type="text" name="username" /></td>
              </tr>
              <tr>
                      <td align="left">Password: </td>
              </tr>
              <tr>
                      <td><input type="password" name="password" /></td>
              </tr>
              <tr>
                      <td align="center"><input type="submit" name="submit" value="Login" /></td>
              </tr>
      </table>
      </form>

<?php
DEFINE ('DB_USER', 'xxx');
DEFINE ('DB_PASSWORD', 'xxx');  
DEFINE ('DB_HOST', 'xxx');
DEFINE ('DB_NAME', 'xxx');

$mysqli = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect");

if(isset($_POST['submit'])){

    $user = mysqli_real_escape_string($mysqli,$_REQUEST['username']);
    $pass = mysqli_real_escape_string($mysqli,$_REQUEST['password']);

    $query = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
    $result = mysqli_query($mysqli,$query);

$row = mysqli_fetch_array($result);
if($row["username"]==$user && $row["password"]==$pass){
    echo "You are a validated user.";

    // header('Location: admin/index-admin.php');
    }

else{
    die("Sorry Jack");
    }

} // brace for if(isset($_POST['submit']))
?>
$query = "SELECT * FROM users WHERE username='$user' AND password='$pass' AND approved='YES'";