-4
<?php
    if ($_POST['submit'] == "submit")
    {
    $userName = $_POST['username'];
    $passWord = $_POST['password'];

$db= mysql_connect("localhost", "root", "root");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("onlineform", $db);


$checkUserNameQuery = "SELECT username FROM onlineformdata ORDER BY id DESC LIMIT 1";
$checkUserName = mysql_query($checkUserNameQuery);
$checkPassWordQuery = "SELECT password FROM onlineformdata ORDER BY id DESC LIMIT 1";
$checkPassWord = mysql_query($checkPassWordQuery);
$AdminChanges = "";

if (($userName == $checkUserName) && ($passWord == $checkPassWord)) 
    {
    $AdminChanges = "AdminChanges.php";
    }
else 
    {
    $AdminChanges = "InvalidLogin.html";
    }
}

function PrepSQL($value)
    {
        // Stripslashes
        if(get_magic_quotes_gpc()) 
        {
            $value = stripslashes($value);
        }

        // Quote
        $value = "'" . mysql_real_escape_string($value) . "'";

        return($value);
    }

?>
<html>
<head>
<title>Admin Login</title>
</head>
<body>
<form action = <?php echo PrepSQL($AdminChanges); ?>  method="post">
username: <input type="text" name="username" />
password: <input type="text" name="password" /> <br/>

<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>

我遇到了一个问题,表单在提交时被定向到错误的地方。这是一个用户验证页面。如果用户名和密码与数据库中存储的不匹配,则应转到“无效登录”页面。如果他们这样做,他们应该去用户验证网站的下一部分。

输入值之前的表单标签在页面源代码中如下所示:

但是,当用户名和密码正确时,它会转到 InvalidLogin.html 页面。当它不正确时,表单会再次重新加载,当我检查页面源时,它是完全相同的代码,除了现在表单标签显示:

有什么建议么?

4

2 回答 2

0

我想你弄错了,动作标签是表单发送请求的地方,而不是发送请求后去哪里。

尝试使用header('location: '.$AdminChanges); 在用户验证后立即重定向页面。

编辑:还要删除表单的操作标签。通过删除它,请求将被发送到您正在处理的同一文件中。

于 2013-07-11T16:00:22.937 回答
0
<?php
    if($_POST['username'] && $_POST['password']){

        $username = $_POST['username']; // Escape this
        $password = $_POST['password']; // Escape this

        $searchQuery = mysql_query("SELECT id FROM onlineformdata WHERE username = '$userName' AND password = '$password' ORDER BY id DESC LIMIT 1");

        if(mysql_num_rows($searchQuery)){
            header('location:/adminPage.php'); // Go to this page if row exists in DB
        }
        else{
            header('location:/invalidLoginPage.html'); //Go to this page if row doesn't exist in DB
        }

        exit; // So that it quite this page and goes to the desired one set in the "headers"
    }
    else{
        //Not strictly needed... But you could be useful in some circumstances
    }
?>

<html>
<head>
<title>Admin Login</title>
</head>
<body>
<form action=''  method="post">
username: <input type="text" name="username" />
password: <input type="text" name="password" /> <br/>

<input type="submit" value="submit" />
</form>
</body>
</html>

这应该让您朝着正确的方向开始。不要忘记在您认为合适的情况下转义用户名/密码字段。

表单的操作部分是表单提交的位置,因此 - 在您的情况下 - 这应该是同一页面。正如 Hristo 所说,您可以将其保留/留空,它将默认提交自己。

至于Marc B(毕竟他确实问过一个问题);如果您阅读代码,您会看到 PrepSQL 函数实际上在字符串周围添加了单引号...由于 html 中没有引号,这无论如何都没有错...所以我看不出问题出在哪里那里(除了它没有做他想做的事)。

对于多个用户帐户,只要您不允许多个用户使用相同的用户名,那么数据库只返回一条记录......所以再次,那里没有问题。

于 2013-07-11T17:00:47.960 回答