Hi!
Nun gibt es aber noch ein weiteres Problem im späteren Verlauf.
nachdem der Benutzer in vier Schritten ziemlich viel Dinge eingegeben hat, die alle – mit stripslashes() und mysql_real_escape_string() behandelt – in die DB geschrieben wurden, bite ich ihm (leider) die Möglichkeit, diese Daten nochmals anzuschauen und ggf. zu korrigieren.Hierzu leite ich ihn auf eine Seite, die wie die ursprüngliche Eingabeseite aussieht, nur dass alle <input>'s bereits mit seinen Eingaben vorbelegt sind, nämlich so:
<input name="feld1" value="<?php echo $abfrage['feld1'] ?>">Hat er nun ursprünglich in ein Feld z.B. "Max und Moritz" eingegeben, steht auf dieser Korrekturseite nun
<input name="feld1" value=""Max und Moritz"">
^^^^^^^^^^^^^^^^
Das hier wird nun logischerweise ignoriert und das Eingabefeld ist leer.
Hier müsstest du die Daten dann wieder mit htmlentities() behandeln, sodass Sonderzeichen entsprechend durch ihre Entities ersetzt werden. Zum Eintragen in die Datenbank ist dann wiederum html_entity_decode() anzuwenden, welche eine Art Umkehrfunktion zu der vorherigen ist. Und natürlich ist auch hier dann das mysql_real_escape_string() nicht zu vergessen!
Wenn du dich wie oben beschrieben an die Vorgehensweise hälst, solltest du keine Probleme kriegen. Um mir die unnötige Tipparbeit mit dem ständigen htmlentities() zu sparen, verwende ich gerne eine erweiterte Version, die eine ganzes Array rekursiv durchläuft:
function array_htmlentities($item) {
if(is_array($item)) {
foreach($item as $key => $value) {
$item[$key] = array_htmlentities($value);
}
} else {
$item = htmlentities($item);
}
return $item;
}
Grüße,
Fabian St.