Lieber j4nk3y,
'\'%1$s\'
Die Zeichenkette versteh ich gerade noch nicht vollständig. Dass
sollte den übergebenen String beinhalten, das erstes
dann hier$_SESSION['user_name']
usw. . Aber was macht das\'%1$
.
wenn Du bei PHP.net nachgelesen hast, das die Funktion sprintf
Ersetzungen in Strings vornehmen kann, dann hast Du sicher gesehen, dass es nicht nur das s
ist, sondern die Zeichenfolge %s
. Man kann die Platzhalter mit Nummern versehen, um einen Teilstring, der öfter eingesetzt werden soll, nicht öfter in der Parameterliste notieren zu müssen:
sprintf(
'Wir haben %1$s %1$s %1$s haben %1$s %1$s %1$s haben %1$s %1$s %1$s haben %2$s!',
'Hunger',
'Durst'
);
Wenn in Deinem SQL-String der Wert in einfache Quotes verpackt werden soll, dann müssen diese mit einem Backslash escaped werden, da sonst Syntaxfehler entstehen:
sprintf(
'Wir haben '%1$s' '%1$s' '%1$s' haben '%1$s' '%1$s' '%1$s' haben '%1$s' '%1$s' '%1$s' haben '%2$s!'',
'Hunger',
'Durst'
);
Deshalb diese Schreibweise:
sprintf(
'Wir haben \'%1$s\' \'%1$s\' \'%1$s\' haben \'%1$s\' \'%1$s\' \'%1$s\' haben \'%1$s\' \'%1$s\' \'%1$s\' haben \'%2$s!\'',
'Hunger',
'Durst'
);
Wenn ich jetzt aber einfach mal sage das:
if($_POST) { foreach($_POST as $key=>$value) { $_POST[$key]= mysqli_real_escape_string($value); } }
Dann kommt ja z.b. ein
'
garnicht durch als$_POST
variable oder nicht?
Warum willst Du alle geposteten Werte für den SQL-Kontext kodieren? Solltest Du eine Fehlermeldung ins Dokument schreiben, bei der Du etwas bemängelst, dann kannst Du den originalen Wert nicht mehr rekonstruieren:
$_POST['lang'] = 'Leck mich!';
if (!in_array($_POST['lang'], $available_languages) {
// create error message
$error = sprintf(
'<p class="error">Falsche Sprache <strong>%1$s</strong>angegeben!</p>',
htmlspecialchars($_POST['lang'])
);
}
Man kodiert genau dort, wo man es benötigt. Im obigen Beispiel wird der gepostete Wert für den HTML-Kontext kodiert. Der Wert im $_POST
-Array wird dabei aber nicht verändert, damit er an anderer Stelle wieder original zur Verfügung steht und für den dortigen Kontext passend kodiert werden kann (z.B. mit mysqli_real_escape_string
). Das stand aber in dem von mir verlinkten und zur Lektüre ans Herz gelegten Artikel... ;-)
Liebe Grüße,
Felix Riesterer.