【发布时间】:2018-05-31 06:22:05
【问题描述】:
我有一个代码,但有问题。这是一个登录表单,用于检查用户并通过,如果没问题,它将创建一个会话。在另一个页面中,它将检查会话登录是否与真相反。如果是真的,它将登录。 问题是当用户想要登录时,他/她需要提交登录表单 2 次才能进入站点。 有什么问题?
<form method="post" attribute="post" action="test.php">
<p>Username<br/>
<input type="text" id="user" name="user" class="form-control" required></p>
<p>Password<br/>
<input type="text" id="pass" name="pass" class="form-control" required></p>
<p></p>
<button type="submit" name="sub2" id="sub" value="sub" class="btn btn-default btn-block">Login</button>
</form>
<?PHP
include 'config.php';
$user = $_POST["user"];
$pass=$_POST["pass"];
if (isset($_POST['user']) and isset($_POST['pass']))
{
$conn = new mysqli($servername, $username, $password, $dbname);
$result = $link->query("SELECT user FROM users2 WHERE user = '$user'");
$userpass = $link->query("SELECT pass FROM users2 WHERE user = '$user'");
$row = $userpass->fetch_assoc();
$userpasss = $row["pass"];
if($result->num_rows == 1 and $pass == $userpasss)
{
session_start();
$_SESSION["login"] = true;
$_SESSION["username"] = "$user";
echo "hello";
}
}
?>
<?PHP
session_start();
echo $_SESSION["login"];
echo $_SESSION["username"];
?>
任何帮助表示赞赏。 谢谢 热烈的问候
【问题讨论】:
-
你在
session_start()之前有输出现在打开错误,这样你就可以正确调试了。然后修复 SQL 注入问题 -
请注意,您的代码对于SQL injection 来说是易受攻击的。您应该使用prepared statements 来防止这种情况。还要确保您的数据库用户只有required privileges。您可以参考this post 了解有关如何防止 PHP 中的 SQL 注入的更多信息 :)
-
另外,您的变量
$userpasss与您的变量$userpass不同。而且我真的希望您不要以明文形式存储密码,根据您的条件,这似乎是这种情况。 -
感谢您的所有 cmets。 $userpasss = $row["pass"];. $userpasss 是具有用户密码的变量。这是我使用的简单版本。我只是想找出错误
-
你为什么要用 2 个查询来运行它?您可以一次性完成。