Ich las einst in grauer Vorzeit in einem Forum einen Thread namens Code Horrors, wo die Mitglieder – allesamt Nerds der Oberklasse – davon berichteten, was ihre unfähigen Kollegen so für horrenden Programmcode verbrechen. Ich fand das teilweise nicht unlustig und dachte ich mir, das kann ich auch. Es folgen drei Beispiele, über die ich in jüngster Zeit gestolpert bin.

$foo[$bar[$bla[$blub]][$gna[$wtf][$unf][$foo]][$bar]]

Ich habe mal jemanden angeheuert, der mir ein Script zur Verarbeitung von Formulardaten gebaut hat. Das ist das das Herzstück seines Werks:

for($x=0;$x<count($_POST['option']);$x++)
{
  if(is_array($_POST['option'][$keysx[$x]]))
  {
    $keysy = array_keys($_POST['option'][$keysx[$x]]);
    $body = $body.$inhalt['linestart_part'].$fieldnames[$keysx[$x]][0].$inhalt['lineend_part'];
    for($y=0; $y<count($_POST['option'][$keysx[$x]]); $y++)
    {
      if(!$_POST['option'][$keysx[$x]][$keysy[$y]])
        break;
      if(is_array($_POST['option'][$keysx[$x]][$keysy[$y]]))
      {
        $keysz = array_keys($_POST['option'][$keysx[$x]][$keysy[$y]]);
        for($z=0; $z<count($_POST['option'][$keysx[$x]][$keysy[$y]]); $z++)
        {
          if(!$_POST['option'][$keysx[$x]][$keysy[$y]][$keysz[$z]])
            break;
          if(is_array($fieldnames[$keysx[$x]][$keysy[$y]][$keysz[$z]]))
            $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]][$keysy[$y]][$keysz[$z]][$_POST['option'][$keysx[$x]][$keysy[$y]][$keysz[$z]]].$inhalt['linemid_value'].''.$inhalt['lineend_value'];
          else
            $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]][$keysy[$y]][$keysz[$z]].$inhalt['linemid_value'].$_POST['option'][$keysx[$x]][$keysy[$y]][$keysz[$z]].$inhalt['lineend_value'];
        }
      }
      else
      {
        if(is_array($fieldnames[$keysx[$x]][$keysy[$y]]))
          $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]][$keysy[$y]][$_POST['option'][$keysx[$x]][$keysy[$y]]].$inhalt['linemid_value'].''.$inhalt['lineend_value'];
        else
          $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]][$keysy[$y]].$inhalt['linemid_value'].$_POST['option'][$keysx[$x]][$keysy[$y]].$inhalt['lineend_value'];
      }
    }
  }
  else
  {
    if(is_array($fieldnames[$keysx[$x]]))
      $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]][$_POST['option'][$keysx[$x]]].$inhalt['linemid_value'].''.$inhalt['lineend_value'];
    else
      $body = $body.$inhalt['linestart_value'].$fieldnames[$keysx[$x]].$inhalt['linemid_value'].$_POST['option'][$keysx[$x]].$inhalt['lineend_value'];
  }
}

Hier etwas übersichtlicher.

Mir ist relativ rätselhaft was da vor sich geht und richtig verständlich machen konnte es mir der Verantwortliche auch nicht. Aber zugegebenermaßen funktioniert es … wenn auch nicht in Form eines Plugins oder einer Funktion! Nein, wir fügen einfach irgendwo im CMS-Core ein Include für die Datei mit dem obrigen Code ein, so dass der gesendete Formularinhalt abgefangen und verarbeitet werden kann. Seitdem nagele ich Programmierer vertraglich auf gewisse Mindeststandards fest.

Das Bild vom FTP-Server

Ein Kollege fragte mich mal, wie es denn sein könnte, dass in der Seite eines seiner Kunden plötzlich viele Iframes und Javascript-Blöcke sitzen, die er da sicher nicht eingebaut hatte. Diese Zusätze waren eindeutig das Werk von Crackern, die sich wohl erhofften, ein paar Passwörter oder ähnliches abzugreifen. Nur wie kam der Code in die Seite beziehungsweise in die Template-Daten? Ich muss zugeben, dass es ganz schön lange gedauert hat, bis ich in einer anderen Datei das hier fand:

<img alt="Neues Angebot 2008 - 2009"
src="ftp://webuser4194808:r4987E12ue@kunden-website.net/pics/Neu_August_2008/IMG_6204.JPG">

Das hatte da sein Kunde da eingefügt.

Doppelt und geXMLt hält besser

Ich habe eine MODx-Website von jemandem geerbt, der ganz offenbar meinte, er wüsste besser als die MODx-Entwickler wie man ein CMS aufzieht. Warum er dann trotzdem MODx als Basis für seine Seite benutzte, entzieht sich meiner Kenntnis. Jedenfalls ist die Tabelle modx_site_content leer. Wir reden hier von einer zweisprachigen Website mit ca. 100 Unterseiten.

Die Inhalte befinden sich in der Tabelle docs mit 448 Datensätzen. Wir reden hier immer noch von einer Website mit insgesamt ca. 100 Unterseiten. Die Tabelle enthält neben der ID eine Spalte namens docId und einer Spalte namens Inhalt. Diese beinhaltet den Inhalt in beiden Sprachen, und zwar in Form von XML-Daten. Und dann gibt es noch die Tabelle lang. Die enthält ebenfalls die Inhalte, genau die gleichen, allerdings nicht in einer Spalte als XML sondern anständig in zwei Spalten, getrennt nach Sprachen. Verknüpft werden beide Tabellen über die docId.

Warum das so ist, weiß ich nicht mit Sicherheit. Ich nehme meistens an, dass die XML-Dateien den von meinem Vorgänger eigens für das CMS programmierten WYSIWYG-Editor befüllen, während die normalen Daten das CMS füttern. An dem Editor ist außerdem interessant, dass dessen Javascript im Whitesmiths-Stil gehalten ist. Ich arbeite seit Herbst letzten Jahres mit der Seite, repariere alle paar Wochen Dinge oder baue Erweiterungen ein. Ich habe bis heute nur eine vage Vorstellung davon, wo die anderen Daten der Seiten (Titel, Elterndokument etc.) gespeichert sind.

Falls Ihr auch ein paar unterhaltsame Beispiele für anderer Leute Code habt, raus damit! Mehrzeiligen Code bitte irgendwohin auslagern (hier hin z.B.), weil in den Kommentaren <pre> nicht funktioniert und unformatiert doof ist.