我有这个脚本。一切都很好,除了第一个"if"条件没有按预期计算,因为它没有回显证明它计算正确的代码。我有一个页面(index.php),其中包含一个带有post-action的表单,$_POST['pincode']
来自该表单。因此,当if($pincode !== $_POST['pincode'])
计算为true时,它将路由到我的checkpin.php(这个脚本)并停留在那里,而不是返回错误消息并返回到index.php页面的头位置。注意:$_POST['pincode']
是HTML中的数字输入类型。
$_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();
从逻辑上讲,$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块。
如果输入的pincode在数据库中找不到,$sql->num_rows
将返回0,并且该代码根本不会进入if ($row_count == 1)
块。我认为这很可能是你的脚本没有按预期重定向的原因。
尝试将if语句更改为if($pincode !== (int)$_POST['pincode']){