2014-09-19 28 views
0

我在形成兩個複選框:如何驗證使用PHP的複選框輸入?

<div class="label-input-wrapper pickup">  
     <div class="form-label">I need Airport pick-up</div> 
     <div class="form-input"> 
      <input type="checkbox" name="pick_up" value="Yes" />Yes 
      <input type="checkbox" name="pick_up" value="No" />No 
      <div class="error-msg"> 
       <?php if(isset($errors['pick_up_no'])) { echo '<span style="color: red">'.$errors['pick_up_no'].'</span>'; } ?> 
      </div> 
     </div> 
</div> 

變量保存上述複選框值:$pickup = $_POST['pick_up'];

驗證:

//Check the airport pickup and make sure that it isn't a blank/empty string. 
     if ($pickup == ""){ 
      //Blank string, add error to $errors array.   
      $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; 
     }  

     if (($pick_up = Yes) && ($pick_up = No)) { 
      //if both selected, add error to $errors array.   
      $errors['pick_up_no'] = "Can not select Yes and No together!"; 
     } 

但就打印Can not select Yes and No together!上述驗證如果兩者都沒有被選擇,或者只選擇了一個或甚至兩個都被選擇。它爲所有選擇提供相同的錯誤信息。爲什麼?

+1

使用單選按鈕? – Ghost 2014-09-19 12:30:48

+0

nop ..我只想使用複選框..我喜歡這個名字@Ghost – 2014-09-19 12:31:42

+0

你應該把值和是否作爲字符串 - 所以把它們引號! – Adimeus 2014-09-19 12:33:11

回答

2

我不知道爲什麼你需要爲這個複選框(這是單選按鈕的應該做的),但你可以做到這一點是這樣的:

if(!isset($_POST['pick_up']) || count($_POST['pick_up']) > 1) { 
    echo 'please select at least 1 choice'; 
} else { 
    echo $_POST['pick_up'][0]; 
} 

然後,讓您的複選框的名字:

name="pick_up[]" 

或者如果你確實需要單獨的錯誤信息。做這樣的事情:

$errors['pick_up_no'] = ''; 
if(!isset($_POST['pick_up'])) { 
    $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; 
} elseif(count($_POST['pick_up']) > 1) { 
    $errors['pick_up_no'] = "Can not select Yes and No together!"; // weird UX, should have prevented this with a radio button 
} 

if($errors['pick_up_no'] != '') { 
    echo $errors['pick_up_no']; 
} else { 
    echo $_POST['pick_up'][0]; 
} 
+0

我傾向於認爲這會起作用,儘管我還沒有測試過它。 OP應該給一些輸入,如果它沒有。我是對的,所以我稍後會回來告訴你,如果確實如此,我肯定會+1;)但我傾向於認爲單選按鈕是一個更可行的選項,因爲我已經注意到了在我的編輯。對於「是」和「否」的複選框沒有任何意義,恕我直言。 – 2014-09-19 13:35:24

+0

@ Fred-ii-是的,其實我在發佈前測試過,但我也同意你的觀點,這應該是一個單選按鈕,毫無疑問,這對於用戶體驗來說很奇怪,實際上選擇了yes和no – Ghost 2014-09-19 13:38:08

+1

這歸結爲一個「希望無用」的決定大聲笑 - 這是肯定**或**否。 8點接我,不要遲到哈哈! – 2014-09-19 13:40:32

1

$ _POST ['pick_up']不可能同時是yes和no,因爲名稱是pick_up而不是pick_up [] < - 指向多個變量。所以它可以是或不是兩種方式,因爲一個參數會覆蓋另一個參數。在這種情況下,您將不得不使用javascript來驗證提交之前只檢查了一個。

+0

按照這個,並將複選框'pick_up []'的名稱轉換並且像第是'(($ pick_up =='是')&&($ pick_up =='No'))' – 2014-09-19 12:40:31

+0

爲什麼我在這個問題上得到了低估。我的回答絕對正確。由於他的代碼當前是,_POST參數不可能同時包含yes和no。 – 2014-09-19 12:42:17

3

你目前有一個=標誌分配,而不是與

if (($pick_up = Yes) && ($pick_up = No)) 

比較==你需要將其更改爲

if (($pick_up == "Yes") && ($pick_up == "No")){...} 

同時爲了包裝YesNo引號內視爲一個字符串。


編輯:

最好的辦法是用單選按鈕,恕我直言。

使用複選框,同時給予用戶Yes和No選項不應該被使用;它很混亂。

應該要麼是YesORNo,而不是

<input type="radio" name="pick_up" value="Yes" />Yes 
<input type="radio" name="pick_up" value="No" />No 

這是最可行的解決方案。

+0

我已更新爲'if(($ pick_up ==「Yes」)&&($ pick_up ==「No」)){ \t \t \t //如果兩個都選中,則將錯誤添加到$ errors數組中。 \t \t \t $ errors ['pick_up_no'] =「無法選擇是和否一起!」; '(但是它只是沒有打印任何東西,如果機器人被選中的話)。 – 2014-09-19 12:42:03

+0

我用'if(($ pick_up ==「是」)||($ pick_up ==「No」))一個OR運算符@RiffazStarr或者看到Ghost的答案。 – 2014-09-19 12:43:21

+0

@RiffazStarr你在某處迴應'$ errors'嗎?只是在做'$ errors ['pick_up_no'] =「請......」沒有做任何事情,沒有任何迴音 – 2014-09-19 12:44:20

1

使用數組複選框字段元素;

<input type="checkbox" name="pick_up[]" />Yes 
<input type="checkbox" name="pick_up[]" />No 

然後在你的PHP腳本:

<?php 

$pick_ups=$_POST['pick_up']; 

$first=isset($pick_ups[0]); //true/false of first checkbox status 
$second=isset($pick_ups[1]); //true/false of second checkbox status 

?> 

再次,你已經被告知,你應該使用單選按鈕用於此目的!考慮到$ _POST不發送複選框,如果它沒有設置(檢查與isset($ _ POST ['name'])