在没有javascript的情况下将项目的多个部分添加到表单中?

时间:2011-03-05 03:26:06

标签: php javascript forms

谢谢大家。(出于某种原因,我无法对答案进行投票,所以今天每个人都获胜:]再次感谢!)


在这里完成php和javascript新手,为任何半傻的事先道歉。

我有一部分用户的个人资料,我希望用户能够添加相同内容的其他项目,条件略有不同。

例如,让我们说它是最喜欢的书。字段集包含一些类型的复选框和一个书籍标题的输入文本框。在用户检查流派并填写标题后,他们可以将书籍添加到他们喜爱的书籍集中,然后可以选择添加另一本书。完成添加书籍后,他们会转到下一个字段集,填写表单并提交。

这是怎么做到的?更重要的是,没有javascript可以吗?

没有JS,我理解这可能需要大量重新加载页面才能添加项目,无论我在提交之前和之后对$ _POST数据的处理方式都比较困惑。

很抱歉这样一个开放式的问题,真的只是想找个人指出我正确的方向,因为搜索这个话题有点困难。

感谢。

一些澄清 我正在尝试开发一个尽可能独立于javascript的应用程序。从这个意义上讲,我不知道是否可以单独使用PHP添加新项目。我的感觉是有问题的字段集可能有它自己的提交按钮,POSTS对页面本身的动作(没有数据库交互等),以及$ book_genre1,$ book_title1等变量填充在页面中。然后,稍后发送“官方”提交,实际上将包含books数组的POST数据添加到DB。但我不知道这是否是一个安全的程序或良好的逻辑开始。

4 个答案:

答案 0 :(得分:1)

在回答上述答案时,如果这正是你所需要的,因为我似乎有不同的想法。

您只需将每个添加内容存储在一个存储在会话变量中的数组中,并在每个页面加载中将数据解析为可读的html。

$_SESSION['form'][] = serialized_form_data; 

在每次加载时,

foreach ($_SESSION['form'] as $form) {
    unserialize_data_and_create_html(); 
}

add_new_form_element();

我假设您想要向用户显示已填写的表单,以便他可以按照自己的意愿处理这些表单。

这比我之前想到的更好。我想实现db版本。

抱歉延误。我不能评论,因为我是移动(js问题)所以我决定编辑。

您只需使用$_SESSION['form']插入即可。

简单的foreach也可以使用。但是,请记住在插入之前正确清理每个值。这是关键。

如果使用带有绑定的预准备语句,则可以获得干净的输入以及更好的数据库性能。

答案 1 :(得分:0)

您真正要问的是如何在同一表单的POST之间保留信息。最常见和有效的方法是只使用表单上的输入。如果您有不应显示的信息,请使用隐藏的输入元素。

请注意,以这种形式存储信息不被认为是安全的,因为它可以被操纵和/或伪造,因此下一个选项是将其存储在会话中;因为它只是服务器端,所以需要保护cookie /会话ID。然后,在POST发生后,可以在PHP中从会话中检索这些值。

答案 2 :(得分:0)

在提交表单之前......没有可处理的数据。提交表单后,数据将以数组的形式发送到服务器。

(来自php.net/manual/en/reserved.variables.post.php):

  

$ _ POST =“通过HTTP POST方法传递给当前脚本的关联变量数组。”

因此用户将一些数据提交给服务器。现在您的脚本可以使用这些数据:填充数据库,在执行“x”之前验证值,将HTML写入客户端等。

我喜欢@frosty采用他的方法。它确实可能向服务器发送多个请求,但它也是一种非常直接的方法。一个完全服务器端的解决方案。

JavaScript或jQuery Library允许您完成类似的结果,并只发布一次服务器 - 只需隐藏/显示填充的字段,动态地将其他字段写入表单(例如:完成“book#1”之后)用户可以单击“添加另一个”,JS编写一组相同的表单字段,所有表单字段都参考书#2)。显然,这种方法比直接的PHP方法更容易参与。如果您希望允许禁用JS的用户参与,则需要备份计划。

答案 3 :(得分:-1)

我建议您使用javascript来处理用户添加多个项目。查看jQuery(http://www.jquery.com)这是一个很棒的JavaScript库,可以帮助你做很多很棒的动态。

然后,一旦您获得了用户的所有信息,只需将其一次全部发送到您的php并保存即可。有关访问和使用$ _POST或$ _REQUEST的信息,您需要查看一些PHP教程或拿起一本书。这是相当基本的PHP内容,而且这个主题的主题太大了。