2017-02-09 108 views
1

我有一些可以选中的复选框。它们看起来像从复选框名称筛选ID

<input type="checkbox" name="order[123]" value="1"> 

现在我检查FORMDATA和我这样过滤ID的订单阵中,之前我在数据库中查找此人。

$orderids = preg_grep('/^\d+$/', array_keys($_POST['order'])); 

有没有更有效的方法来做到这一点?

+0

请问'$ _POST ['order']'不是数值吗? – Darren

+0

不,在正常情况下它是数字。这些是来自数据库的ids。但是如果有人试图使用可见代码进行游戏,我会检查ID是否有效。 – Bernhard

+1

有点好。你确实有'$ orderids = array_filter(array_keys($ _ POST ['order']),'is_numeric');'如果你愿意,但是你所做的似乎并不太贵。 – Darren

回答

0

使用正则表达式,确保不使用恶意字符串,但不检查数据库中的可行性。 (例如,order[999999999999999999999999]会通过正则表达式,但在db中没有用。)

最真实的验证是使用array_intersect针对数据库传播的ID运行它们。

$valid_ids=array_intersect(array_keys($_POST['order']),$db_orderids_array)