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>
4

4 回答 4

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>
于 2013-04-11T19:25:47.690 回答
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>
于 2014-10-27T03:38:36.530 回答
0

要提交<form>,您需要一个提交按钮;你有:

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

尝试:

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

我不认为您当前正在提交表单,因此单击提交时不会发生任何事情。

于 2013-04-11T18:45:33.563 回答
0

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

试试java脚本

echo "<script>window.location = 'admin.php';</script>

如果您已经输出到页眉将不起作用

于 2013-04-11T18:46:59.113 回答