Eingabefelder kombinieren

Commu

Grünschnabel
Hallo Zusammen,

in meinem Formular habe ich 9 mögliche Eigenschaften die ein Datensatz haben kann.

ich möchte alle 9 Felder gleichzeitig aber auch nur ein 1 oder 3 Felder abfragen können.

die Möglichkeiten die sich daraus ergeben bedeutet viel schreiben bei der Methode die ich verwende.

if (isset($_post["titel"]) && isset(["jahr"]) && ....) { // alle 9 Eigenschaften
.....
} elseif (isset($_post["titel"]) && isset(["jahr"]) && ....) { 8 x 8 Eigenschaften
....
usw
bis dann nur noch zum Schluß die einzelnen Eigenschaften prüfe.

ICh frage mich geht das nicht einfacher?

Danke für die Antworten.

Gruß Jörg
 

Sempervivum

Erfahrenes Mitglied
Was mir dazu einfällt: Zunächst die Namen in einem Array speichern. Dann die Namen abarbeiten und mit isset prüfen ob es eine POST-Variable dazu gibt. Deren Werte in einem assoz. Array mit Name als Schlüssel speichern. Gleichzeitig eine Art Signatur anlegen, d. h. einen String wo Du ein Y einträgst wenn vorhanden und ein N wenn nicht. Anschließend kannst Du die Werte der Signatur in einem Switch auswerten:
PHP:
switch($signature) {
    case 'YYNNNNNNN':
        // Mache etwas mit $values['titel] und $values['jahr']
        break;     
    case 'NYNNNNNNN':
        // Mache etwas mit $values['jahr']
        break;
    // usw.     
}
 

basti1012

Erfahrenes Mitglied
Wenn ich mir den Code von @Yaslaw anschaue,frage ich mich ob man den so kürzen kann/darf
PHP:
if(isset($_POST['submit'])){
    $wheres = array();
    foreach($_POST as $key => $val){
        if($key!='submit'){
             $wheres[] = "$key='{$val}'";
        }
    }
    if(count($wheres)>0){
        $wherestring = "WHERE ".implode(' AND ', $wheres);
        $sql = "SELECT * FROM mytable {$wherestring}";
        echo $sql;
    }
}
Da wäre die Anzahl der Formular-Felder egal , den Code bräuchte man ja nicht mehr ändern
 

Yaslaw

alter Rempler
Moderator
Das geht nur wenn alle Felder Strings sind. Zahlen sollten im SQL nicht mit '' geschrieben werden. Auch das Datum geht so nicht.
 

Sempervivum

Erfahrenes Mitglied
@Commu
Beim nächsten Mal die Frage besser etwas präziser formulieren: Dort war nicht die Rede davon, dass Du das für die where-Klausel einer Datenbankabfrage benötigst.