php只更改了列表框

时间:2013-04-02 21:18:43

标签: php listbox

我有一个包含大量列表框的表单。提交表单后,我可以在循环中使用PHP处理所有列表框。但我正在寻找一种方法来只抓住那些已经改变的方法,因为它可以节省大量的处理时间。

我们说我有一百个列表框。他们的ids是" lb_1" ......" lb_100"。我会循环遍历它们:

foreach($_POST as $key=>$value) {
   if (substr($key,0,3)== "lb_" ) {
      ...do something...
   }
}

然而,该循环将对所有百个列表框值执行某些操作。我只想抓住那些实际发生了变化的人。

有什么想法吗?

2 个答案:

答案 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数组中的值已经可用。

感谢您的帮助。