2015-09-27 27 views
2

HTML和PHP都是全新的,因此原諒我可能是一個基本問題。僅HTML/PHP複選框值僅返回「開」

此代碼適用於通過電子郵件發送某些用戶輸入的骨架HTML/PHP表單。我一直在尋找很多小時來解決這個問題,但是我一直無法獲得解決方案。

我試圖找到一種方法來存儲複選框值(即第一,第二)的實際字符串,而不是讓PHP代碼返回「On」時檢查框中的任何複選框的布爾值。

這裏有以下相關代碼:

形式:

<form action="formhandle.php" method="post"> 

<div class="row"> 
    <label>Choose</label> 
    <input name="samplecheck[]" type="checkbox" value="First"><label>Checkbox 1</label> 
    <input name="samplecheck[]" type="checkbox" value="Second"><label>Checkbox 2</label> 
</div> 

</form> 

處理方法1:

$value = $_POST['samplecheck']; 

for($i=0; $i < count($value); $i++){ 
    $box .= "Checked : " . $value[$i] . "\n"; 
} 

處理方法2:

foreach($_POST['samplecheck'] as $value) { 
    $box .= "Checked: $value \n"; 
} 

我知道有有限的驗證但那我現在不擔心。這兩種處理方法都「有效」,因爲它們可以正確識別複選框值爲「On」或「Off」時,但它們只會返回「On」,而我不知道如何返回值的實際字符串。

在任何情況下,如果兩個複選框被選中,我會得到這個輸出爲$箱:

經過:在 經過:在

我在做什麼錯?它是否曾經應該返回?如果是這樣,我該如何區分每個數組項?

+0

請您澄清一下:**但他們只會回到「開」**? –

+0

就像我在問題描述中所說的那樣,$ value變量在複選框被選中時存儲「On」,而不是實際值* string * names(First,Second)。 – plateheld

+0

另外爲了澄清,輸出是「開」,全部小寫,而不是「開」。我的錯。 – plateheld

回答

0

感謝CBOE:

on是送價值對於沒有設置值屬性的複選框。檢查您的HTML代碼是否存在錯誤 - 很可能您在那裏寫了錯誤的內容,以便解析器無法識別value屬性。驗證你的HTML總是一個好主意 - 驗證器.w3.org「

在我的情況下,這是我的錯,因爲沒有包含更完整的代碼片段,我的複選框與我的收音機共享相同的行,並簡單地將它們放置在不同的行允許複選框值正常工作:

錯誤代碼:

<div class="row"> 
     <div class="large-6 medium-6 columns"> 
      <label>Choose</label> 
      <input type="radio" name="rad_choices" value="Red" id="rad_id1"><label for="rad_id1">Radio 1</label> 
      <input type="radio" name="rad_choices" value="Blue" id="rad_id2"><label for="rad_id2">Radio 2</label> 
     </div> 
     <div class="large-6 medium-6 columns"> 
      <label>Choose</label> 
      <input name="samplecheck[]" type="checkbox" value="First" id="check_id1"><label for="check_id1">Checkbox 1</label> 
      <input name="samplecheck[]" type="checkbox" value="Second" id="check_id2"><label for="check_id2">Checkbox 2</label> 
     </div> 
    </div> 

好的代碼:

<div class="row"> 
     <div class="large-6 medium-6 columns"> 
      <label>Choose</label> 
      <input type="radio" name="rad_choices" value="Red" id="rad_id1"><label for="rad_id1">Radio 1</label> 
      <input type="radio" name="rad_choices" value="Blue" id="rad_id2"><label for="rad_id2">Radio 2</label> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="large-6 medium-6 columns"> 
      <label>Choose</label> 
      <input name="samplecheck[]" type="checkbox" value="First" id="check_id1"><label for="check_id1">Checkbox 1</label> 
      <input name="samplecheck[]" type="checkbox" value="Second" id="check_id2"><label for="check_id2">Checkbox 2</label> 
     </div> 
    </div> 

他們爲什麼不能放在同一排,我不知道。這可能是由於我看不到我的代碼的另一個問題,但這對我的目的來說是一個適當的解決方案。對於任何具有類似用途的人,只需檢查您的代碼是否有任何會影響其識別或存儲複選框值的功能。

2

當我在我的服務器上測試您的示例時,我收到了期望值。所以,我會爲您提供我的代碼,這樣你就可以對其進行編輯以滿足您的需求

<form action="" method="post"> 
<div class="row"> 
    <label>Choose</label> 
    <input name="samplecheck[]" type="checkbox" value="First"><label>Checkbox 1</label> 
    <input name="samplecheck[]" type="checkbox" value="Second"><label>Checkbox 2</label> 
</div> 
<input type='submit'> 
</form> 

<?php 
if(!empty($_POST)){ 
    $box = ''; 
    foreach($_POST['samplecheck'] as &$value) { 
     $box .= "Checked: $value \n"; 
    } 
    echo $box; 
} 
?> 

「我收到預期值」的價值觀沒有收到哪個? - 佩德羅洛比託」

要回答這個問題

如果我不選擇任何複選框,我沒有收到輸出。

如果我選擇了「第一」複選框,我收到文本

經過:一是

如果我選擇「第二個」複選框,我收到文本

經過:Second

如果我選擇「Sec OND「複選框,如果我選擇了‘第一’複選框,我收到文本

檢查:先檢查:第二

+0

**「我收到了預期值」 **該值沒有收到? –

+0

我用你的PHP代碼,但仍收到的回波輸出「經過:在經過:上」。任何關於這裏發生了什麼的想法? – plateheld

+0

不幸的是,這不能根據您提供的代碼進行復制。請隨時將我的代碼粘貼到http://phpfiddle.org/的codespace部分。 – Jesse