2012-01-11 48 views
0

希望我能讓這個更加困難。這是我想要做的。我有一個表單執行POST並返回數據。我有第二種形式,然後根據第一種形式的數據向用戶提出是/否的問題。是否有可能從第一個表單提交中捕獲POST數據並將它與第二個表單POST一起傳遞?我可以從第二個表格提交併保留第一個表格的POST數據嗎?

這裏是我的方案

if ($_POST['button_1']) { 
    $params = $_POST; 
    print_r($_POST); 

    // process form data 
} 
if ($_POST['button_2']) { 
    // Retain the POST data from the first submission 
    $new_params = $params . $_POST; 
    print_r($new_params); 

    // process form data and do some additional stuff 
} 

<form id="form_1" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
... 
<input type="submit" value="Button" name="button_1" id="button_1"/> 
</form> 

<form id="form_2" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
... 
<input type="submit" value="Button" name="button_2" id="button_2"/> 
</form> 

有沒有辦法做到這一點很容易還是我在這個複雜?

+0

爲什麼不將第一個POST保存到會話變量? – djot 2012-01-11 01:23:19

+0

爲什麼我總是忘記SESSION變量?這將工作,謝謝! – Paul 2012-01-11 01:34:44

回答

0

有幾種方法可以「僞造」這一點。

  1. 有第一種形式提交給自身和公正加載$ _REQUEST變量並使用它們用適當的數據/選項來填充第二種形式。

  2. 有第二種形式通過ajax加載,一旦第一次被提交併使用JavaScript抓取當前表單變量並將它們提供給ajax函數。

你更喜歡哪種方法?

UPDATE: 這是漫長的,但工作示例

<!DOCTYPE html> 
<html> 
    <body> 
     <form name="first" method="post"> 
      <input type="hidden" name="action" value="firstformdone"> 
      <div style="width:100px;float:left;"> 
       Age: 
      </div> 
      <div style="width:200px;float:left;margin-left:20px;"> 
      <input type="text" name="age"> 
      </div> 
      <div style="clear:both;"></div> 
      <div style="width:100px;float:left;"> 
       Name: 
      </div> 
      <div style="width:200px;float:left;margin-left:20px;"> 
      <input type="text" name="name"> 
      </div> 
      <div style="clear:both;"></div> 
      <br> 
      <?PHP 
       if (!$_REQUEST['action'] == "firstformdone") { 
      ?> 
      <input type="submit" value="contine"> 
      <?PHP 
       } 
      ?> 
     </form> 
     <?PHP 
      if ($_REQUEST['action'] == "firstformdone") { 
     ?> 
     <form name="second" action="something_else.php" method="post"> 
      <input type="hidden" name="age" value="<?PHP echo $_REQUEST['age']; ?>"> 
      <input type="hidden" name="name" value="<?PHP echo $_REQUEST['name']; ?>"> 
      <div style="width:150px;float:left;"> 
       Preferred games: 
      </div> 
      <div style="width:200px;float:left;margin-left:20px;"> 
       <select name="games"> 
        <option value="">Select games</option> 
        <?PHP 
         if ($_REQUEST['age'] <= 10) { 
        ?> 
        <option value="tlddlywinks">Tiddly Winks</option> 
        <option value="Jacks">Jacks</option> 
        <option value="Go-Fish">Go-Fish</option> 
        <option value="Hid-And-Go-Seek">Hid-And-Go-Seek</option> 
        <?PHP 
         } else { 
        ?> 
        <option value="Halo">Halo</option> 
        <option value="StarWars">The Old Republic</option> 
        <option value="LaserTag">Laser Tag</option> 
        <option value="spin-the-bottle">spin-the-bottle</option> 
        <?PHP 
         } 
        ?> 
       </select> 
      </div> 
      <div style="clear:both;"></div> 
      <br> 
      <input type="submit" value="Next!"> 
     </form> 
     <?PHP 
      } 
     ?> 
    </body> 
</html> 
+0

我想現在遠離ajax,所以也許我會嘗試第一種方法。 – Paul 2012-01-11 01:34:17

+0

在這種情況下,您可以讓第二個表單在您提交第一個表單前不在場。也許如果($ _ REQUEST){構建第二表單)或者相似 – Silvertiger 2012-01-11 02:07:07

+0

並且是的,如果您有很多表單元素,請使用@mario中的文章構建所有隱藏字段:) – Silvertiger 2012-01-11 02:24:54

0

您需要從第一種形式了重新提交數據打包。使用隱藏字段:

foreach ($_POST as $key=>$value) { 
    print "<input type='hidden' name='".htmlspecialchars($key, ENT_QUOTES, "UTF-8")." value='".htmlspecialchars($value, ENT_QUOTES, "UTF-8")."'>"; 
} 
0

是的,標準的方法是使用類型=「隱藏」字段於此上下文數據傳遞到第二形式。有很多有效的例子來看看如何做到這一點。查看此HTML頁面的源代碼或任何其他的表單,並搜索「隱藏」以查看應用程序如何執行此操作。

相關問題