【发布时间】:2015-07-06 13:56:38
【问题描述】:
这是我的 login.php 文件
<?php require ("database_connect.php");?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"])?>">
Name : <input type="text" name="name"><br/>
Password : <input type = "text" name="password"><br/>
<input type="submit" name="login" value="Log In">
</form>
<?php
$name=$password="" ;
if($_SERVER["REQUEST_METHOD"]=="POST" and isset($_POST["login"])){
$name = testInput($_POST["name"]);
$password = testInput($_POST["password"]);
}//if ends here
//testInput function
function testInput($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
}//testInput ends here
if(isset($_POST["login"]) && isset($_POST["name"]) && isset($_POST["password"]) && !empty($_POST["name"]) && !empty($_POST["password"])){
//echo "Name ".$_POST["name"];
if($result = mysqli_query($conn,"SELECT * FROM users WHERE name='$name' and password='$password'")){
if($result->num_rows > 1){
echo "you are logged in";
while ($row = $result->fetch_assoc()){
echo "Name ".$row["name"]."-Password ".$row["password"];
}//while loop ends here
}//if ends here
/* free result set */
$result->close();
}
else{
print "Wrong Credentials "."<br>";
die(mysqli_error($conn));
}
}
//close connection
$conn->close();
?>
</body>
</html>
一个问题是我的查询 if($result = mysqli_query($conn,"SELECT * FROM users WHERE name='$name' and password='$password'")) 将列名作为一行返回。不知道行不行?
另一件事是我输入了错误的名称或密码还是正确的,在这两种情况下我都没有得到任何输出。我在这里做错了什么?
如果你能告诉我如何用一个全面的例子用正确的格式在 php 中编写一个 mysqli 查询。我在谷歌上搜索过,但是有不同的方法,所以当查询中出现列名和变量时,我特别困惑。
【问题讨论】:
-
if($result->num_rows > 1){表示您正在从查询中寻找 2 个或更多结果。 -
您已检查数据库不包含具有 name 和 password 值的行?
-
@andrewsi 正如我在问题中所说,我的查询将列名作为一行返回,我不想将我的值与列名进行比较。这就是我检查 >1 的原因。
-
不要使用
mysqli_query使用准备和执行。或者至少使用转义。 -
@Adamnick - 它返回一行。因此,让您的支票查找
num_rows > 1将不起作用。您正在使用fetch_assoc将该单行加载到关联数组中,其中 keys 是列名,values 是数据库中的条目。