dedlfix: aktivierte checkboxen abfrage

Beitrag lesen

echo $begrüßung;

$where = "";
    foreach($POST['ger'] as $key => $val)
      $where .= " and ger".intval($key)." = 1";

Du erzeugst mit diesem Konstrukt ein überflüssiges "and" und musst das irgendwie behandeln.

$sql = "select $fieldlist from $table where true $where";

Du entscheidest dich dafür, ein "true" einzufügen, was weiter keine Aufgabe hat, als dem "and" einen Partner zu bieten.

Meine Vorgehensweise in solchen Fällen ist, die Bedingungen ohne Bindewörter zu erstellen, und sie in einem Array abzulegen. Dieses implodiere ich mit dem Bindewort als "Kleber".

$where = array();
foreach($POST['ger'] as $key => $val)
  $where .= "ger".intval($key)." = 1";

$sql = "select $fieldlist from $table where " . implode(' and ', $where);

Das ist natürlich so nur verkürzt dargestellt, denn wenn man richtig mach  will, müsste man auch noch überprüfen, ob die Spalte, die man in der Foreach-Schleife baut, überhaupt im Satzformat der Tabelle vorhanden ist. Anderenfalls bestraft Dich spätestens die SQL-Abfage mit einem Fehler-Status und einer Meldung.

Vor allem dann, wenn bei nicht numerischem $key das intval() eine 0 zurückliefert. Falls es eine Spalte ger0 gibt, ist das ein besonders hinterlistiger Fehler, der im Stillen arbeitet und "nur" zu einem falschen Abfrageergebnis führt.

echo "$verabschiedung $name";