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.
<?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.
Kommentare
Noch keine Kommentare — schreib den ersten.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Nichts angekommen? Wirf einen Blick in den Spam-Ordner — und markiere die Mail dort als „Kein Spam“, dann landet sie künftig direkt im Postfach.