我需要使用 PHP/MySQL 创建一个非常广泛的表单,其中包含大量条件逻辑,最终以提交到 MySQL 数据库结束。所以基本上用户使用单选按钮做出他们的第一选择(必须是因为他们正在“选择”图片),然后根据该提交被带到表单的下一个“页面”。该提交还必须存储在会话或 cookie 中,因为在表单结束时,我将收集他们的所有输入并在数据库中填充一行。我的方法应该是什么?现在我正在编写将 POST 数据存储在 SESSION 中的表单,然后在最后填充数据库行,但是一旦我在页面之间引入条件逻辑,会话就会中断并且不会被发送。任何帮助将不胜感激。
3 回答
我正是用 250 个问题的心理测试系统做到了这一点。一旦你想通了,这并不难。我使用的解决方案是在堆叠的 div 中输出,而不是担心单独的页面和发布到会话——它更干净。提交按钮存在于每个 div 上,但它只提交最后一个 - 一个函数显示下一个 div 并在单击每个其他“页面”时隐藏当前 div。使用变量和 PHP 数学,我可以将测试设置为不同的组合——例如 250 页的 1 页、50 页的 5 页等。您最困难的逻辑是构建具有适当数量问题的页面并制作确保 div 有效地命名为与您的显示/隐藏脚本一起使用。就我而言,我使用 Jquery 的显示/隐藏功能。奇迹般有效。
由于此解决方案使用一页,因此您不必担心值在来回时被“遗忘”。就我而言,我什至不允许用户返回,因为我没有给他们任何用户界面来这样做。向后点击浏览器会给他们一个警告,告诉他们他们将离开该页面。但是,您可以使用几种不同的方法让它们返回,包括按钮等 UI,或使用浏览器的返回按钮设置返回功能。一个巨大的附带好处是加载几乎没有,页面更改对用户来说是即时的。
听起来像一个经典的“向导”界面。一个快速的谷歌搜索提出了这一点,但我不确定它是否有任何好处。
在向导结束时将所有数据保存到单个更新的优点是简单。在每一步之后写入数据库的好处是用户可以在以后返回并完成向导 - 您不会被当前用户会话所束缚。
如果您倾向于使用“在末尾插入”的方法,我建议您使用 bpeterson76 的想法,即使用 JS 显示/隐藏单个物理表单上的部分 - 只要确保您可以控制用户的后退按钮,否则用户可能会丢失所有答案。