使用sql检查脚本时出现php登录错误

使用sql检查脚本时出现php登录错误,php,mysql,login,error-handling,Php,Mysql,Login,Error Handling,我正在做一个网站和登录功能,这是连接到一个数据库。我已经编写了脚本,它会登录和注销,但即使表单字段为空,它也会登录。例如,如果我没有在用户名和密码字段中输入任何内容,它仍然会登录。我已经检查并测试了我的数据库是否与服务器上的PHP文件连接。在网上搜索之后,我尝试了很多东西,但都浪费了我的时间,我仍然无法让它正常工作 我的代码是: <?php if (isset($_POST['loginsubmit'])){ $query = "SELECT user_id, passwo

我正在做一个网站和登录功能,这是连接到一个数据库。我已经编写了脚本,它会登录和注销,但即使表单字段为空,它也会登录。例如,如果我没有在用户名和密码字段中输入任何内容,它仍然会登录。我已经检查并测试了我的数据库是否与服务器上的PHP文件连接。在网上搜索之后,我尝试了很多东西,但都浪费了我的时间,我仍然无法让它正常工作

我的代码是:

<?php
   if (isset($_POST['loginsubmit'])){

    $query = "SELECT user_id, password FROM users WHERE username = '".$_POST['username']."'";
    $result = mysql_query($query) or die (mysql_error());
    $row = mysql_fetch_array($result);

if ($row['password'] == $_POST['pword']){

    $_SESSION['id'] = $row['user_id'];
    $_SESSION['loggedin'] = true;
}else{

    $_SESSION['id'] = 0;
    $_SESSION['loggedin'] = false;

}}

if (isset($_SESSION['loggedin'])==true){

    echo "<p> Hello " . "$_POST[username]"." <a href='logout.php'>LogOut </a> </p>";
}else {
 echo "<p>You are NOT logged in</p>\n";
}
查看“设置或不设置”方法是否适合您。除了不使用任何
mysql\uu
函数外,我还记录了一些需要研究的问题:

<?php
    // You probably have this, but make sure session_start() is on the top of page
    session_start();
    if (isset($_POST['loginsubmit'])){
            // If you use PDO or mysqli_ with prepared statements,
            // you don't need to escape the post, but in your case
            // you do (sql injection hazard)
            $query  =   "SELECT user_id, password FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."'";
            $result =   mysql_query($query) or die (mysql_error());
            $row    =   mysql_fetch_array($result);

            // You really need to insert encrypt/decrypt routine here for the password
            // Storing plain-text passwords is bad news.

            if (isset($row['password']) && ($row['password'] == $_POST['pword']))
                $_SESSION['id'] =   $row['user_id'];

            // Don't even set a session attribute here.
            // When you check stuff for logged in or logged out,
            // you would just check if the $_SESSION['id'] is even set
            // If it is, logged in, if not, then logged out
        }

    // The problem in your code is likely this line:
    // if (isset($_SESSION['loggedin'])==true)
    // Should be: if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)
    // That being said, I am not sure the point of setting session variables
    // in the instance of not logged in.

    // Check that it's set at all
    if(isset($_SESSION['id']))
        // You need to strip_tags or htmlspecialchars() this post
        echo "<p> Hello " . htmlspecialchars($_POST['username'])." <a href='logout.php'>LogOut </a> </p>";
    else
        echo "<p>You are NOT logged in</p>\n";
?>

请。它们不再得到维护,而是在使用。而是学习,并使用。感谢Jay Blanchard的回复,到目前为止,我需要在适当的位置执行错误检查。它可以正常工作,但它确实在表单字段中没有任何内容的情况下登录。非常感谢您的输入,但我只是一个使用php和sql的大工程师,只有一个简单的3/4页的小网站。没什么大不了的。我完全不知道你刚才说了什么:(哈哈哈,真有趣。好吧,我想说的是你正在设置一个
$\u会话['loggedin']
无论您是否登录都没有意义。请尝试我的代码,看看它是否适用于所有注释,当您进一步了解编码体验时,我所记的内容将有意义。