echo $begrüßung;
Ok, verstanden, aber dann muss ich die Verbindung nochmals neu öffnen wenn ich zur Datenbankabfrage (und dem Auslesen der Tabelle), da die Verbindung nur aufgebaut wird, wenn die Eingaben geprüft und behandelt wurden (und fehlerfrei sind), richtig? Das Auslesen soll ja aber in jedem Fall geschen.
OK, wenn du auf alle Fälle eine DB-Verbindung brauchst, dann kannst du sie auch ohne die Abhängigkeit von der Prüfung (sprich: am Scriptanfang) öffnen. Dann solltest du aber die Prüfung auf erfolgreiche Verbindung gleich beim Eröffnen einbauen.
» Außerdem ist es besser, statt das Script sterben zu lassen und dabei noch alle Welt mit technischen Details zu behelligen, wenn du im Fehlerfall einen alternativen Weg gehst (if-else) und damit zum einen das Script ordentlich beendest und zum anderen die Fehlermeldung nur an den Administrator leitest.
Das versteh ich nicht. Wie soll man das script denn ordentlich beenden?
Meinst Du zum Beispiel anstelle des die() eine neue variable in das error-array schreiben und ausgeben lassen?
Ordentlich beenden heißt, dass man auch im Fehlerfall ein vollständiges HTML-Dokument an den Client ausgibt. Die technischen Details der Fehlerursache sind nicht für den Anwender bestimmt. Für den ist es besser, eine Alternative anzubieten, damit er doch noch zu seinem Ziel kommt und nicht zur Konkurrenz rennt.
» Hier fehlt die kontextgerechte Behandlung der Werte. Wenn jemand als Ort D'dorf eingibt, bekommst du nur einen Syntaxfehler. Wenn jemand diese SQL-Injection-Lücke gezielter ausnutzt, » » mysql_real_escape_string() heißt das Stichwort.
Die Behandlung müsste mit der Überprüfung der Eingaben geschehen, oder? (Also direkt vor dem Datenbankeintrag)
Nein, die Überprüfung der Eingabewerte ist ein Thema für sich. Die Behandlung für einen Ausgabekontext ist unabhängig von einer Eingabedatenprüfung und im Ausgabe vorbereitenden Teil am besten aufgehoben. Beispielsweise so:
$sql = sprintf("INSERT INTO tabelle (feld1, feld2) VALUES ('%s', '%s')",
mysql_real_escape_string($inhalt_feld1),
mysql_real_escape_string($inhalt_feld2));
» »» [code lang=php]<form action="<?php htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
» Hier fehlt ein echo.
Hm, danke... hat aber auch ohne funktioniert?! *kopfkratz
Nun ja, ohne echo ergibt das action="" (schau in den HTML-Code, der im Browser ankommt) und das Formular wird an die selbe Ressource gesendet, in der es steht, also an sich selbst.
echo "$verabschiedung $name";