0

我有这个用于酒店网站的表格。我需要验证房间里的人数。用户选择房间数量和每个房间的人数。我正在遍历房间并确认每个房间不超过 4 人,包括成人和儿童。

我已经完成了一切,但我正在使用的课程似乎没有在循环中工作。这就是发生的事情;如果列表上的最后一个房间与人数相符,班级将允许其将数据记录在数据库中并继续下一步。但是,它仍然会显示房间内不允许超过 4 人的错误消息。它应该做的是返回上一个表单并显示错误,让用户再次选择房间。

这是代码,因此您可以帮助我:

foreach ($_POST['adt'] as $key => $adt){
  $chd = $_POST['chd'][$key];

  $v = new validacao;
  echo $v->validarApt($chd, $adt);
  echo $v->validarQpt($qpl);
  echo $v->validarTpl($tpl);
  echo $v->validarChd($chdroom);
  echo $v->validarAdt($adt);

}

if ($v->verifica()) {

在此之后,如果经过验证,它应该记录在数据库中并继续执行代码。

这是课程:

<?

class validacao {
    var $campo;
    var $valor;
    var $msg = array();

    function mensagens($num, $campo, $max, $min) {
      $this->msg[0] = "<img src='imagens/x.jpg' /> Os apartamentos neste hotel permitem a acomodação de no máximo 4 passageiros, incluindo adultos e crianças <br />"; // apartamentos  
      $this->msg[1] = "<img src='imagens/x.jpg' /> Este hotel não possui apartamentos quádruplos, por favor selecione 2 apartamentos duplos <br />"; // apartamentos    
      $this->msg[2] = "<img src='imagens/x.jpg' /> Este hotel não possui apartamentos triplos, por favor selecione 2 apartamentos, 1 duplo e 1 single ou faça nova busca e procure por hotéis com apartamentos triplos que tenham preços divulgados em nossa tabela <br />"; // apartamentos    
      $this->msg[3] = "<img src='imagens/x.jpg' /> Este roteiro não dispõe de preços diferenciados para crianças, por favor inclua a criança como adulto <br />"; // apartamentos   
      $this->msg[4] = "<img src='imagens/x.jpg' /> Você deve incluir pelo menos 1 adulto no apartamento <br />"; // apartamentos

      return $this->msg[$num];
    }

    function validarApt($adt,$chd) {
      if ($chd + $adt >= 5) {
        return $this->mensagens(0, null, null, null);
      }
    }   

    function validarQpt($qpl) {
      if ($qpl == 0) {
        return $this->mensagens(1, null, null, null);
      }
    }   

    function validarTpl($tpl) {
      if ($tpl == 0) {
        return $this->mensagens(2, null, null, null);
      }
    }   

    function validarChd($chdroom) {
      if ($chdroom == 0) {
        return $this->mensagens(3, null, null, null);
      }
    }   

    function validarAdt($adt) {
      if ($adt == 0) { 
        return $this->mensagens(4, null, null, null);
      }
    }

    function verifica() {
      if (sizeof($this->msg) == 0) {
        return true;
      } else {
        return false;
      }
    }
  }
?>

我感谢您的帮助。谢谢!

4

1 回答 1

1

这应该会有所帮助。如果任何通过循环失败,您需要添加一个标志,该标志将是错误的,并在完成后检查。您只是在检查最后一次通过是否失败。

$verified = true;
foreach ($_POST['adt'] as $key => $adt){
  $chd = $_POST['chd'][$key];

  $v = new validacao;
  echo $v->validarApt($chd, $adt);
  echo $v->validarQpt($qpl);
  echo $v->validarTpl($tpl);
  echo $v->validarChd($chdroom);
  echo $v->validarAdt($adt);

  if(!$v->verifica()){ $verified = false; }
}

if ($verified) {
  ... //proceed with rest of code
}

您在这里也有问题:(为清楚起见,我省略了一些细节)

class validacao {
  ...
  var $msg = array();

  function mensagens($num, $campo, $max, $min) {
    $this->msg[0] = "<img src='imagens/x.jpg' /> Os apartamentos neste hotel permitem a acomodação de no máximo 4 passageiros, incluindo adultos e crianças <br />"; // apartamentos 
    $this->msg[1] = "<img src='imagens/x.jpg' /> Este hotel não possui apartamentos quádruplos, por favor selecione 2 apartamentos duplos <br />"; // apartamentos  
    ...

    return $this->msg[$num];
  }

  ...

  function verifica() {
    if (sizeof($this->msg) == 0) {
      return true;
    } else {
      return false;
    }
  }
}

后一个函数总是返回 false,因为前一个函数设置了一堆错误消息。您的每个验证函数都返回函数的结果,该结果mensagens始终是返回类的成员变量。您可能应该阅读静态函数并考虑这里的哪些函数应该是静态的,哪些是动态的,以及如何存储要返回的消息,以及这与实际失败的验证有何不同。

于 2012-05-15T16:35:40.487 回答