dedlfix: Daten bei mysql_connect verschlüsseln

Beitrag lesen

Hi!

vielen Dank für eure Hinweise. Sehe vor lauter "", '' und " schon überhaupt nichts mehr. :-))

Das ist aber wichtig, denn beim Schachteln von Kontexten muss man stets die Übersicht behalten. Du kannst ja mal zur Übung (alternativ: vollständigen Verwirrung) versuchen, einen String in JavaScript-Code zu notieren, der Anführungszeichen enthält und der in einem Attribut eines HTML-Elements steht, das von PHP ausgegeben werden soll.

alert("foo "bar" baz");
<span onclick="alert("foo "bar" baz");">foo</span>
echo "<span onclick="alert("foo "bar" baz");">foo</span>";

In der Form ist das natürlich fehlerhaft. Wie kann man es richtig machen? Und zum Erschweren kannst du auch eine Variante suchen ohne 'einfache Anführungszeichen' zu verwenden. Vielleicht nützt es dir etwas, wenn du dich mit der Funktion sprintf() in ihrer einfachsten Anwendungsweise vertraut machst, also nur den Platzhalter %s für Strings betrachtest. Mit der Funktion kann man das Notieren einiger Schachtelungsebenen und damit Backslash-Wälder umgehen. Siehe http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel/erkennen_und_behandeln#JavaScript_und_HTML

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>";

Hier hast du eine Besonderheit PHPs, die sich aber bei Beachtung des Kontextwechsels "Variableninhalt im HTML-Code ausgeben" von selbst auflöst, denn du musst auf $_POST["username"] noch htmlspecialchars() anwenden.

$error = sprintf('Hallo <b>%s</b>, Du hast Dich erfolgreich registriert. <a href="anmelden.php">Anmelden</a>', htmlspecialchars($_POST["username"]));

Die Besonderheit war, dass man ja Variablen in ""-Strings notieren kann und dabei auch solch komplexe Dinge wie Array-Elemente einfügen können muss. Alle falschen und richtigen Varianten stehen im PHP-Handbuch: http://de.php.net/manual/en/language.types.string.php#language.types.string.parsing. Achte auf:

error_reporting(E_ALL); // Notice-Meldungen anzeigen
$foo = array('bar' => 'qux');

echo $foo[bar]; // falsch
echo $foo["bar"]; // richtig
echo "bla $foo[bar] fasel"; // richtig, _obwohl_ keine Anführungszeichen notiert sind
echo "bla {$foo[bar]} fasel"; // falsch, _weil_ Anführungszeichen fehlen
echo "bla {$foo["bar"]} fasel"; // richtig

Noch was anderes:

if($eintragen == "true")

Hier möchtest du nicht auf die Zeichenkette "true" sondern auf den speziellen Wert true testen. Diesen Fehler würdest du gar nicht bemerken, weil diese Stelle intentionsgemäß funktioniert. Das liegt aber daran, dass ein String, der nicht leer ist oder '0' enthält, im boolschen Kontext als true angesehen wird. Andererseits kann man sich das explizite Testen auf true schenken und muss nur

if ($eintragen)

notieren, denn "Ist es wahr, dass $eintragen wahr ist?" ist doppelt gemoppelt, ein "Ist $eintragen wahr" reicht auch.

Oh, ich werd nochmal wahnsinnig.

Kühlen Kopf behalten!

Lo!