Matthias Apsel: konkrete Codebeispiele

Beitrag lesen

Om nah hoo pez nyeetz, Sven Rautenberg!

Folgendes leistet entsprechend meiner Tests das gewünschte:

Der Nutzer soll mithilfe eines normalen, etwas umfangreichem HTML-Formular Daten speichern können. Das Formular wird grundsätzlich immer ausgeliefert, per display: none; ausgeblendet und mit JS eingeblendet. Für Berechnungen im Formular ist ohnehin JS notwendig, deshalb gibt es keine no-JS-Alternative.

Für einen neuen Datensatz wird ein leeres Formular eingeblendet

<form>  
  ...  
  <input type="text" name="person">  
  <label for="notiz">Ihre Bemerkungen:<textarea id="notiz" name="notiz" rows="2"></textarea></label>  
  ...  
</form>

Die Eingaben werden in die Datenbank gespeichert.

$abfrage = "INSERT INTO foo (person, notiz) VALUES ('"  
. mysql_real_escape_string($_POST['person']) . "', '"  
. mysql_real_escape_string($_POST['notiz']) . "')"

Sollte ein schon bestehender Datensatz aufgerufen werden, wird das Formular gefüllt durch

echo "f.person.value = '" . str_replace('&amp;','&',htmlspecialchars(substr(json_encode($gkind['name']),1,-1), ENT_NOQUOTES, $double_encode = false)) . "';\n";  
echo "f.notiz.value = '" . str_replace('&amp;','&',htmlspecialchars(substr(json_encode($gkind['notiz']),1,-1), ENT_NOQUOTES, $double_encode = false)) . "';\n";

zum schnelleren Lesen:
1. json_encode
2. die begrenzenden Anführungszeichen entfernen
3. htmlspecialchars
4. & wieder erlauben

Das htmlspecialchars ist erst nach diesem Thread dazugekommen. Ist das hier wirklich notwendig? Jedenfalls kann ich als Person auch </script> eingeben, ohne das das Script abgebrochen wird.

Welche Kontextwechsel könnten noch nicht berücksichtigt sein, welche sonstigen Hinweise sind noch zu geben?

Matthias

--
1/z ist kein Blatt Papier.