0

私はこのフォームを持っているとしましょう:

<form method="post">
  <select name="s[]" multiple="multiple">
    <option value="12345678">One</option>
    <option value="a7e6b65e">Two</option>
    <option value="ad2445f7">Three</option>
    <option value="998d64fe">Four</option>
  </select>
  <input type="submit" value="GO">
</form>

フォームが送信されたら、フィルター機能の 1 つを使用して、データに問題がないことを確認できますか? と最初に思ったfilter_input_arrayのですが、それだけではないと思います。

私が見る唯一の方法は、最初に配列があるかどうかを確認してから、値を循環させることです。

$s_clean = array();
if (isset($_POST['s']) && is_array($_POST['s'])) {
  foreach ($_POST['s'] as $o) {
    $s_clean[] = filter_var($o, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^[0-9a-f]{8}$/')));
  }
}

もっと簡単な方法はありますか?

4

3 に答える 3

1

配列で使用可能なすべての可能なオプション値が既にあるはずです。ポストで取得されたオプションが配列で定義されているかどうかを検証するだけです。

if (!in_array($o, $options)) {
    //Throw some validation error here
}
于 2013-02-15T21:43:08.890 に答える
1

はい、array_filter を参照してください: http://php.net/manual/en/function.array-filter.php

PHP 5.4では、次のことができます

$s=$_POST['s']; 
if (!$s || !is_array($s) 
   $s=array();
else 
   $s=array_filter($s, function ($value)  { return preg_match('/regex/',$value); });  
于 2013-02-15T21:43:37.813 に答える
0

Bram と b7kich の両方に感謝します。フィルター関数がここで役立つとは思えないため、使用するソリューションの一部をそれぞれ提供してくれました。

可能な値のリストを持つというアイデアは素晴らしいです (doh!)。array_*私が見つけた関数を見ると、 array_intersect「有効な」値以外が除外されます。

$valid = array('12345678','a7e6b65e','ad24d5f7','998d64fe');
if (!isset($_POST['s']) || !($s = $_POST['s']) || !is_array($s))
  $s_clean = array();
else 
  $s_clean = array_intersect($s, $valid);
于 2013-02-18T13:27:59.960 に答える