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

why i get an default output 0 after the invalid inputs?

我的要求是在 html 表单中设置两个值,并将这些值传递到 PHP 文件中,我将在其中检查是否设置了这些值 set.If 任何一个或两个字段为空白,而不是显示无效输入。如果设置了值(包括 0),它会执行一些操作,例如添加 operation.But 问题是,如果我设置 0,它将值作为空值,而不是显示无效,并且在无效输入后也显示 0 .这是因为添加方法是 called.any 解释吗? 请任何人帮助我清楚地理解它,并使我摆脱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

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

  • ""(空字符串)
  • 0(整数 0)
  • 0.0(0 作为浮点数)
  • "0"(0 作为字符串)
  • 错误
  • 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

这里发生的事情是,0 被认为是空的(请参阅下面的参考资料),但您也(或可能已经)在输入(s)中输入了 0 ), 在 PHP 的眼中和在执行时,它同时被视为 "not empty",因为输入 was/were 没有离开 "empty" 同时也在为 precedence/contradicting 本身而战。

你 want/need 要检查的是 it/they is/are 是否是数字,方法是使用 is_numeric() 并使用另一个条件语句,而不是在一个条件中第二个声明。

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

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

        echo "Invalid input ";
       }

参考文献:

注意:

编辑:在重新审视这个问题之后,在我写这篇文章的时候,注意到你已经 post 编辑了你的表格。

由于您没有 post 您的 HTML 表格,这是经过测试的以下内容:

<?php

// 

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>