登录表单发布PHP / MySQL。

时间:2016-07-05 13:54:12

标签: php mysql sql

我的代码中有一只猪。我是新手,我正在努力奋斗。

我有几个问题,首先一个问题是我正在尝试使用连接到SQL数据库的登录表单,但是当输入不正确的数据或没有数据时不会出错,但是它看起来要登录

其次,我试图在用户登录时显示每个页面上的用户名,这有效,但仅适用于已手动输入数据库的用户。通过我的注册表单添加的任何用户都不会显示,尽管他们在phpmyadmin中显示。

第一个问题的登录页面代码是:

<?php


echo '<h3>Sign in</h3>';

    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {
        /*the form hasn't been posted yet, display it
          note that the action="" will cause the form to post to the same page it is on */
        echo '<form method="post" action="">
            Username: <input type="text" name="Username" />
            Password: <input type="password" name="Password" />
            <input type="submit" value="Sign in" />
         </form>';
    }
    else

        {
            //the form has been posted without errors, so save it
            //notice the use of mysql_real_escape_string, keep everything safe!


        $username = mysql_real_escape_string($_POST['Username']);
        $password = mysql_real_escape_string($_POST['Password']);
            $sql = "SELECT * FROM Users WHERE Username = '$username' AND Password = '$password'";             
            $result = mysql_query($sql);
            if(!$result)
            {
                //something went wrong, display the error
                echo 'Something went wrong while signing in. Please try again later.';
                header("location:index.php");
                //echo mysql_error(); //debugging purposes, uncomment when needed
            }
            else
            {
                {                
                    {
                    //set the $_SESSION['signed_in'] variable to TRUE
                    $_SESSION['signed_in'] = true;

                    //we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages
                    while($row = mysql_fetch_assoc($result))
                    {
                        $_SESSION['UserID']    = $row['UserID'];
                        $_SESSION['Username']  = $row['Username'];
                    }

                    echo 'Welcome, ' . $_SESSION['Username'] . ' <a href="index2.php">Proceed to the forum Home page</a>.';
                    }
                }
            }   
        }

?>

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

当存在实际的mysql错误时,函数mysql_query()返回FALSE。这可能是语法错误,无效约束插入或输入数据类型不匹配。如果任何插入的用户名和密码组合可能有效,则表示不会出现任何错误。

在您的情况下,如果用户名密码错误,则表示返回0行(无数据)错误即可。因此,在您的代码中,变量$result永远不会FALSE,这就是您的代码永远不会进入错误循环的原因。

为了解决这个问题,您需要更改代码以检查返回的行数是否大于0,而不是检查结果是否为TRUE。您可以使用mysql_num_rows()函数来实现此目的。
更改后的代码应如下所示

$result = mysql_query($sql); 
$num_rows = mysql_num_rows($result);
if($num_rows < 0){
   //put some code for error
}

进一步说明:
如果您不想使用PDO,可以使用mysqli而不是mysql。你也容易受到sql注入攻击。如果您查看prepared statements以及如何使数据进入您的服务器更安全,那将是非常好的。