Ein Leser namens Charles schickte The Daily WTF einen PHP-Block von über 400 Zeilen, anonymisiert zum Schutz der Beteiligten. Charles ist der einzige IT-Mensch in seiner Firma und brauchte ein Ventil. Editor Remy Porter half aus.

booking_options.php
<?php
$resm_data = $data_source->fetchData("group=" . $item_id);
foreach ($resm_data as $key => $value) {
    $option_id = $value->option_id;
    $resm_details = $detail_source->fetch($option_id);
    if ($resm_details) {
        $label = $resm_details->{"label$lang"};
        $category = $resm_details->category;
        if ($category == 0) {
            $cost = $resm_details->{"cost" . $currency};
            $cost_info = $mot[101] . " : +" . number_format($cost, 2, ",", " ") . $currency_symbol;
        }
    }
}

Der Code baut ein Buchungsformular. Er beginnt mit $data_source->fetchData("group=" . $item_id), einer als String zusammengeklebten Filterbedingung, die je nach darunterliegender Library nach SQL-Injection riecht. Die Lokalisierung läuft über dynamische Property-Namen: $resm_details->{"label$lang"} liefert labelen oder labelde, Preise kommen aus {"cost" . $currency}, für Extra-Tarife gelegentlich mit den Suffixen _1 und _2.

Eine sechsteilige if/elseif-Kette auf einem category-Feld formatiert danach Preise mit number_format($cost, 2, ",", " ") und zieht UI-Texte aus einem rätselhaften $mot-Array an magischen Indizes wie 101, 102, 200, 300 und 500. HTML wird per String-Konkatenation gebaut, inklusive eines Quantity-Inputs mit fest verdrahtetem min="1" max="1". Abfahrts- und Ankunftszeiten liegen als JSON-Strings in der Datenbank und werden pro Zeile dekodiert.

Alles landet über $TEMPLATE->SET_BLOCK_VARIABLES("Block_OPTIONS", [...]) mit 18 Schlüsseln im Template. Dann taucht der gesamte Block ein zweites Mal für Kind-Datensätze auf, jede Variable mit dem Präfix child_. Und ein drittes Mal für Geschwister-Datensätze, geholt per fetchData("parent=" . $parent_option_id) und gerendert in denselben Block "Block_OPTIONS.Block_OPTIONS_CHILD".

Porter schließt mit dem Wunsch, der Autor möge eines Tages Funktionen entdecken.