1unitedpower: PHP Funktion mit unbekannten Werten

Beitrag lesen

Ich würde die Filter-Logik von PHP komplett nach MySQL verfrachten.

Du kannst in der WHERE-Klausel ausdrücken, dass du nur nach einem Namen filtern willst, wenn auch wirklich ein Name angebgen wurde. Das sähe dann so aus WHERE (? IS NULL OR name = ?). Bei bind_param müsstest du dann beide ? durch $name ersetzen lassen. Wenn $name === null ist, dann wird die Klausel zu WHERE (NULL IS NULL OR name = NULL), das heißt die Bedingung ist immer wahr und es wird kein Datensatz gefiltert. Wenn $name === 'Biff' ist, dann wird die Klausel zu WHERE ('Biff' IS NULL OR name = 'Biff') und der Filter ist aktiv. Der Filter lässt sich dann auch einfach kombinieren:

function zeiterfassung($mysqli, $name = null, $projektnummer = null, $datum_von = null, $datum_bis = null) {
    $select = "
        SELECT id, code, projektnummer, name, datum, betreff, anzStunden, jahr, monat, tag
        FROM zeiterfassung
        WHERE (? IS NULL OR name = ?)
        AND   (? IS NULL OR projektnummer = ?)
        AND   (? IS NULL OR datum_von >= ?)
        AND   (? IS NULL OR datum_bis <= ?)";
    
    $query = $mysqli->prepare($select);
    $query->bind_param(
        'ssssiiii',
        $name, $name,
        $projektnummer, $projektnummer,
        $datum_von, $datum_von,
        $datum_bis, $datum_bis
    );
    // …
}