dedlfix: mysql-db auslesen mit while und alle Werte in einer var speichen

Beitrag lesen

echo $begrüßung;

Wann immer du Werte in einen Kontext bringst, sind diese Werte kontextgerecht zu behandeln. Wenn jemand aus Côte d'Ivoire kommt, bekommst du nur einen Syntaxfehler.
$input = "<?php \n\$namen = '$ganznamen';\n ?>";
Was für den Kontext "Variableninhalt kommt in SQL" gilt, gilt natürlich auch für den Kontext "Variableninhalt kommt in PHP-Sourcecode" - nur sind die Konsequenzen hier drastischer, wenn man dabei irgendeinen Fehler macht. Ausserdem ist das Escaping komplizierter, weil es für die hier notwendigen Ersetzungen von Zeichen in sichere Ersatzzeichen keine komplett fertige Funktion gibt.

Ich erwähnte etwas weiter unten und in etwas anderem Zusammenhang das passende Werkzeug dazu: htmlspecialchars(). So wäre es für diese Stelle richtig gewesen:

$input = sprintf("<?php \n\$namen = '%s';\n ?>", htmlspecialchars($ganznamen, ENT_QUOTES));

Das ENT_QUOTES wird in dem Fall benötigt, da der Wert von $ganznamen hier mit ' eingerahmt ist. Dieses Zeichen wird von htmlspecialchars() normal nicht beachtet, muss aber in dem Fall. Mit ENT_QUOTES wird ein ' zu &#039; umgearbeitet und kann somit nicht mehr den String beenden.

Außerdem ist es garantiert nicht der Sicherheit dienlich, wenn du Code aus Benutzereingaben zusammenbaust, noch dazu vermutlich ungefilterten. Manche Leute heißen dann auf einmal ';phpinfo(); $foo=' oder noch unangenehmer.
Leider lieferst du an dieser Stelle den gefährlichen Code, und nicht den Versuch des ungefährlichen Codes.

Es ist immer gut, wenn noch mal jemand kritisch drüberschaut. Danke.

echo "$verabschiedung $name";