2013-04-02 37 views
0

我有一个很多列表框的表单。提交表单后,我没有问题在PHP中循环处理所有列表框。但是我正在寻找一种方法来只抓住那些已经改变的东西,因为这会节省大量的处理时间。PHP只更改列表框

假设我有一百个列表框。他们的ID是“lb_1”...“lb_100”。我会遍历他们喜欢:但

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

这个循环会做一些与所有百倍列表框的值。我只想抓住那些已经发生变化的人。

任何想法?

+1

我认为你可以做到这一点的唯一方法是在客户端使用JavaScript来发送更改的框。 – Tushar

+0

那么,当用户访问带有所有表单元素的页面时,它们将被渲染为特定的值。这意味着您可以访问PHP中的值。所以,你不能只是从例如你的数据库,然后检查它们是否在你的$ _POST数组中提交? – hurrtz

+0

嗨,这实际上是我现在正在做的事情。我将所有列表框的值与数据库中的值进行比较,只有在不同的情况下,我才能在数据库中设置新的值。我只想保存所有比较操作。 – George

回答

0

要扩展@Tushar给出的建议,可以使用Javascript将Disabled属性设置为true,以表示任何未更改的字段。这样他们就不会在POST中存在。要知道禁用哪一个的唯一方法是存储初始值(在JS中可能为了便于比较)。然后在表单提交中,遍历字段并禁用所有未更改的字段。

document.getElementById('lb_1').disabled = true; // example of how to disable field 

我可以提供更多示例代码,如果你喜欢。

+0

嗨Revent,谢谢你的想法。我会尝试。我实际上尝试使用onchange事件来更改列表框的名称,希望只有那些名称可以被PHP循环捕获。显然$ _POST数组只包含原始名称。客户端重命名不通过。 – George

0

好,感谢您的建议,我想出了这个客户端解决方案:

我包含原始值的每个列表框之前添加一个隐藏的表单文本字段。隐藏字段和列表框用相同的唯一后缀命名,所以我知道哪一个属于哪个。

当表单通过PHP循环如下所示:

foreach($_POST as $key=>$value) { 
    if (substr($key,0,3)== "lb_") { 
     if ($_POST[hidden_name] != $value) { 
     setNewValue($value); 
     } 
    } 
} 

这是很多不是访问数据库中的每个比较快,因为值已经是$ _POST阵列中可用。

感谢您的帮助。