我的要求是在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无效
答案 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中,以下内容被认为是空的:
如果你想测试零使用:
$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';
}
?>