为什么不';我的PHP错误消息是否正常工作?

为什么不';我的PHP错误消息是否正常工作?,php,Php,我正在创建一个购买成人和儿童门票的基本表单。按照表单的设置方式,用户必须购买成人票,但不需要购买儿童票。我添加了一些错误消息/验证,以在表单中强制执行规则。所有成人票证错误消息都正常工作,但儿童票证错误消息工作不正常 我希望子票据规则检查以下内容:是否输入了有效的数字(即不是字母),数量是否大于0,以及是否输入了整数。我想我已经设置了规则,所以他们只在子票证输入不为空时才开始验证,但相反,他们仍在尝试验证子票证输入是否为空,考虑到不需要购买子票证,我不希望这样做。我如何让它正常工作 这是我的PH

我正在创建一个购买成人和儿童门票的基本表单。按照表单的设置方式,用户必须购买成人票,但不需要购买儿童票。我添加了一些错误消息/验证,以在表单中强制执行规则。所有成人票证错误消息都正常工作,但儿童票证错误消息工作不正常

我希望子票据规则检查以下内容:是否输入了有效的数字(即不是字母),数量是否大于0,以及是否输入了整数。我想我已经设置了规则,所以他们只在子票证输入不为空时才开始验证,但相反,他们仍在尝试验证子票证输入是否为空,考虑到不需要购买子票证,我不希望这样做。我如何让它正常工作

这是我的PHP代码和错误消息

<?php
  $adult=$_POST['adult'];
  $child=$_POST['child'];
  $date=date('m/d/Y');

  function isInteger($input) {
    return(ctype_digit(strval($input)));
  }
  if (empty($adult)) {
    $error_message='You must purchase at least 1 Adult ticket!';
  }
  else if (!is_numeric($adult)) {
    $error_message="You must enter a valid number!";
  }
  else if ($adult <= 0) {
    $error_message="You must enter a quantity greater than zero!";
  }
  else if (!isInteger($adult)) {
    $error_message="You must enter a whole number for the quantity! (i.e. 1, 2, etc...)";
  }
  else if (!empty(!is_numeric($child))) {
    $error_message="You must enter a valid number!";
  }
  else if (!empty($child <= 0)) {
    $error_message="You must enter a quantity greater than zero!";
  }
  else if (!empty(!isInteger($child))) {
    $error_message="You must enter a whole number for the quantity! (i.e. 1, 2, etc...)";
  }
  else if ($adult + $child > 5) {
    $error_message="Sorry, there is a limit of 5 total tickets per customer!";
  }
 else {
$error_message='';
  }
  if($error_message !=""){
    include('index.php');
    exit();
  }
?>

如果
$child=1


如果(!empty($child没有寻找一个可接受的答案,只想建议一个更实用的方法

PHP有一些非常强大的用于验证的内置函数。可以使用的两个函数是和,它们可以轻松地将数值验证为整数,而无需检查整数的每个变化

此外,我建议使用
throw
立即引发需要处理的异常,而不是将几个
elseif
条件链接起来,否则将在该点停止执行。在
try/catch
块中,根据需要处理异常

例子 对于PHP<7.0,请替换

$_POST['child']) ?? null


你想在这里做什么?
!empty($child@mrid)我的理解是,该语句(以及类似的其他语句)的基本意思是……“如果$child不是空的并且小于0”然后将执行错误消息。我不希望为$child执行错误消息,除非它不是空的,因为您应该使用
isset()
。这将告诉您表单是否提交了该变量,或者您是否还想测试
$\u POST
值的
数组键存在()
isset()
或在PHP7.0+空联合运算符
$child=$\u POST['child']?null
以防止
未定义索引
错误,然后再将其分配给变量。我不知道您需要什么,但根据您的逻辑,如果有成人,它不会检查儿童,因为您正在检查
else
部分中的儿童
$_POST['child']) ?? null
isset($_POST['child']) ? $_POST['child'] : null