2017-02-09 110 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)