php is_numeric 和 strlen return true 即使 false

php is_numeric and strlen return true even when false

我正在使用提交表单提交一个 8 位数的号码。我正在尝试使用 is_numeric 和 strlen 来确保“12345678”return 成功,但是 "adsf" 和“123”也 return 成功。我似乎无法弄清楚我缺少什么来实现这一目标。

<?php 

  if (!empty($_POST['WorkOrder']) && isset($_POST['WorkOrder'])) {

      if (!is_numeric($_POST['WorkOrder']) && (!strlen($_POST['WorkOrder']) == 8)) {

?>
                            <div class="alert alert-danger">
                            You cannot enter a blank or invalid work order number! You entered <?php echo "\"".$_POST['WorkOrder']."\""; ?>
                        </div>

<?php
  } else {
  $sql1 = "";
?>

                            <div class="alert alert-success">
                            <?php echo $_POST['WorkOrder']. " has been updated successfully!"; ?>
                        </div>

<?php

    //mysql_query($sql1) or die(mysql_error());
  } } ?>

您应该使用 OR 而不是 AND 并将 strlen 与 8 值进行比较

if (!is_numeric($_POST['WorkOrder']) || strlen($_POST['WorkOrder']) !== 8) {

您在函数前使用 !,这也可以翻译为 is not

你实际问的是:Is this variable not numeric?Is this variable not of lenghth ...

您应该使用 if (is_numeric($var) && strlen($var) == ...)

祝你好运!