[php] Array serialize troubles

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
Er wordt hier op GoT veel geserialized zag ik al in de search, maar daarbij gaat het voornamelijk om vragen waarbij de serialize() functie uiteindelijk het antwoord blijkt te zijn. Ik wil zelf ook met serialize() aan de slag, en wel om een array door te geven via een POST variabele.

Daarbij treden echter problemen op, waarvan ik de oorzaak niet snap.

Even een simpel testbestandje, om het eenvoudig te houden:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    $counter = 0;
    $blaat;
    while ($counter < 5) {
        $blaat[] += $counter;
        $counter++;
    }   
    foreach ($blaat as $int) {
        echo "testing blaat: $int <br />";
    }
    $serialized = serialize($blaat);
    $unserialized = unserialize($serialized);
        echo "serialized: $serialized <p>";
    echo "unserialized: $unserialized <p>";
    foreach ($unserialized as $int) {
        echo "testing unserialized: $int <br />";
    }
?>


Dit lijkt simpel: maak een array aan, serialize 'm en unserialize 'm weer.
Volgens mij doe ik het gewoon volgens de manier beschreven op php.net.

Echter, het werkt niet: de output is:
testing blaat: 0
testing blaat: 1
testing blaat: 2
testing blaat: 3
testing blaat: 4
serialized: a:5:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;}

unserialized:

Warning: Invalid argument supplied for foreach() in /home/project/214500/214500ao/public_html/test.php on line 15
En dan gaat het met name om de laatste twee regels. Het serializen gaat prima, maar de variabele $unserialized lijkt leeg, en is zeker geen array.

Hoe kan dit? Wat doe ik fout?
Als dit achteraf toch in de search heeft gestaan: Sorry, ik heb het niet gevonden.

[ Voor 5% gewijzigd door dawuss op 22-12-2003 17:43 . Reden: typo fixed ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
$unserialized = unserialize($serialised); perhaps? :)

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
hobbit_be schreef op 22 december 2003 @ 17:39:
$unserialized = unserialize($serialised); perhaps? :)
aargh, dat was een typo, sorry :P

Hmm, damn, die typo was ook in m'n originele testscriptje geslopen.

Dit was dus niet hetzelfde probleem als ik heb met mijn oorspronkelijke pagina. Daarbij werk ik namelijk met dynamische associatieve arrays, die dus bij elke POST langer moeten worden, en vervolgens serialized mee moeten naar de volgende.
De fout zit 'm dus niet in het serializen, maar in iets anders.
Waarschijnlijk maak ik ergens een denkfout bij het werken met associatieve arrays.

Ik zal m'n definitieve probleem dan maar meteen posten:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    $counter = 0;
    $blaat;
    while ($counter < 5) {
        $blaat[]['name'] = $counter;
        $counter++;
    }   
    foreach ($blaat as $int) {
        echo "testing blaat: $int['name'] <br />";
    }
    $serialized = serialize($blaat);
    $unserialized = unserialize($serialized);
        echo "serialized: $serialized <p>";
    echo "unserialized: $unserialized <p>";
    foreach ($unserialized as $int) {
        echo "testing unserialized: $int['name'] <br />";
    }
?>


en de output:
testing blaat:
testing blaat:
testing blaat:
testing blaat:
testing blaat:
serialized: a:5:{i:0;a:1:{s:4:"name";i:0;}i:1;a:1:{s:4:"name";i:1;}i:2;a:1:{s:4:"name";i:2;}i:3;a:1:{s:4:"name";i:3;}i:4;a:1:{s:4:"name";i:4;}}

unserialized: Array

testing unserialized:
testing unserialized:
testing unserialized:
testing unserialized:
testing unserialized:
Wat doe ik nu fout? Het serializen gaat wel prima, maar het werkt in eerste instantie al niet met dat for-loopje.

[ Voor 89% gewijzigd door dawuss op 22-12-2003 17:54 ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

dawuss:
aargh, dat was een typo, sorry :P
Krijg je dat voorbeeldje niet aan de praat? Want hier werkt dat gewoon prima.

Als je je formulier niet aan de praat krijgt met serializen heeft het hoogstwaarschijnlijk te maken met magic quotes. Als je get_magic_quotes_gpc aan staat, moet je de serialized data even door stripslashes heen halen.

of gewoon die vieze magic quotes uitzetten :r ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
of nog reliable-er ;) gewoon effe base64_encoden en dan base64_decoden ;).

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
dawuss schreef op 22 december 2003 @ 17:37:
Ik wil zelf ook met serialize() aan de slag, en wel om een array door te geven via een POST variabele.
waarom persee met serialize en niet via velden in het formulier?

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
marty schreef op 22 december 2003 @ 17:49:
[...]


waarom persee met serialize en niet via velden in het formulier?
in mijn post hierboven ^^^ leg ik dit uit. Het is een dynamische array die bij iedere POST op het zelfde formulier moet groeien. Eventueel zou het kunnen met hidden fields, maar omdat ik ook met templates werk, wordt dat een beetje ingewikkeld.

[ Voor 16% gewijzigd door dawuss op 22-12-2003 17:53 ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
als je gewoon een asso ;) wil doen doe je best dit:

$tHash = array()
for()
{
$tHash['somehash'.x] = x;
}

...

en echo "sdsdfsdfsdf $tHash['hello1']" moet dit zijn: "sdddsd {$tHash['dddd']}" of nog beter
gewoon 'sddfffs'.$tHash('hello').'dddd'; use double quotes sparingly ;)

en als je aan het debuggen bent kijk ook eens naar print_r of var_dump ;)

[ Voor 26% gewijzigd door hobbit_be op 22-12-2003 18:00 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

dawuss schreef op 22 december 2003 @ 17:42:
Wat doe ik nu fout? Het serializen gaat wel prima, maar het werkt in eerste instantie al niet met dat for-loopje.
kijk eens goed naar je code!

PHP:
1
2
    foreach ($blaat as $int) {
        echo "testing blaat: $int['name'] <br />";


$int is een value, geen key. $int is dus iets als 3, en $int['name'] heeft dan weinig nut

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
PHP:
1
$blaat[]['name'] = $counter;


als je $blaat foreach'ed krijg je Array('name' => 0, 'name' => 1, ...) dus dat klopt wel

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh woeps, staat er ineens een ['name'] tussen 8)7

[ Voor 13% gewijzigd door .oisyn op 22-12-2003 20:40 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1