PHP:if condition然后redirect1 else redirect2

时间:2014-04-05 20:31:16

标签: php mysql if-statement

我想在这里做一个非常简单的检查。我想从我的数据库中选择一个代表用户名和密码的记录。现在问题出在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中都是新人。

1 个答案:

答案 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()正确地转义用户输入。更好的是:使用准备好的陈述。 成功登录应仅取决于结果中的一个匹配行。

旁注:存储明文密码是个坏主意。