2017-02-09 11 views
1

私はチェック可能なチェックボックスをいくつか持っています。彼らは今、私はFORMDATAをチェックしていると私は、データベースにそれらを見て前に私は、順番アレイ内のIDをこのようにフィルタチェックボックス名からのIDのフィルタリング

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

のように見えます。

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

もっと効率的な方法はありますか?

+0

'$ _POST ['order']'は数値ではないでしょうか? – Darren

+0

いいえ、通常の状況では数値です。これらはデータベースのIDです。誰かが可視のコードで遊んだりしようとすると、idが有効であるかどうかチェックします。 – Bernhard

+1

Hrm良い点。あなたは '$ 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) 
関連する問題