为什么我在无效输入后获得默认输出0?

时间:2017-01-01 20:46:53

标签: php html isset is-empty

我的要求是在html表单中设置两个值,并将这些值传递给PHP文件,我将检查这些值是否已设置。如果该字段中的任何一个或两个为空,则显示无效输入。并且如果设置了值(包括0),那么它将执行一些操作,如添加操作。但问题是,如果我设置0,则将值作为空值而不是显示无效,并且在无效输入后也显示0。这是因为调用了add方法。有什么解释吗? 请任何人帮我清楚地理解它,并让我摆脱0和空检查的混乱。

我的代码在这里,

HTML:

<input type="number" name="num1"">
<input type="number" name="num2">
<input type="submit" name="add" value="+">

PHP

<?php
class calculator_oop
{
    public $num1;
    public $num2;
    public $result;
   public function __construct($number1,$number2){
       if( ((empty($number1) || empty($number2))))  {
           echo "Invalid inputs ";
       }
       else{
           $this->num1 = $number1;
           $this->num2 = $number2;
       }
   }
   public function add(){
       return $this->result = $this->num1 + $this->num2;
   }
}
$ob = new calculator_oop($_POST['num1'],$_POST['num2']);
if($_POST['add'] =='+' ){
    echo $ob-> add();
}

当我将该字段留空时,我只想知道为什么在无效输入后出现0时我将它们留空。

输出: 输入0无效

2 个答案:

答案 0 :(得分:1)

这里发生的事情是,0被认为是空的(请参阅下面的参考资料),但您也(或可能已)在输入中输入0,在PHP的眼中以及在执行时被认为是同时“非空”的,因为输入是/不是“空”,这有点争夺优先/矛盾本身在同一时间。

您想要/需要检查的是使用is_numeric()并使用另一个条件语句,而不是在第二个语句中的一个条件中查看它/它们是否为数字。

此外,您可以添加一个额外条件来检查输入是否为空,并为每个输入添加required,但不要仅依赖于此。

if( (!isset($number1,$number2 )) 
    || !is_numeric($number1) 
    || !is_numeric($number2) )  {

        echo "Invalid input ";
       }

参考文献:

注意:

编辑:在重新审视问题之后,在我写这篇文章的过程中,发现你已经发布了你的表格。

由于您没有发布您的HTML表单,因此测试时使用以下内容:

<?php

// https://stackoverflow.com/q/41418885/

class calculator_oop
{
    public $num1;
    public $num2;
    public $result;
   public function __construct($number1,$number2){
//       if( (!isset($number1,$number2 )) || (empty($number1 || $number2)))  {

  if( (!isset($number1,$number2 )) || !is_numeric($number1) || !is_numeric($number2) )  {
           echo "Invalid input ";
       }
       else{
           $this->num1 = $number1;
           $this->num2 = $number2;
       }
   }
   public function add(){
       return $this->result = $this->num1 + $this->num2;
   }
}

if(isset($_POST['submit'])){

$ob = new calculator_oop($_POST['num1'],$_POST['num2']);
if($_POST['add'] =='+' ){
    echo $ob-> add();
    }

}

?>

<form action="" method="post">

Number 1: 
<input type="text" name="num1">
<br>
Number 2: 
<input type="text" name="num2">
<br>

<input type="text" name="add" value="+" readonly>

<br>

<input type="submit" name="submit" value="Submit">

</form>

答案 1 :(得分:0)

在PHP中,以下内容被认为是空的:

  • &#34;&#34; (空字符串)
  • 0(0为整数)
  • 0.0(0作为浮动)
  • &#34; 0&#34; (0作为字符串)
  • NULL
  • FALSE
  • array()(空数组)
  • $变种; (声明的变量,但没有值)

如果你想测试零使用:

$var == 0 要么 $var == "0"

你必须明白这一点:

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

请阅读:http://php.net/manual/en/function.empty.php