Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和HTML编程,登录页面_Php_Html_Database - Fatal编程技术网

PHP和HTML编程,登录页面

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

无论输入是什么,代码都会转到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);

    $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或类似的准备好的/参数化的查询来完全避免这个问题。不要用纯文本存储密码。安全性很难。不要重新发明轮子。您应该使用现有的、经过验证的身份验证系统。