php如果条件未按预期评估

时间:2016-04-18 14:25:46

标签: php

我有这个脚本。一切都很好,除了第一个" 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}}

2 个答案:

答案 0 :(得分:0)

逻辑上,$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']

  4. 因此,无论类型检查如何,条件if($pincode !== $_POST['pincode']){永远不能评估为true,并且您的代码永远不会输入if。

    如果输入了数据库中未找到的密码,$sql->num_rows将返回0,代码根本不会进入if ($row_count == 1)块。我认为这很可能是因为您的脚本没有按预期重定向。

答案 1 :(得分:-1)

尝试将if语句更改为if($pincode !== (int)$_POST['pincode']){