2013-02-15 63 views
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> 

一旦提交表單,我可以使用Filters functions之一,以確保數據是OK?我的第一個想法是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}$/'))); 
    } 
} 

有沒有簡單的方法?

回答

0

由於雙方布拉姆和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); 
+0

很高興我能帶給你正確的軌道。 – 2013-02-18 16:21:47

1

您應該已經有一個數組中可用的選項值。 只需驗證在該帖子中檢索的選項是否在數組中定義。

if (!in_array($o, $options)) { 
    //Throw some validation error here 
} 
相關問題