我有这个脚本。一切都很好,除了第一个" if"条件没有按预期进行评估,因为它没有回显证明它正确评估的代码。我有一个页面(index.php),其中包含一个带有$_POST['pincode']
来自的if($pincode !== $_POST['pincode'])
的帖子操作的表单。因此,当$_POST['pincode']
求值为true时,而不是标题位置来回显错误消息并返回index.php页面,会发生什么,它会路由到我的checkpin.php(此脚本)并保持不变。
注意:$_SESSION['pincode']= $_POST['pincode'];
$conn = new mysqli("localhost","user","pass",'db');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = $conn->query("SELECT pincodex, pinmatch FROM voters_reg WHERE pincodex = '{$_SESSION['pincode']}'");
$row_count = $sql->num_rows;
if ($row_count == 1)
{
while($row = $sql->fetch_assoc()){
$pinmatch = $row['pinmatch'];
$pincode = $row['pincodex'];
if($pincode !== $_POST['pincode']){
$_SESSION['error'] = "first error message";
header('Location: index.php');
exit();
} elseif ($pinmatch == $_POST['pincode']){
$_SESSION['error'] = "second error message";
header('Location: index.php');
exit();
} else {
$_SESSION['success'] = "success message";
header('Location: pinsuccess.php');
exit();
}
}
}
$conn->close();
是HTML中的数字输入类型。
{{1}}
答案 0 :(得分:0)
逻辑上,$pincode
永远不能等于$_POST['pincode']
。请考虑以下步骤:
$_SESSION['pincode']
设置为$_POST['pincode'];
从您的数据库WHERE pincodex = '{$_SESSION['pincode']}'
此时,由于WHERE
子句,查询返回的每一行都会有pincodex == $_POST['pincode']
。
您设置$pincode = $row['pincodex'];
如果有一行,$row['pincodex']
将始终等于$_POST['pincode']
。
因此,无论类型检查如何,条件if($pincode !== $_POST['pincode']){
永远不能评估为true,并且您的代码永远不会输入if。
如果输入了数据库中未找到的密码,$sql->num_rows
将返回0,代码根本不会进入if ($row_count == 1)
块。我认为这很可能是因为您的脚本没有按预期重定向。
答案 1 :(得分:-1)
尝试将if语句更改为if($pincode !== (int)$_POST['pincode']){