2017-09-16 4 views
1

Ich glaube nicht, dass dies ein Duplikat ist, fand ich nur ziemlich ähnliche Fragen.php - mehrere wählen mit unterschiedlichen Werten (Sicherheit einfacher Methode)

Ich habe 4 Checkboxen und ich möchte sicherstellen, dass sie unterschiedlich sind, aber ich denke, mein "wenn" ist ein Durcheinander. Stellen wir uns vor, ich hätte 20 Auswahlfelder, dann hätte ich ein endloses "Wenn" (Option1! = Option2 ... Option20, es wäre ein wirklich langes "Wenn").

Wie kann ich das vereinfachen? Eine While-Schleife oder so? Hier

ist, was ich habe:

PHP es überprüfen, dann speichern Sie es:

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

Sie sagen nicht genau, was Sie mit all diesen Zuständen machen. Sie haben X Checkboxen, die Sie in einigen Fällen überprüfen können, aber was sind all die Dinge, die Sie mit den Kombinationen von Zuständen _do_ haben möchten? d. h. einige Combos bedeuten einen DB-Einschub, ein anderer bedeutet hupen eines Horns usw. Je nach dem, wie diese Liste aussieht, besteht eine Technik darin, Booleans zu erzeugen, die diese für die Verwendung kapseln, wo immer Sie sie brauchen. – jdv

Antwort

1

Wenn Sie 20 wählen Dropdown-Listen mit allen Sie haben name Attribute in chronologischer Reihenfolge, wie name='option1', name='option2', ..., name='option20' , Dann sollten Sie eine for Schleife wie folgt verwenden:

$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 die Anzahl der wählen Dropdown-Listen in Ihrem Code, so dass Sie diesen Wert zu ändern, wie pro Ihren Code benötigen. Und was diese for Schleife hier tut, ist in jeder Iteration von for Schleife überprüft, ob der Benutzer ausgewählten Wert existiert in $selectValues Array oder nicht, und wenn der Wert bereits im Array existiert dann wird $differentValues Flag deaktivieren und aus der Schleife ausbrechen . Außerdem fügt es in jeder Iteration den ausgewählten Wert des Benutzers an $selectValues Array an. Nachdem Sie die Schleife verlassen haben, können Sie anhand des Status $differentValues überprüfen, ob alle übermittelten Werte unterschiedlich sind oder nicht.

+0

Nice one! Vielen Dank! – Jones

0

Sie könnten es mit array_unique() tun, könnten Sie darauf aufbauen, um zu wissen, welcher Schlüssel fehlt, um einen Fehler an der richtigen Stelle anzuzeigen. Sie können auch definieren, welche Post-Schlüssel Sie erwarten zu prüfen/zählen.

<?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!'; 
} 
Verwandte Themen