2013-07-13 28 views
0

我試圖顯示一個多頁面表單,它使用會話跟蹤將提交的數據從一頁保存到下一頁。 $_POST['stage']確定應該顯示哪個表單。每個表單都有一個隱藏的輸入類型,其值設置爲將$stage變量加1,但是當我從第一個表單提交數據時,$stage的值似乎保持不變,因爲我沒有看到下一個表單。會話在php.ini中啓用。在PHP中使用多頁表單的會話跟蹤

這裏是我的例子:

<?php 
session_start(); 

//Determine which integer to assign to the stage 
if (($_SERVER['REQUEST_METHOD'] == 'GET') || (!isset($_POST['stage']))) { 
    $stage = 1; 
} else { 
    $stage = (int) $_POST['stage']; 
} 

//Save any submitted data 
if ($stage > 1) { 
    foreach ($_POST as $key => $value) { 
    $_SESSION[$key] = $value; 
    } 
} 
?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>My Form Example</title> 
    </head> 
    <body> 
    <?php if ($stage == 1) { ?> 
     <form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'> 
      <label for='firstField'>First field:</label> 
      <input type='text' name='first_field /><br /> 
      <input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' /> 
      <input type='submit' value='Next' /> 
     </form> 
    <?php } else if ($stage == 2) { ?> 
     <form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'> 
      <label for='secondField'>Second field:</label> 
      <input type='text' name='second_field /<br /> 
      <input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' /> 
      <input type='hidden' value='Done' /> 
     </form> 
    <?php } ?> 
    </body> 
</html> 

回答

1

試着在你頁面的頂部添加session_start()。這是我注意到的第一件事。

+0

我有寫在我的編碼例子中,沒有結束的單引號,但它沒有顯示當我由於某種原因發佈問題時。這是我的反撥後的第一行代碼。 – Gimme5

0

我在我的工作腳本中發現了一個錯字。事後看來,我應該複製並粘貼我的整個劇本。抱歉。這個腳本工作正常(在session_start()的開頭,在我發佈問題後仍然沒有出現)。

0

既然你沒有提到什麼問題,這使我篩選和準確找到,我會提出更準確的答案。問題是在線路

<input type='text' name='first_field /><br /> 

<input type='text' name='second_field /<br /> 

所以我最後的工作腳本是

<?php 
session_start(); 
$stage = 0; 
//Determine which integer to assign to the stage 
if (!isset($_POST['stage'])) { 
    $stage = 1; 
} else { 
    $stage = (int) $_POST['stage']; 
} 

//Save any submitted data 
if ($stage > 1) { 
    foreach ($_POST as $key => $value) { 
     $_SESSION[$key] = $value; 
    } 
} 
?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>My Form Example</title> 
    </head> 
    <body> 
    <?php if ($stage == 1) { ?> 
     <form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'> 
      <label for='firstField'>First field:</label> 
      <input type='text' name='first_field' /><br /> 
      <input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' /> 
      <input type='submit' value='Next' /> 
     </form> 
    <?php } else if ($stage == 2) { ?> 
     <form action='<?php echo $_SERVER['SCRIPT_NAME'] ?>' method='post'> 
      <label for='secondField'>Second field:</label> 
      <input type='text' name='second_field' /<br /> 
      <input type='hidden' name='stage' value='<?php echo $stage + 1 ?>' /> 
      <input type='hidden' value='Done' /> 
     </form> 
    <?php } ?> 
    </body> 
</html>