如何使用PHP避免在多步骤表单的会话之间丢失信息?

时间:2011-02-21 21:08:13

标签: php forms

我正在使用php和会话创建一个多步骤表单,但是,当我来回走动时,我会丢失之前的值。任何解决此问题的建议。

<form id="propertyform" method="post" action="industrial.php">
    <select class="element select small" id="element_1" name="property">
        <option value="" selected="selected"></option>
        <option value="industrial" >Industrial</option>
        <option value="land" >Land</option>
        <option value="office" >Office</option>
    </select>
</form>

3 个答案:

答案 0 :(得分:3)

我为心理学市场开发了一个产品,可以进行250个问题的心理测试。为了进行一个不完全压倒性的测试,我将表格分成25个问题段,同时通过div标签输出它,并附加一个顺序ID(即div1,div2,div3)每个div设置为显示:没有,只有第一个。

然后我为用户提供了一个切换当前div + 1的按钮(即如果在div 1上,它会执行$(#div2).show()等。后退按钮则相反。

重要的是表格涵盖所有div。然后只需用提交按钮交换最后的前进/后退按钮即可。

瞧!是的,低技术。但是很快......并且没有机会永远失去前进或后退的价值。

所以,一个粗略的截断示例:

<form>
  <div id="div1">
     First 25 Questions
     <input type="button">shows next div</input>
  </div>
  <div id="div2" style="display:none">
    Second 25 Questions
    <input type="submit">Submit Form</input>
  </div>
</form>

答案 1 :(得分:1)

您是否在会话中设置表单中的值?

实施例

<form id="step1">
     <input type="text" name="firstQuestion" id="firstQuestion" 
        <? if(isset($_SESSION['firstQuestion'])): ?> value="<?=$_SESSION['firstQuestion']?>" 
        <? endif; ?> >

     <select class="element select small" id="element_1" name="property"> 
          <option value="" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == ""): ?> selected="selected"<? endif; ?> ></option> 
          <option value="industrial" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "industrial"): ?> selected="selected"<? endif; ?>>Industrial</option> 
          <option value="land" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "land"): ?> selected="selected"<? endif; ?>>Land</option> 
          <option value="office" <?php if(isset($_SESSION['property']) && $_SESSION['property'] == "office"): ?> selected="selected"<? endif; ?>>Office</option>
     </select>
</form>

答案 2 :(得分:0)

要防止刷新和历史记录导航触发表单处理,请在表单处理程序完成之后向流添加类似内容:

header("Location: myStep2.php");

这会将用户重定向到myStep2.php并防止踩踏值。

需要注意的是,如果您按照此方法操作并且需要允许用户返回上一页,则需要提供导航菜单,按钮,链接等。按“返回”将重新提交上一页的值。