PHP和HTML编程,登录页面
无论输入是什么,代码都会转到loginhandler.php 我想这是因为while循环有什么想法吗PHP和HTML编程,登录页面,php,html,database,Php,Html,Database,无论输入是什么,代码都会转到loginhandler.php 我想这是因为while循环有什么想法吗 if($okay == TRUE){ $dbc = mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); mysql_select_db('coursework_network', $dbc); $qu
if($okay == TRUE){
$dbc = mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Could not connect: " . mysql_error());
mysql_select_db('coursework_network', $dbc);
$query = "SELECT * FROM signup WHERE username = '" . $username . "' AND password='" .$password . "'";
if ($result = mysql_query($query, $dbc)) {// Run the query.
while ($row = mysql_fetch_array($result)) {
$okay = TRUE;
}
} else {
$okay = FALSE;
}
}
if ($okay) {
session_start();
$_SESSION['username'] = $username;
header('Location: loginhandler.php');
exit();
} else {
$onError = "Invalid username and/or password";
}
请密切注意问题中的注释,但在查询返回0条记录的情况下,似乎从未将$OK设置为false
如果查询有效并且您有权限,mysql_num_rows将为true,因此您需要在检查有效记录的控制块内对此进行说明,或者在第一个if之后立即将$ok设置为false。您的逻辑和变量使用在这里非常混乱 在脚本顶部$okay为true的情况下,它永远不会被设置为false,因为只要mysql_查询没有错误,那么$okay=false代码就永远不会执行 您的代码有一大堆错误需要解决,我建议您特别关注以下几点: mysql_查询已弃用,不是一个好的函数。改用PDO或mysqli_*函数。 您的代码易受sql注入攻击。使用准备好的语句应该通过使用PDO来解决这个问题,否则,请清理您的输入! 要确定查询是否返回了任何结果,可以使用mysql\u num\u rows函数,该函数将结果作为参数。 最后一点应该有助于解决您在这种情况下的问题。如果您改为:
if($okay == TRUE){
$dbc = mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error());
mysql_select_db('coursework_network', $dbc);
$query = "SELECT * FROM signup WHERE username = '" . $username . "' AND password='" .$password . "'";
$result = mysql_query($query, $dbc))
if(mysql_num_rows($result) > 0)
{
$okay = true;
} else {
$okay = false;
}
}
if ($okay) {
session_start();
$_SESSION['username'] = $username;
header('Location: loginhandler.php');
exit();
} else {
$onError = "Invalid username and/or password";
}
你应该有更多的成功
不过,说真的,这段代码需要一些认真的重构。看看我在上面发表的观点,花些时间来理解其中的问题。他们很重要 美元可以放在哪里?显然,它是在运行此代码之前设置的,因为它是在第一个if语句中检查的。任何不等于false的值都会导致您看到的情况发生。您非常容易受到SQL注入攻击,如果您还没有受到攻击,您将受到黑客攻击。使用PDO或类似的准备好的/参数化的查询来完全避免这个问题。不要用纯文本存储密码。安全性很难。不要重新发明轮子。您应该使用现有的、经过验证的身份验证系统。