Findest du es für Benutzer sonnvoll, bei einem Datenbankfehler die Arbeit sang- und klanglos einzustellen?
Ja, weil sonst eh nix läuft. Ob ich nun eine Fehlermeldung ausspucke oder einfach nix kommt. Wenn nix kommt, wird der Nutzer eher F5 drücken.
if(!empty($_POST['input1']))
{
$benutzer = htmlspecialchars($_POST['input1']);
}Hast du hier einen HTML-Kontext vorliegen? Ich meine jetzt, nicht erst irgendwann später. Sieht nicht so aus, also ist an der Stelle das htmlspecialchars() falsch.
Ich gebe den Benutzer später aus über Hallo $benutzer. Ich escape generell alle Inputs über das Teil, damit keiner HTML-Code einschleust.
Dafür bearbeite ich die Rückgaben von der DB gar nicht, weil ich davon ausgehe, dass die bereits entsprechend bearbeitet sind.
Nun, dein fehlerhaftes htmlspecialchars() hat die " zu " verwurstet. " enthält kein Zeichen, das von mysqli_real_escape_string() verändert wird. Du schaust dir beides im Browser an, und da kein HTML-Element geöffnet ist, in dem " eine Bedeutung hätte, zeigt der die " an, und aus dem " macht er auch wieder ein ". Damit sieht beides gleich aus. Ein Blick in die Quelltextansicht oder die Ausgabe mit var_dump() hätte Unterschiede aufgezeigt. Bei var_dump() hätte die unterschiedliche Stringlänge auffallen müssen, auch wenn das Anzeigeergebnis dasselbe gewesen wäre, weil wieder das " vom Browser weginterpretiert wird.
Das heißt mit dem htmlspecialchars() habe ich den String bereits entschärft. Ich habe es gerade mal mit ' OR 1 OR ' probiert. Der wird nun von mysqli_real_escape_string entschärft. Ob ich nun " oder &qout; in der DB speichere ist jetzt auch egal. Das Ergebnisse ist für den Nutzer das Gleiche.
Donald