2017-01-01 67 views
-2

我的要求是在HTML表單中設置兩個值,並將這些值傳遞給PHP文件,我將檢查這些值是否設置。如果任何一個或兩個字段是空白的,它將顯示無效的輸入。如果設置了值(包括0),則會執行一些操作,如添加操作。但問題是,如果設置爲0,則將值作爲空值顯示爲無效,並且在無效輸入後顯示0。這是因爲添加方法被稱爲。任何解釋? 任何人都可以幫助我理解它,也可以讓我擺脫0和空檢查的困惑。爲什麼我在無效輸入後得到默認輸出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

+1

請添加您的代碼作爲文本格式和圖像刪除! –

+0

http://php.net/manual/en/function.error-reporting.php –

+0

你應該也可以爲此發佈html表單。如果沒有,請參閱下面給出的答案。 –

回答

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> 
+0

兄弟我拿你的代碼,但它沒有完全滿足要求。請檢查了這一點,如果我空白所有領域比它顯示無效輸入,但在無效輸入後有一個額外的0。請檢查一下。其他明智的答案是非常有幫助的。 :) –

0

在PHP中,下面的東西被認爲是空的:

  • 「」(空字符串)
  • 0(0作爲整數)
  • 0.0(作爲浮點數)
  • 「0」(0作爲字符串)
  • NULL
  • FALSE
  • 陣列()(空數組)
  • $變種; (變量聲明,但沒有一個值)

,如果你想測試零使用:

$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

相關問題