2017-09-16 51 views
1

我不認爲這是一個重複的選擇,我只發現了非常相似的問題。PHP - 多值不同(安全更簡單的方法)

我有4個複選框,我想,以確保它們是不同的,但我想我的「如果」是一個爛攤子。假設我有20個選擇框,那麼我會有一個無盡的「if」(option1!= option2 ... option20,它會是一個非常長的「if」)。

我怎麼能簡化這個?一個while循環或什麼?

以下是我有:

PHP檢查,然後將其保存:

if(($option1!=$option2 and $option1!=$option3 and $option1!=$option4) 
and ($option2!=$option1 and $option2!=$option3 and $option2!=$option4) 
and ($option3!=$option1 and $option3!=$option2 and $option3!=$option4) 
and ($option4!=$option1 and $option4!=$option2 and $option4!=$option3)) { 
//insert it to database if everything is okay... 

HTML:

<select name="option1"> 
<option value="">Choose one</option> 
<option value="1">Option A</option> 
<option value="2">Option B</option> 
<option value="3">Option C</option> 
<option value="4">Option D</option> 
... 
</select> 
<select name="option2"> 
<option value="">Choose one</option> 
<option value="1">Option A</option> 
<option value="2">Option B</option> 
<option value="3">Option C</option> 
<option value="4">Option D</option> 
... 
</select> 
<select name="option3"> 
<option value="">Choose one</option> 
<option value="1">Option A</option> 
<option value="2">Option B</option> 
<option value="3">Option C</option> 
<option value="4">Option D</option> 
... 
</select> 
<select name="option4"> 
<option value="">Choose one</option> 
<option value="1">Option A</option> 
<option value="2">Option B</option> 
<option value="3">Option C</option> 
<option value="4">Option D</option> 
... 
</select> 
+0

你不會完全說出你在處理所有這些狀態。在某些情況下,你可以檢查X個複選框,但是你想用狀態組合來做什麼?即一些組合意味着DB插入,另一種意味着鳴響喇叭等等。根據這個列表看起來像什麼,一種技術是創建布爾值,將其封裝以便無論您需要它。 – jdv

回答

1

如果你有20 選擇與所有下拉列表他們有時間順序name屬性,如name='option1'name='option2',...,name='option20' ,那麼你應該使用一個for循環是這樣的:

$numSelects = 20; 
$selectValues = array(); 
$differentValues = true; 
for($i = 1; $i <= $numSelects; ++$i){ 
    if(in_array($_POST['option'.$i], $selectValues)){ 
     $differentValues = false; 
     break; 
    } 
    $selectValues[] = $_POST['option'.$i]; 
} 

if($differentValues){ 
    // all the selected values are different 
}else{ 
    // selected values are not different 
} 

$numSelects是在你的代碼選擇下拉列表的數量,所以你需要修改這個值,按您的代碼。這個for循環在這裏做的是,在for循環的每次迭代中它檢查用戶的選擇值是否存在於$selectValues數組中,並且如果該數組已經存在於數組中,那麼它將禁用$differentValues標誌並從循環中跳出。而且,在每次迭代中,它都會將用戶選擇的值附加到$selectValues陣列中。退出循環後,可以根據$differentValues標誌的狀態檢查所有提交的值是否不同。

+0

不錯的一個!謝謝! – Jones

0

你可以做這樣使用array_unique(),你可以建立在它知道哪個鍵是缺少合適的地方顯示錯誤。它還允許您定義您希望檢查/計數的郵件鍵。

<?php 

$_POST = [ 
    'name' => 'Steve McQueen', 
    'csrf' => 'y53zmSV0LhhjcjEg', 
    'option1' => '1', 
    'option2' => '3', 
    'option3' => '2', 
    'option4' => '1' 
]; 

$expected = [ 
    "option1", 
    "option2", 
    "option3", 
    "option4" 
]; 

$result = []; 
foreach ($expected as $key) { 
    $result[$key] = isset($_POST[$key]) ? $_POST[$key] : null; 
} 

$check = array_unique($result); 

if (count($check) !== count($expected)) { 
    echo 'Please only select unique choices from the options'; 
} else { 
    echo 'All good!'; 
}