problem mit unserialize

problem mit unserialize

am 04.09.2006 13:28:09 von Karmen Satie

Hallo,
weiß jemand, was ich hier falsch mache,
wo hier der Fehler steckt?
(Notice: unserialize() failed at offset 9 of 133 bytes in ...)

if (isset($_GET['serstring'])) {
echo is_array($serstring) ? 'Array' : 'kein Array';
echo "
\$serstring: ".$serstring;

$unserial = unserialize($serstring);
foreach ($unserial as $kennung => $wert) {
print "
|| $kennung / $wert || \n";
} } else { echo "(noch) nix gesendet";}

// ###################################
$daten = array("Klaus", "Max", "Heinz");
$daten[] = "Gustav";
$daten['comments'] = array(5,4,6,23);
$package = serialize($daten);
echo "






+ serialize-hidden field
";

Danke!
Grüße, Karmen

Re: problem mit unserialize

am 04.09.2006 13:45:24 von Carsten Wiedmann

Karmen Satie schrieb:

> weiß jemand, was ich hier falsch mache,
> wo hier der Fehler steckt?
> (Notice: unserialize() failed at offset 9 of 133 bytes in ...)
>
> if (isset($_GET['serstring'])) {
> echo is_array($serstring) ? 'Array' : 'kein Array';

Nur nebenbei, $_GET['serstring'] kann immer nur ein String sein.


> echo "
\$serstring: ".$serstring;
>
> $unserial = unserialize($serstring);

| $unserial = unserialize(base64_decode($serstring));


> foreach ($unserial as $kennung => $wert) {
> print "
|| $kennung / $wert || \n";
> } } else { echo "(noch) nix gesendet";}
>
> // ###################################
> $daten = array("Klaus", "Max", "Heinz");
> $daten[] = "Gustav";
> $daten['comments'] = array(5,4,6,23);
> $package = serialize($daten);

| $package = urlencode(base64_encode(serialize($daten)));


> echo "
>


>
>
>

> + serialize-hidden field
>
";

> Danke!
> Grüße, Karmen

Gruß
Carsten

Re: problem mit unserialize

am 04.09.2006 13:54:06 von Carsten Wiedmann

Carsten Wiedmann schrieb:

Nachtrag:

> > $package = serialize($daten);
>
> | $package = urlencode(base64_encode(serialize($daten)));

Das urlencode() macht bei einem Formular ja der Browser und muss man nur bei
einer URI in einem Link (z.B. ) machen. Sorry.

| $package = base64_encode(serialize($daten));

BTW:
IMHO könnte man auch alternativ htmlspecialchars() anstatt base64_encode()
nehmen.

Gruß
Carsten

Re: problem mit unserialize

am 04.09.2006 14:06:07 von Matthias Esken

On Mon, 04 Sep 2006 13:28:09 +0200, Karmen Satie wrote:

> weiß jemand, was ich hier falsch mache,
> wo hier der Fehler steckt?
> (Notice: unserialize() failed at offset 9 of 133 bytes in ...)
>
> if (isset($_GET['serstring'])) {
> echo is_array($serstring) ? 'Array' : 'kein Array';
> echo "
\$serstring: ".$serstring;
>
> $unserial = unserialize($serstring);

Wo kommt auf einmal die Variable $serstring her?

Gruß,
Matthias

Re: problem mit unserialize

am 04.09.2006 19:46:28 von Karmen Satie

Hallo Carsten,
super! toll! es klappt!!
Hab vielen Dank!

(mit htmlspecialchars() habe ich es nicht hinbekommen.)


Hi Matthias,
> ...
> Wo kommt auf einmal die Variable $serstring her?
geschickt, das ist doch ein/der String.


Grüße, Karmen

Re: problem mit unserialize

am 04.09.2006 20:31:24 von Carsten Wiedmann

Karmen Satie schrieb:

> Matthias Esken schrieb:
> >
> > > if (isset($_GET['serstring'])) {
> > > ...
> > > $unserial = unserialize($serstring);
> >
> > Wo kommt auf einmal die Variable $serstring her?
>
> geschickt, das ist doch ein/der String.

Das hab ich in meiner Antwort leider auch übersehen :-/ und tut bei dir auch
nur zufällig.

"Geschickt" hast du $_GET['serstring']. Das benutzt du ja auch beim isset().
Nur das ist eigentlich PHP bekannt und solltest du im unserialize() / dem
weiteren Script benutzen.

Das PHP bei dir plötzlich auch ein $serstring kennt ist nicht "normal" und
du solltest nicht davon ausgehen.

Gruß
Carsten