2012-01-12 113 views
1

對不起,愚蠢的問題,雖然我有點新的PHP。 我已經嘗試了很多其他的方式來做到這一點,但根本無法得到這個工作...其實我想它使我可以有不同的功能附加到每個複選框,當用戶選擇一個複選框或其他,點擊提交按鈕,它會觸發特定的功能。但我無法使複選框正常工作。它或者只能選擇一個,或者如果我檢查第一個,然後是第四個,它會輸出第四個代碼。 還有其他的方法嗎? 這裏是我的嘗試:PHP如果語句複選框錯誤

1.PHP

<form method="POST" action="2.php"> 
<input type="checkbox" name="test[]" value="test1" />test1<br /> 
<input type="checkbox" name="test[]" value="test2" />test2<br /> 
<input type="submit" name="submit" value="submit" /> 
</form> 

2.PHP

$val = $_POST['test']; 
if(isset($val)==true){ 
    for($i = 0 ; $i<count($val) ; $i++){ 
     if($val=='test1'){ 
      echo $val; 
      die(); 
     }elseif($val=='test2'){ 
      echo $val; 
      die(); 
     }else{ 
      echo "fail"; 
      die(); 
     } 
    } 
}else{ 
    return false; 
} 

謝謝。

+1

您可以使用縮進來重新格式化您的代碼嗎?真的有助於可讀性。Thx – paislee 2012-01-12 19:36:31

+1

* tes2 *應該是* test2 * – 2012-01-12 19:37:57

+0

啊,沒有看到。完成。 – 2012-01-12 20:12:07

回答

1

你已經非常接近你的代碼了,你只需要考慮數組索引。

+0

如果我在foreach中回顯複選框以輸出數組中的值的數量會怎麼樣?這會導致類似的情況嗎?因爲在這一個中,我只有一個elseif。 – 2012-01-12 19:56:12

+0

您的print_r語句爲false。值是複選框的有效屬性。發佈的數組將僅包含已選框的值,並且不會爲未檢查的元素包含空的「佔位符」。 – keithhatfield 2012-01-12 20:02:30

+0

啊,非常感謝。現在我看到發生了什麼:) – 2012-01-12 20:11:37

1

嘗試:

$vals = $_POST['test']; 
$valsCount = count($vals); 

if ($valsCount > 0) { 

    foreach ($vals as $val) { 

     switch ($val) { 

      case 'test1': 
       echo $val; 
       break; 

      case 'test2': 
       echo $val; 
       break; 

      default: 
       echo 'Fail'; 
       break; 
     } 
    } 
} 
+0

哦,謝謝!我以前從未想過使用「case」功能。 – 2012-01-12 19:58:14

0

嘗試改變名稱從test1[]test1在1.PHP並檢查錯字上線7 2.PHP。

希望這會有所幫助。

0

有一對夫婦的,可能沒有什麼關係的真正問題的問題:

1)請您談一下「1」和「4」複選框......但你的代碼只顯示了兩個複選框

2)你舉的例子拼錯 「TES2」(所以PHP不會/不能找到它)

3)你或許應該擺脫所有的 「死()」 條款

建議:

看看這個鏈接:

http://www.html-form-guide.com/php-form/php-form-checkbox.html

+0

那麼我的原始代碼在循環數組的同時有兩個以上的複選框。 我看到了這個錯字,但是在修復它的時候,仍然出現了,我也檢查過,試過了,無法正常工作。它兩次輸出相同的東西。對於多個複選框。 – 2012-01-12 19:46:21

1

作爲另一種選擇,如果你正在尋找調用基於複選框的價值功能,你可以做這樣的事情...

我爲簡單起見,我將它壓縮到一個文件中,但這是一般想法...

<form method="post" action="<?php echo $_SREVER['PHP_SELF']; ?>"> 
    <input type="checkbox" name="boxes[]" value="box1">Box 1</input><br /> 
    <input type="checkbox" name="boxes[]" value="box2">Box 2</input><br /> 
    <input type="checkbox" name="boxes[]" value="box3">Box 3</input><br /> 
    <input type="checkbox" name="boxes[]" value="box4">Box 4</input><br /> 
    <input type="checkbox" name="boxes[]" value="box5">Box 5</input><br /> 
    <input type="submit" value="Go!" /> 
</form> 
<?php 

    class boxProcessor 
    { 
     public function box1() 
     { 
      echo "<p>You've found box 1.</p>"; 
     } 

     public function box2() 
     { 
      echo "<p>You've found box 2.</p>"; 
     } 

     public function box3() 
     { 
      echo "<p>You've found box 3.</p>"; 
     } 

     public function box4() 
     { 
      echo "<p>You've found box 4.</p>"; 
     } 

     public function box5() 
     { 
      echo "<p>You've found box 5.</p>"; 
     } 

    } 

    if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
     $boxes = $_POST['boxes']; 

     if(empty($boxes)){ 
      echo "<p>Nothing to do ...</p>"; 
     } else { 
      $proc = new boxProcessor(); 

      foreach($boxes as $box){ 
       $proc->$box(); 
      } 
     } 
    } 
?>