【发布时间】:2018-02-13 10:31:29
【问题描述】:
这是我的表单,它发送 POST 到 loginuser.php 它有从数据库读取用户的下拉列表。
<form action="loginuser.php" method="POST">
<div class="form-group">
<select name="userList">
<option> - - - </option>
<?php
include 'db.php';
$sql = "SELECT username FROM dbusers";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<option>" . $row["username"]. "</option>";
}
}
?>
</select>
</div>
<div class="form-group">
<input name "password" type="password" class="form-control" id="inputPassword">
</div>
<div class="form-group">
<button type="submit" class="btn btn-info btn-sm btn-block">Login</button>
</div>
</form>
这是我的 loginuser.php - 当我按下登录按钮时,它会将我发送到 localhost/loginuser.php,但它显示“TEST-FALSE”
<?php
session_start();
require('db.php');
if (isset($_POST['username']) and isset($_POST['password'])){
echo "TEST - GOOD";
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM `dbusers` WHERE username='$username' and password='$password'";
$result = mysqli_query($conn, $query) or die(mysqli_error($conn));
$count = mysqli_num_rows($result);
if ($count == 1){
$_SESSION['username'] = $username;
}else{
$fmsg = "Invalid Login Credentials.";
}
}
if (isset($_SESSION['username'])){
$username = $_SESSION['username'];
echo "Succes";
}else{
echo "TEST - FALSE";
}
?>
另外,我在 db.php 中的连接可以正常工作,因为表单上的脚本可以正确显示用户。
【问题讨论】:
-
你没有通过
username你只通过userlist -
name "password"是一个错字,应该有一个=。所以不会提交。而且您的表单根本不包含名为“username”的变量,只有“userList” -
另外,您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL。
-
你应该对你的密码进行哈希处理,而不是将它们存储为纯文本。
-
好的,谢谢!它有效。