为什么我在无效输入后得到默认输出 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';
}
?>
这里发生的事情是,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 ";
}
参考文献:
- http://php.net/empty
- In php, is 0 treated as empty?
注意:
编辑:在重新审视这个问题之后,在我写这篇文章的时候,注意到你已经 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>
我的要求是在 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';
}
?>
这里发生的事情是,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 ";
}
参考文献:
- http://php.net/empty
- In php, is 0 treated as empty?
注意:
编辑:在重新审视这个问题之后,在我写这篇文章的时候,注意到你已经 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>