PHP用户登录系统问题-只有最后一个用户才能登录
我正在尝试使用php创建一个登录系统。我试图创建的是有一个页面,要求用户名,密码,电子邮件。然后,当用户填写字段进入下一页时,将要求用户输入用户名和密码,以便登录系统。此外,我已经创造了一些东西,但没有正常工作。表单已正确提交,我将数据接收到数据库中,但当用户尝试登录到系统时,它将只允许最后一个注册的用户使用其凭据登录到系统中。对于所有其他也已注册的用户,登录不起作用。有人能帮忙解决这个问题吗 谢谢 我的HTML和PHP代码:PHP用户登录系统问题-只有最后一个用户才能登录,php,html,Php,Html,我正在尝试使用php创建一个登录系统。我试图创建的是有一个页面,要求用户名,密码,电子邮件。然后,当用户填写字段进入下一页时,将要求用户输入用户名和密码,以便登录系统。此外,我已经创造了一些东西,但没有正常工作。表单已正确提交,我将数据接收到数据库中,但当用户尝试登录到系统时,它将只允许最后一个注册的用户使用其凭据登录到系统中。对于所有其他也已注册的用户,登录不起作用。有人能帮忙解决这个问题吗 谢谢 我的HTML和PHP代码: <div class="container">
<div class="container">
<div class="row">
<div class="col-xs-12">
<h2>Please sign in with your username<br>
and password to complete the form... Thanks!!!</h2>
<form method="post" action="success.php">
<?php
if(isset($_POST['login'])) {
$username = $_POST['user_username'];
$password = $_POST['user_password'];
$query = "SELECT * FROM users_info";
$result = mysqli_query($connection, $query);
while($row = mysqli_fetch_assoc($result)) {
$db_username = $row['user_username'];
$db_password = $row['user_password'];
}
if($username !== $db_username) {
echo "Username does not exist";
}else if ($password !== $db_password) {
echo "Password does not exist";
}else {
header("Location: form.php");
}
}
?>
<div class="form-group">
<label for="user_username">Enter Username</label>
<input type="text" name="user_username" class="form-control" required>
</div>
<div class="form-group">
<label for="user_username">Enter Password</label>
<input type="password" name="user_password" class="form-control" required>
</div>
<div class="form-group">
<input type="submit" name="login" value="Log In" class="btn btn-success">
</div>
</form>
</div>
</div>
</div>
请使用您的用户名登录
和密码来完成表格。。。谢谢
输入用户名
输入密码
您需要将查询限制为仅获取试图登录的用户信息。注意,这不包括有关SQL安全或错误报告的传入注释。我强烈建议您进行错误检查,查看获取的结果是否为空,然后继续
<div class="container">
<div class="row">
<div class="col-xs-12">
<h2>Please sign in with your username<br>
and password to complete the form... Thanks!!!</h2>
<form method="post" action="success.php">
<?php
if(isset($_POST['login'])) {
$username = $_POST['user_username'];
$password = $_POST['user_password'];
//Fetch matching user data
$query = "SELECT * FROM users_info WHERE user_username = '$username' AND user_password = '$password'";
$result = mysqli_query($connection, $query);
while($row = mysqli_fetch_assoc($result)) {
$db_username = $row['user_username'];
$db_password = $row['user_password'];
}
if($username !== $db_username) {
echo "Username does not exist";
}else if ($password !== $db_password) {
echo "Password does not exist";
}else {
header("Location: form.php");
}
}
?>
<div class="form-group">
<label for="user_username">Enter Username</label>
<input type="text" name="user_username" class="form-control" required>
</div>
<div class="form-group">
<label for="user_username">Enter Password</label>
<input type="password" name="user_password" class="form-control" required>
</div>
<div class="form-group">
<input type="submit" name="login" value="Log In" class="btn btn-success">
</div>
</form>
</div>
</div>
</div>
请使用您的用户名登录
和密码来完成表格。。。谢谢
输入用户名
输入密码
必须在循环中使用条件。因为你所做的是错误的。请接触更多PHP基础知识和一些基本登录系统
您的SQL查询应该如下所示:
$query = "SELECT * FROM users_info WHERE user_username ='". mysqli_real_escape_string(CONNECTION_VAR, $username). "' AND user_password ='". mysqli_real_escape_string(CONNECTION_VAR, $password ). "' LIMIT 1";
CONNECTION_VAR - your connection id to the database
$row = mysqli_fetch_assoc($result);
因此,如果匹配(密码和用户名),则只会得到一行。您可以这样轻松地获取它:
$query = "SELECT * FROM users_info WHERE user_username ='". mysqli_real_escape_string(CONNECTION_VAR, $username). "' AND user_password ='". mysqli_real_escape_string(CONNECTION_VAR, $password ). "' LIMIT 1";
CONNECTION_VAR - your connection id to the database
$row = mysqli_fetch_assoc($result);
因此,您可以使用$row
中的数据
但请注意以下几点:
-但是请记住对密码进行哈希或盐析。在查询中使用数据之前,还要转义所有内容 “不工作”是什么意思?您正在从数据库中选择所有用户,然后将它们全部分配到
$db_username
(因此循环后只剩下最后一个用户)…这一开始就很疯狂。使用其中user\u username=…
从数据库中仅选择一个您真正感兴趣的用户!因为您查询所有用户从用户信息中选择*并循环浏览它们,因此,只有最后一个变量保存在变量$db_username
和$db_password
中。在开始询问这些问题之前,您需要学习一些编程基础知识。您至少应该提供一个非SQL注入陈词滥调的解决方案1:d感谢各位的帮助@亚当:我在寻找你的答案。谢谢。同意,@xander,希望OP能够理解风险,并利用它来挖掘更安全的方法。我已经使用while循环从DBOk@yfain获取所有行。谢谢你的建议。