【问题标题】:Edit a CodeIgniter + AJAX multi-part form by showing all inputs to be changed通过显示所有要更改的输入来编辑 CodeIgniter + AJAX 多部分表单
【发布时间】:2013-02-24 13:33:22
【问题描述】:
概述
这是我第一次使用 CodeIgniter 创建复杂的多部分表单。
我有一个依赖 AJAX Post 提交的 CodeIgniter 多部分表单(使用 jQuery Form Plugin)。我在成功验证用户后预览表单,以检查他们的答案是否一切正常。他们可以通过提交到数据库按钮或编辑表单按钮将其提交到数据库,然后返回并更改他们想要检查的任何内容,然后循环再次开始!
问题
我的多部分表单具有文件输入和动态添加的 DOM 元素(例如,用户可以声明多个地址,因此将通过 JavaScript 添加四个文本框),我希望这些是完整的编辑被点击。
我有几种攻击方法,但目前都没有:
-
模拟浏览器的后退按钮 - 看起来很有效,但我记得我的控制器的
index() 会加载新的表单视图,所以它没用。
-
从预览表单中取出所有数据,放入一个数组中,将数组带到
index(),统计动态添加元素的出现次数,然后全部显示 - 这个很漂亮对我来说乏味而复杂。另外,我不确定将所有 $_POST 数据传送到数组中是否安全,但这是我能想到的最好的。
你们有什么建议或更好的方法来攻击这种过程吗?
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签:
php
javascript
ajax
forms
codeigniter
【解决方案1】:
您可能需要根据您的第二个选项实施解决方案 - 是的,这很乏味,但没有其他方法可以做到这一点。需要记住的一些事情:
您需要想出一种简洁的方式来存储您的数据。地址应存储为一个数组元素,如下所示:
<input type="text" name="addresses[1][street]">
<input type="text" name="addresses[1][city]">
<input type="text" name="addresses[1][county]">
这将允许您简洁地迭代您的数据结构以进行前端演示:
<? foreach ($data['addresses'] as $number => $address): ?>
<? foreach ($address as $address_item => $value): ?>
<input type="text" name="addresses[<?=$number?>][<?=$address_item?>]" value="<?=$value?>">
<? endforeach; ?>
<? endforeach; ?>
这将提供对您的布局的完全控制,减少您必须用于存储 DOM 的 JavaScript 数量(这不是那么快速或高效)。