php如果条件未按预期进行评估


php if condition not evaluating as expected

我有这个脚本。一切都很好,除了第一个"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']。考虑以下步骤:

  1. $_SESSION['pincode']设置为$_POST['pincode'];
  2. 从数据库WHERE pincodex = '{$_SESSION['pincode']}' 中选择行

    此时,由于WHERE子句,查询返回的每一行都将具有pincodex == $_POST['pincode']

  3. 您设置了$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']){