我有一个包含大量列表框的表单。提交表单后,我可以在循环中使用PHP处理所有列表框。但我正在寻找一种方法来只抓住那些已经改变的方法,因为它可以节省大量的处理时间。
我们说我有一百个列表框。他们的ids是" lb_1" ......" lb_100"。我会循环遍历它们:
foreach($_POST as $key=>$value) {
if (substr($key,0,3)== "lb_" ) {
...do something...
}
}
然而,该循环将对所有百个列表框值执行某些操作。我只想抓住那些实际发生了变化的人。
有什么想法吗?
答案 0 :(得分:0)
为了扩展@Tushar提供的建议,您可以使用Javascript为任何未更改的字段将Disabled属性设置为true。这样他们就不会在POST中存在。你知道哪些禁用的唯一方法是存储初始值(在JS中可能是为了便于比较)。然后在表单提交上,遍历字段并禁用所有未更改的字段。
document.getElementById('lb_1').disabled = true; // example of how to disable field
如果您愿意,我可以提供更多示例代码。
答案 1 :(得分:0)
好的,感谢您的提示,我想出了这个客户端解决方案:
我在每个包含原始值的列表框之前添加了一个隐藏的表单文本字段。隐藏字段和列表框用同一个唯一后缀命名,因此我知道哪一个属于哪个。
传递表单时,PHP循环如下所示:
foreach($_POST as $key=>$value) {
if (substr($key,0,3)== "lb_" ) {
if ($_POST[hidden_name] != $value) {
setNewValue($value);
}
}
}
这比每次比较访问数据库要快得多,因为$ _POST数组中的值已经可用。
感谢您的帮助。