dedlfix: Daten bei mysql_connect verschlüsseln

Beitrag lesen

Hi!

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING on line 96
$error = "Hallo <b>$_POST["username"]</b>, Du hast Dich erfolgreich registriert. <a href="anmelden.php">Anmelden</a>";

Ich habe es jetzt hingekriegt, indem ich

"Hallo <b>".$_POST['username']."</b>,

gemacht habe.

Und wo ist das htmlspecialchars() abgeblieben? Es gibt Leute, die behaupten, sie heißen: <script>location.href='http://example.org'</script>
Wann immer nun ihr Name ausgegeben werden soll, ist deine Seite nur noch ein Eintrag in der History des Browsers deiner Besucher. Du kannst nicht verhindern, dass sie solchen Unsinn eingeban, aber durch die Kontextwechselbeachtung kannst du verhindern, dass der Unsinn Schaden anrichtet.

Warning: mysql_close() expects parameter 1 to be resource, null given

Du brauchst die Verbindung nicht zu schließen, besonders dann nicht, wenn das Script-Ende in Sicht ist, denn da räumt PHP sowieso auf. Ein explizites Schließen ist dann sinnvoll, wenn das Script mit einer umfangreichen Berechnung noch eine Weile weiterläuft und man die Datenbankressourcen wieder freigeben will.

Ich habe verstanden, dass zum Schließen der Datenbank auch eine vorhanden sein muss und offensichtlich findet PHP in meinem Script keine.
Der Befehl   mysql_close($verbindung);   steht bei mir ganz am Ende des Scripts. Sollte ich ihn direkt auf den Teil folgen lassen, indem ich Daten in die Datenbank schreibe, oder hat das damit nichts zu tun?

$verbindung muss das sein, was mysql_connect() im Nicht-Fehlerfall zurückgegeben hat. error_reporting(E_ALL) steht während deiner Tests irgendwo am Script-Anfang? Damit bekommst du Notice-Meldungen ausgegeben, wann immer du auf nicht vorhandene Variablen zuzugreifen versuchst. Solche Notice-Meldungen deuten einerseits auf Tippfehler in Variablennamen hin, andererseits auch auf Fehler in der Ablauf-Logik. Es gibt also Wege im Script, auf denen das Erzeugen von Variablen umgangen wurde, obwohl später darauf zugegriffen wird.

Bei dieser Meldung
$error = "Hallo <b>$_POST["username"]</b>, Du hast Dich erfolgreich registriert. <a href=\"anmelden.php\">Anmelden</a>";
handelt es sich ja nicht um eine Fehlermeldung. Gebe ich das trotzdem mit "$error" ein?

Sinnvoll ist das nicht, denn du willst diesen Text ja nicht in rot als Fehlermeldung formatiert anzeigen lassen, sondern vielleicht eher in grün. Also darf es kein Eintrag in $error sein. Muss es überhaupt ein Eintrag in einer Variablen sein? Wenn alle Eingabedatenprüfungen erfolgreich absolviert wurden und auch die MySQL-Verarbeitung keinen $error produziert hat, sollte doch nur noch das erfolgreiche Registrieren übrigbleiben, oder? Dann würde doch im Ausgabe-Teil reichen, diesen Text im else-Zweig des if(!empty($error)) zu notieren (natürlich mit htmlspecialchars() um den Usernamen drumherum).

Lo!