我想在这里做一个非常简单的检查。我想从我的数据库中选择一个代表用户名和密码的记录。现在问题出在if
开始的地方。无论我是否放入数据库中存在的表单凭据,我仍然无法重定向。除了使用mysqli_num_fields($result)
之外,我还尝试使用mysqli_num_rows($result)
,但它仍然不起作用。这开始让我疯狂。
我也尝试了$ result的var_dump,我得到了这个:
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }
我不确定如何解释。
<?php
$con=mysqli_connect("localhost","root","XXXXX","test");
$pass = $_POST['pass'];
$uid = $_POST['uid'];
$result = mysqli_query($con, "SELECT uid FROM test.login WHERE uid = '$uid' AND pass = '$pass'");
if(mysqli_num_fields($result) == 0) { header('Location: index.html')} else { header('form.html')}
mysqli_close($con);
?>
提前致谢。这可能是一个相当愚蠢的问题,我为此道歉,但明白我在所有LAMP中都是新人。
答案 0 :(得分:1)
您应该发送正确的标题。一些格式化揭示了if-和else-branch之间的区别:
if(mysqli_num_fields($result) == 0) {
header('Location: index.html')
} else {
header('form.html')
}
你应该使用
if(mysqli_num_fields($result) == 0) {
header('Location: index.html');
} else {
header('Location: form.html');
}
代替。
正如@u_mulder所说,PHP-Docu没有提到mysqli_num_fields()这样的函数/方法。 您的代码很容易出现SQL注入,您应该使用mysqli_real_escape_string()正确地转义用户输入。更好的是:使用准备好的陈述。 成功登录应仅取决于结果中的一个匹配行。
旁注:存储明文密码是个坏主意。