Array wert und bestimmten key durchsuchen
Emanuel
- php
0 Emanuel
Hallo Leute!
Hab ein Array, das $_POST array in welchem Formulardaten stehen.
Es gibt im Formular mehrere Auswahllisten mit den Werten 0-9.
Standardmäßig ist 0 ausgewählt, 0 darf auch öfters vorkommen - klar.
Wenn 1-9 ausgewählt wird, dann darf der Wert nur einmal vorkommen, also darf nicht zweimal 1 ausgewählt und abgeschickt werden, selbiges gilt von 2-9.
Es gibt aber im Formular auch Inputfelder, die 1-9 und andere Werte beinhalten dürfen.
Wenn ich nun mit PHP das $_POST array checke, dann muss zwischen dem Wert der Auswahllisten und den anderen Elementen unterschieden werden, damit die Überprüfung auf doppelte Werte richtig funktioniert.
Dazu habe ich zunächst die Auswahllisten mit einem spezifischen Namen versehen, uzw. enden alle Namen mit "_column".
Mein PHP Teil sieht daweil so aus:
foreach($_POST as $key => $val){
//überprüfen ob ein Wert doppelt ausgewählt wurde
if(substr($key, -7) == "_column" && in_array($val, $_POST)){
$errormsgs = 'Der Wert <b>'.$val.'</b> wurde mehrfach ausgewählt! Bitte überprüfe noch einmal deine Eingabe!';
break;
}
}
Jo und da gibts schon das Problem...
if(substr($key, -7) == "_column" && in_array($val, $_POST))
der zweite Teil (in_array) passt nicht, weil $val im ganzen $_POST array gesucht wird und nicht nur die Werte der "_column" keys... wie gebe ich jetzt an, dass nur die Werte der Keys die mit "_column" enden ohne eine weitere Schleife durchsucht werden sollen? Gibts da eine PHP Funktion die ich verwenden kann? Oder gibts prinzipiell eine einfachere Möglichkeit das zu lösen?
Danke für die Hilfe!
MfG Emanuel
Nachtrag:
Ich habe es inzwischen so gelöst, die Frage ist nur ob das die einzige Möglichkeit ist oder es eine einfachere, kürzere und schnellere Variante gibt?
$errormsg = '';
foreach($_POST as $key => $val){
if(substr($key, -7) == "_column"){
$same_values = array_keys($_POST, $val);
foreach($same_values as $a => $b){
if(substr($b, -7) == "_column" && $b != $key){
$errormsg = 'Der Wert <b>'.$val.'</b> wurde mehrfach ausgewählt! Bitte überprüfe noch einmal deine Eingabe!';
break;
}
}
if($errormsg)
break;
}
}
MfG Emanuel