Vinzenz Mai: GD-Bib: Erzeugen von Bild klappt nur offline, nicht online

Beitrag lesen

Hallo,

Noch mal die Frage: Gibt es das Bild-generierende Script mal online zu sehen?

$query = "SELECT ";
            foreach( $fields as $var ) $query .= "u.".$var.", ";
            for( $i=0; $i<count( $fields )-1; $i++ ) $query .= "tu.".$fields[$i]." as tu_".$fields[$i].", ";
$query .=   "tu.".$fields[ $i ]." as tu_".$fields[$i]."
            FROM m_user as u LEFT JOIN m_temp_user as tu ON ( u.ownerno = tu.ownerno AND ( tu.status = "data_change" OR tu.status = "registered" ) )
            WHERE u.ownerno = "".$_SESSION[ "ownerno" ].""
            ORDER BY tu.applied DESC;";

es ist überhaupt keine gute Idee, Zeichenketten in SQL-Statements in doppelte Anführungszeichen zu packen. Nicht nur, dass die meisten SQL-Dialekte das sowieso nicht erlauben, bei MySQL ist die Verwendung abhängig vom Modus, in dem MySQL läuft. Ist der ANSI-Mode aktiv, dann ist die Verwendung nicht erlaubt, siehe Handbuchabschnitt Strings. Somit kann der gleiche Code auf Server A laufen und auf Server B nicht.

Es ist hingegen eine gute Idee, Zeichenketten in SQL-Statements *immer* in einfache Anführungszeichen einzuschließen. Das ist *immer* erlaubt. Es ist auch viel einfacher: man muss nicht nachdenken, welche man verwendet.

Zusätzlich ist es eine hervorragende Idee, alle Daten aus variablen Quellen - wie hier der Session - immer kontextgemäß aufzubereiten. Bei Dir wäre dies die Aufbereitung mit mysql_real_escape_string. Zuvor gilt es die berüchtigten Magic Quotes richtig zu behandeln, d.h. auszuschalten bzw. ihre Auswirkungen rückgängig zu machen. Es ist viel einfacher, diese Behandlung *immer* vorzunehmen, weil man nicht zu überlegen braucht, ob man vielleicht darauf verzichten könnte. Somit gibt es auch nie den Fall, dass man auf die Behandlung verzichtet hat, obwohl sie erforderlich gewesen wäre.

$temp = mysql_query( $query );
$result = mysql_fetch_array( $temp, MYSQL_ASSOC );

Hier fehlt eine Fehlerbehandlung komplett. Du nimmst an, dass es nicht zu Fehlern kommt. Es gibt keinen Anlass, so optimistisch zu sein.

$query = "SELECT name, regnumber FROM stallions WHERE ownerno = "".$_SESSION[ "ownerno" ]."" AND paid REGEXP DATE_FORMAT( CURDATE(), "%y" );";

ist REGEXP wirklich nötig? Es gibt YEAR().

Wie ich es mir gedacht habe, wäre es sehr leicht, Datenbeschaffung und Bilderzeugung zu trennen. Ein nettes assoziatives Array als Übergabeparameter für die Bilderzeugungsfunktion täte es auch. Somit wäre Debugging viel viel einfacher. Ich rate Dir dringend dazu, Deinen Code in dieser Hinsicht zu verbessern.

Freundliche Grüße

Vinzenz