2014-09-11 90 views
1

enter image description herePHP - 帶陣列的單選按鈕

默認值是第一個單選按鈕。
輸出如下:1 => Y,2 => N,3 => N
好的,沒問題。

現在我的問題是,我想單擊第三個單選按鈕。
預期的輸出是這樣的:1 => N,2 => N,3 =>ý
但我的輸出是這樣的:1 => N,2 => Y,3 =>ý
第二個應是N,沒有Y.

這裏是我的代碼:

<html> 
<body> 
    <form action="test.php" method="post"> 
    <?php 
    $defaultkey = array("Y","N","N"); 

    for($i = 1; $i <= count($defaultkey); $i++) 
    { 
    ?> 
     <input type="radio" name="choice" value="<?php echo $defaultkey[$i-1]; ?>"><?php echo $defaultkey[$i-1];?><br />  
    <?php 
    } 
    ?> 
     <input type="submit" name="submit" value="OK" /> 
    </form> 
</body> 
</html> 

<?php 
if(isset($_POST['submit'])) 
{ 
    if($_POST['choice']=="Y") 
    { 
     for($j = 1; $j <=count($defaultkey); $j++) 
     { 
      echo ($j). '=>' .$defaultkey[$j-1]. '<br />'; 
     } 
    } 
    else if($_POST['choice']=="N") 
    { 
     for($k = 1; $k <=count($defaultkey); $k++) 
     { 
      if($_POST['choice']==$defaultkey[$k-1]) 
      { 
       $defaultkey[$k-1] = "Y"; 
       echo ($k). '=>' .$defaultkey[$k-1]. '<br />'; 
      } 
      else 
      { 
       $defaultkey[$k-1] = "N"; 
       echo ($k). '=>' .$defaultkey[$k-1]. '<br />'; 
      } 
     } 
    } 
} 

我應該如何解決呢?

+0

當你選擇中間的'N'時會發生什麼,那麼順序是什麼? – Ghost 2014-09-11 03:27:56

回答

1

您應該知道Web表單數據的工作方式。您當前的單選按鈕:

<input type="radio" name="choice" value="Y">Y 
<input type="radio" name="choice" value="N">N 
<input type="radio" name="choice" value="N">N 

所以你不能找出哪個單選按鈕是選擇(1,2,或3)。嘗試改變他們的價值:

<?php 
    $defaultkey = array("Y","N","N"); 

    for($i = 1; $i <= count($defaultkey); $i++) 
    { 
    ?> 
     <input type="radio" name="choice" value="<?php echo $i; ?>"><?php echo $defaultkey[$i-1];?><br />  

    <?php 
    } 
?> 

能產生這樣的:

<input type="radio" name="choice" value="1">Y 
<input type="radio" name="choice" value="2">N 
<input type="radio" name="choice" value="3">N 

而在你提交:

<?php 
    if(isset($_POST['submit'])) { 
     for ($i = 1; $i <= count($defaultkey); $i++) { 
      echo $i . ' => ' . ($_POST['choice'] == $i ? 'Y' : 'N') . '<br />'; 
     } 
    } 
?> 
+0

謝謝,ROX。我從你身上學到了很多東西。 – user3905044 2014-09-11 03:50:47

0

的問題是:

for($k = 1; $k <=count($defaultkey); $k++) 
     { 
      if($_POST['choice']==$defaultkey[$k-1]) 
      { 
       $defaultkey[$k-1] = "Y"; 
       echo ($k). '=>' .$defaultkey[$k-1]. '<br />'; 
      } 
      else 
      { 
       $defaultkey[$k-1] = "N"; 
       echo ($k). '=>' .$defaultkey[$k-1]. '<br />'; 
      } 
     } 

當你檢查最後一個單選按鈕時,你的選擇是N.你的第二個項目在defaultkey數組中也是N,所以當你循環時,$ _POST ['choice'] == $ defaultkey [1]將在它到達$ defaultkey [2]之前返回true。

你必須重寫你的PHP邏輯,我不太明白你想在你的代碼中實現什麼,所以我不能告訴你如何重寫。

+0

好的,我重寫了代碼。 – user3905044 2014-09-11 04:03:38

+0

您可以使用@ROX建議的方法或使用輸入數組(http://php.net/manual/en/faq.html.php#faq.html.arrays)。 這個問題沒有固定的答案,你必須知道所有可能的選擇,並選擇一個更適合你現在的情況。 – Godzilla 2014-09-11 04:07:40