Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免在使用PHP的多步骤表单会话之间丢失信息?_Php_Forms - Fatal编程技术网

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

如何避免在使用PHP的多步骤表单会话之间丢失信息?,php,forms,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">

我正在使用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>

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

范例

<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>

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

header("Location: myStep2.php");
这会将用户重定向到myStep2.php,并防止值被踩踏


注意,如果您确实遵循此方法,并且需要允许用户返回到以前的页面,则需要提供导航菜单、按钮、链接等,以启用此功能。按Back(后退)将重新提交上一页的值。

我为心理学市场开发了一款产品,可进行250个基于心理学的问题测试。为了做一个不是完全压倒性的测试,我将表单分成25个问题段,然后通过附加顺序ID的div标记以循环方式输出,即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>

您正在重新填充会话中的表单控件值吗?基本上,我是在表单的第一步。工业土地办公室所以当我从下拉列表中选择一些内容并发布到Industrial.php并单击“上一步”时,我希望下拉列表中的值与前面选择的值相同。更新答案以添加您的选择和必要的代码。这是什么,HTML 4?这些天谁在标签上使用了所有的大写字母?你必须先检查isset吗?我可以填充除下拉列表以外的值。@mellamokb取决于你的php安装。如果你试图调用一个尚未设置的变量,php会给你一个通知。所以这取决于你的设置,我这样做是因为它可以跨设置工作。@AdityaShukla对于下拉列表,你必须检查选项的值是否等于你的会话值,并将所选内容添加到选项中。太棒了,这是一种非常优雅和聪明的方法。