dedlfix: mehr details anzeigen

Beitrag lesen

echo $begrüßung;

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/export/www/vhosts/funnetwork/hosting/steffenb/phplernen/details.php on line 32

Lass mich raten, Zeile 32 ist diese:

$abfrage = "SELECT * FROM links WHERE $_GET['id']";

Denn die passt zur Fehlermeldung. Komplexe Variablenausdrücke innerhalb von ""-String müssen in {} engefasst werden.

$abfrage = "SELECT * FROM links WHERE {$_GET['id']}";
  // hier fehlt aber noch etwas. vielleicht ein "id="? WHERE id={$_GET...

Desweiteren ignorierst du völlig die Möglichkeit, dass bei der Datenbankabfrage etwas schief gelaufen sein könnte.

$abfrage = "SELECT * FROM links";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))

mysql_query() (und die meisten anderen mysql-Funktionen auch) liefert in dem Fall keine Ressourcenkennung sondern ein false zurück. Der Wortlaut der Fehlermeldung wird von mysql_error() zurückgegeben. Die nachfolgenden MySQL-Funktionen (hier mysql_fetch_object) mögen aber dieses false gar nicht, weswegen sich PHP mit einer Fehlermeldung beschwert.

Benutzereingaben sollten auch nicht ungeprüft/unbehandelt in SQL-Statements eingebaut werden. Das führt entweder zu Fehlern oder zu SQL-Injection. Dagegen hat man unter PHP zwar die Magic Quotes erfunden, doch die arbeiten viel zu allgmein, wenn es um MySQL geht. Deswegen sollte man dieses Feature deaktivieren oder seine Auswirkungen rückgängig machen (siehe: Disabling Magic Quotes) und die zur Datenbank passende Maskierung verwenden, was im Falle MySQL mysql_real_escape_string() ist.

Im Falle der id ist sicherlich nur ein numerischer Wert erlaubt. Dies kann man mit intval($_GET['id']) sicherstellen. Ansonsten stellt es für MySQL kein Problem dar, auch numerische Werte in SQL-Statements in Anführungszeichen zu erkennen. Zusammen mit mysql_real_escape_string() wird auch in dem Fall eine SQL-Injection unterbunden.

echo "$verabschiedung $name";