Olaf: assoziativ array und $_POST

Beitrag lesen

Moin!

Wenn die Struktur weitergegeben werden soll, nutze serialize() und später unserialize(). Bedenke aber, dass serialize() ein Resultat im Plaintext-Kontext produziert - da du den Wert aber ja in HTML ausgeben willst, ist nachfolgend auch noch das passende Escaping durch htmlspecialchars() notwendig.

Bedenke, dass der Benutzer diese Daten beliebig manipulieren kann. Wenn dir deine Daten etwas wert sind, dann darfst du dich nicht darauf verlassen, dass das, was du dem Browser schickst, in identischer Form genauso wieder zurückkommt!!!

  • Sven Rautenberg

Hallo Sven, Hallo Alle,
vielen Dank - bin fast durch. Eure (allerseits) guten Hilfestellung haben mich fast an's Ziel gebracht.

habe nun folgendes (Problem steht unten)
einpacken (vor dem posten):
      $tmp=serialize($array);if (!$tmp){$tmp="hilfe";}
      echo '<input type="hidden" name="unique" value="'.htmlspecialchars($tmp,ENT_QUOTES).'">';
habe also
a) erst serialized dann
b) htmlspecialchars laufen lassen.
Ergebniss ist:
string(31) "a:1:{s:5:"index";s:2:"22";}"

FRAGE:
warum ist dort ein backslash drin und nicht das html-verklauselte???

AUSPACKEN:
if (isset ($_POST["unique"]))
  {
  $tmp=$_POST["unique"];
  $tmp2=stripslashes(htmlspecialchars_decode($tmp,ENT_QUOTES));
  echo __LINE__.' nach decode '.$tmp2.'<br>';
  $uniqueidents = unserialize($tmp2);
  if (!$uniqueidents){echo __LINE__.' unserialize nicht funk. Hilfe <br>';}
  }
ACHTUNG:
nach einem einfach "htmlspecialchars_decode" sieht der string absolut identisch aus (also mit den backslash) => ergebnis: das unserialize funkt. nicht!!!!
ich habe (mehr aus testzwecken) ein stripsslahes davorgeschaltet und nun tut's das ding.

2 Fragen:
A) warum enthaellt der string nach dem einpacken durch htmlspecialchars backslashs?
B) warum funktioniert das htmlspecialchars_decode nicht in soweit als dass das Ergebnis so aussieht wie der urspruengliche string?

PS:
vielleicht wichtig: ich teste local mit apache (kann es irgendwie daran liegen? - Ich denke nein, da wir ja hier ueber PHP-functions sprechen; aber wer weiss schon).

Ich hoffe, Ihr habt auch dazu eine Antwort.
fg,
Olaf.