2013-10-12 50 views
0

所以基本上我正在做的是生成一個簡單的表單來接受一個數字。基於這個數字,我使用與這些輸入表單關聯的新提交按鈕生成一個平等的文本輸入法線。問題是我需要跟上原始數量的表單作爲索引值傳遞給我想要存儲新組文本輸入值的數組。但是當我提交新表單時,價值一直在下降。以下是我的代碼如下。爲什麼我在同一頁面上提交第二個表單時保持丟失變量值

注意:我已經註釋掉了我試圖存儲文本輸入值的算法,只是試圖回顯表單的值數量而沒有這個值會阻止我進入我的for循環,我想存儲這些值。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<head> 
    <title>Kid Order Selector</title> 
</head> 
<body> 
    <form action="kid_selector.php" method="post"> 
     Enter number of kids playing:<input type="text" name="num_kids" /><input type="submit" name="submit" value="Submit" /> 
    </form> 
    <br /><br /> 
    <form action="kid_selector.php" method="post"> 
     <?php 

      if(isset($_POST["num_kids"])) { 
       $num_kids = $_POST["num_kids"]; 
       echo "Enter the following kids names:<br />"; 
       for($i = 1; $i <= $num_kids; $i++) { 
        echo "<input type=\"text\" name=\"kid{$i}\" /><br />"; 
        $index = $i; 
       } 

       if($num_kids == $index) { 
        echo "<input type=\"submit\" name=\"submit\" value=\"Submit\" />"; 
       } 

       $numkids = $num_kids; 
      } else { 
       $num_kids = ""; 
      } 
     ?> 

     <?php 

      //$kids = array(); 
      echo $numkids; 

      if(isset($_POST["kid1"])) { 
       echo "Success"; 
       for($i=0; $i < $numkids; $i++) { 
        // $index = $i + 1; 
        //$pos = "kid{$index}"; 
        //echo $pos; 
        //$kids[$i] = $_POST[$pos]; 
        echo "Success"; 
       } 

       //print_r($kids); 
      } 
     ?>  


    </form> 


</body> 
</html> 

回答

1

當我提交了新的形式,價值持續下降

是的,這會發生。 PHP腳本的每個請求都以新變量開始。數據不會被記住,除非您將其存儲在持久存儲位置,例如在session storage等數據庫,文件,cookie中。

要保留num_kids值,可以將其作爲第二個窗體的隱藏輸入:

if(isset($_POST["num_kids"])) { 
    $num_kids = $_POST["num_kids"]; 
    echo '<input type=hidden name=num_kids value=' . $num_kids . '>'; 

然後,當提交第二個表單時,您可以從$ _POST第二次讀取該值。

執行表單的另一種方法是使用數組變量作爲輸入名稱。所以:

echo "Enter the following kids names:<br />"; 
echo str_repeat('<input name="kids[]"><br />', $num_kids); 

那麼第二個表單提交時,你可以直接從$ _ POST閱讀陣列,而無需使用一個循環來構建它。

if (isset($_POST['kids'])) { 
    echo 'Success.<br />'; 
    print_r($_POST['kids']); 
} 

然後,如果您需要num_kids值,它是count($_POST['kids'])

+0

我喜歡你提到的第一個解決方案的解決方案2。雖然我遇到了一些實現str_repeat的錯誤,所以我查看了PHP.net文檔,發現你列出的參數是相反的。它應該被設置爲如下所示:string str_repeat(string $ input,int $ multiplier) –

+0

@EricMayfield是的,你說得很對。現在修復。 – Boann

相關問題