Avatar billede flim Nybegynder
18. august 2005 - 12:36 Der er 26 kommentarer og
1 løsning

Serialize ved $_GET[]

Hej folkens.

Jeg har en side hvor jeg har et array. Det vil jeg gerne have med til en anden side og forsøgte derfor med serialize()

Dvs.:

Side1:

$arraymed = serialize($array);
...
echo '<a href="side2.php?med='.$arraymed.'">Link</a>

Og på side 2:

$array = unserialize($_GET[med]);

På isde to skal jeg bruge mit array, men når jeg bruger count($array) så indeholder det kun et element.

Hvad pokker går der galt?

Mvh Flim
Avatar billede bromer Nybegynder
18. august 2005 - 12:40 #1
En fornuftig måde at debugge det på er at finde følgende:

o Hvad giver var_dump($array) først
o Hvad giver var_dump($arraymed) eller dit kald til serialize
o Hvad giver var_dump($_GET) på den anden side
o Hvad giver var_dump($array) på den anden side efter dit kald til unserialize

Dertil kommer at jeg synes det er lidt pænere at overføre den slags i en session eller gemme det i en database og bare smide id'et med over på den anden side.
Avatar billede erikjacobsen Ekspert
18. august 2005 - 12:45 #2
Du skal nok lave en urlencode - og husk grænsen på ca. 2000 tegn.
Avatar billede flim Nybegynder
18. august 2005 - 12:47 #3
var_dump($array):
array(12) { [0]=> string(4) "5101" [1]=> string(4) "5102" [2]=> string(4) "5103" [3]=> string(4) "5104" [4]=> string(4) "5105" [5]=> string(4) "5106" [6]=> string(4) "5107" [7]=> string(4) "5108" [8]=> string(4) "5109" [9]=> string(4) "5110" [10]=> string(4) "5111" [11]=> string(4) "5112" } 

var_dump($arraymed):
string(189) "a:12:{i:0;s:4:"5101";i:1;s:4:"5102";i:2;s:4:"5103";i:3;s:4:"5104";i:4;s:4:"5105";i:5;s:4:"5106";i:6;s:4:"5107";i:7;s:4:"5108";i:8;s:4:"5109";i:9;s:4:"5110";i:10;s:4:"5111";i:11;s:4:"5112";}"

var_dump($_GET[med]):
string(14) "a:12:{i:0;s:4:"

var_dump($array):
bool(false)

Det virker åbenbart som om den ikke sender det hele med...

Hvad kan det skyldes?
Avatar billede flim Nybegynder
18. august 2005 - 12:50 #4
Går der kuk i det fordi mit serialized indeholder tegnet " ??

erikjacobsen.

Hvad vil det præcist hjælpe?

(kender ikke funktionen)
Avatar billede bromer Nybegynder
18. august 2005 - 12:51 #5
det er ikke sikkert at sende en streng over via GET, så du kan lave en urlencode ligesom erikjacobsen skrev
Avatar billede erikjacobsen Ekspert
18. august 2005 - 12:52 #6
Nej, forkert ;) htmlentities
Avatar billede erikjacobsen Ekspert
18. august 2005 - 12:52 #7
echo '<a href="side2.php?med='.htmlentities($arraymed).'">Link</a>
Avatar billede bromer Nybegynder
18. august 2005 - 12:53 #8
erikjacobsen: Urlencode skulle da også meget gerne virke?
Avatar billede erikjacobsen Ekspert
18. august 2005 - 12:54 #9
Din streng indeholder nemlig ikke giftige tegn i forhold til en querystring, med " er jo giftig for HTML-en, da den afslutter din href="......"

For god ordens skyld bør du også brug urlencode, selv om det lige i det konkrete tilfælde ikke er nødvendigt. En dag putter du noget andet i dit array, og så kan den være der. Altså:

echo '<a href="side2.php?med='.htmlentities(urlencode($arraymed)).'">Link</a>
Avatar billede 7th Praktikant
18. august 2005 - 12:54 #10
Lyt til erikjacobsens forslag, f.eks...

send array: base64_encode(serialize($array));
modtag array: unserialize(base64_decode($array));

Det burde virke :)
Avatar billede bromer Nybegynder
18. august 2005 - 12:56 #11
yes.. det er korrekt.. jeg skulle lige fange hvad han mente :)
Avatar billede flim Nybegynder
18. august 2005 - 12:58 #12
Hmm - virker stadig ikke helt.

Nu sender den dog det hele med (kan jeg se ved at højreklikke og save shortcut).

Men når jeg sider $med = $_GET[med] - værdien af $med er: string(14) "a:12:{i:0;s:4:"

og så stopper den der.

Hvorfor dælen gør den det??
Avatar billede flim Nybegynder
18. august 2005 - 12:59 #13
Hov I to - I ar skrevet en masse mens jeg prøvede ting af.

Jeg prøver lige Jeres svar og kommer så igen :-)
Avatar billede flim Nybegynder
18. august 2005 - 13:06 #14
Nu ser det sådan her ud:

var_dump($array);
array(12) { [0]=> string(4) "5101" [1]=> string(4) "5102" [2]=> string(4) "5103" [3]=> string(4) "5104" [4]=> string(4) "5105" [5]=> string(4) "5106" [6]=> string(4) "5107" [7]=> string(4) "5108" [8]=> string(4) "5109" [9]=> string(4) "5110" [10]=> string(4) "5111" [11]=> string(4) "5112" }

var_dump($arraymed):
string(189) "a:12:{i:0;s:4:"5101";i:1;s:4:"5102";i:2;s:4:"5103";i:3;s:4:"5104";i:4;s:4:"5105";i:5;s:4:"5106";i:6;s:4:"5107";i:7;s:4:"5108";i:8;s:4:"5109";i:9;s:4:"5110";i:10;s:4:"5111";i:11;s:4:"5112";}"

var_dump(base64_encode(htmlentities($arraymed)));
string(412) "YToxMjp7aTowO3M6NDomcXVvdDs1MTAxJnF1b3Q7O2k6MTtzOjQ6JnF1b3Q7NTEwMiZxdW90OztpOjI7czo0OiZxdW90OzUxMDMmcXVvdDs7aTozO3M6NDomcXVvdDs1MTA0JnF1b3Q7O2k6NDtzOjQ6JnF1b3Q7NTEwNSZxdW90OztpOjU7czo0OiZxdW90OzUxMDYmcXVvdDs7aTo2O3M6NDomcXVvdDs1MTA3JnF1b3Q7O2k6NztzOjQ6JnF1b3Q7NTEwOCZxdW90OztpOjg7czo0OiZxdW90OzUxMDkmcXVvdDs7aTo5O3M6NDomcXVvdDs1MTEwJnF1b3Q7O2k6MTA7czo0OiZxdW90OzUxMTEmcXVvdDs7aToxMTtzOjQ6JnF1b3Q7NTExMiZxdW90Ozt9"

Og så på side2:

var_dump($_GET[med]);
"YToxMjp7aTowO3M6NDomcXVvdDs1MTAxJnF1b3Q7O2k6MTtzOjQ6JnF1b3Q7NTEwMiZxdW90OztpOjI7czo0OiZxdW90OzUxMDMmcXVvdDs7aTozO3M6NDomcXVvdDs1MTA0JnF1b3Q7O2k6NDtzOjQ6JnF1b3Q7NTEwNSZxdW90OztpOjU7czo0OiZxdW90OzUxMDYmcXVvdDs7aTo2O3M6NDomcXVvdDs1MTA3JnF1b3Q7O2k6NztzOjQ6JnF1b3Q7NTEwOCZxdW90OztpOjg7czo0OiZxdW90OzUxMDkmcXVvdDs7aTo5O3M6NDomcXVvdDs1MTEwJnF1b3Q7O2k6MTA7czo0OiZxdW90OzUxMTEmcXVvdDs7aToxMTtzOjQ6JnF1b3Q7NTExMiZxdW90Ozt9"


$array = unserialize(base64_decode($_GET[med]));
var_dump($array):
bool(false)


Hvad gør jeg galt??
Avatar billede flim Nybegynder
18. august 2005 - 13:07 #15
Skal jeg decode før jeg unserializer?

Prøver jeg i hvert fald lige
Avatar billede erikjacobsen Ekspert
18. august 2005 - 13:09 #16
ingen har bedt dig om at bruge både base64_encode og htmlentities
Avatar billede flim Nybegynder
18. august 2005 - 13:10 #17
Nå por poikker - så har jeg læst forkert. Fjerner lige htmlentities og prøver igen :-)
Avatar billede flim Nybegynder
18. august 2005 - 13:14 #18
Det jeg sender med ser sådan her ud nu:

$arraymed = serialize(base64_encode($arraymed));

På den anden side tager jeg imod med:

$array = unserialize(base64_decode($_GET[med]));

Men det virker stadig ikke.

Min var_dump($arraymed) på side 1 indeholder nu følgende:

string(7) "s:0:"";"

Det er jo ikke møj.

Håber I har tålmodighed endnu :)
Avatar billede erikjacobsen Ekspert
18. august 2005 - 13:16 #19
Jeg vil stadig mene, at den simpleste løsning står nederst i [18/08-2005 12:54:27].
Det er det eneste du behøver rette i forhold til dit oprindelige script.
Avatar billede flim Nybegynder
18. august 2005 - 13:17 #20
$arraymed er nu blevet rettet til: $arraymed = serialize(base64_encode($array));

Nu skriver den: Warning: base64_encode() expects parameter 1 to be string, array given in /home/xxx/side1.php on line 75
Avatar billede flim Nybegynder
18. august 2005 - 13:17 #21
erikjacobsen.

Oki - ser nemt ud, men hvordan tager jeg imod den på side2? Skal vel også decodes på en eller anden måde?
Avatar billede erikjacobsen Ekspert
18. august 2005 - 13:19 #22
"Det er det eneste du behøver rette i forhold til dit oprindelige script."
Avatar billede flim Nybegynder
18. august 2005 - 13:23 #23
Ok ok - nu er den meget snart ved at være der:

På side1 har vi nu:

array(12) { [0]=> string(4) "5101" [1]=> string(4) "5102" [2]=> string(4) "5103" [3]=> string(4) "5104" [4]=> string(4) "5105" [5]=> string(4) "5106" [6]=> string(4) "5107" [7]=> string(4) "5108" [8]=> string(4) "5109" [9]=> string(4) "5110" [10]=> string(4) "5111" [11]=> string(4) "5112" }


string(189) "a:12:{i:0;s:4:"5101";i:1;s:4:"5102";i:2;s:4:"5103";i:3;s:4:"5104";i:4;s:4:"5105";i:5;s:4:"5106";i:6;s:4:"5107";i:7;s:4:"5108";i:8;s:4:"5109";i:9;s:4:"5110";i:10;s:4:"5111";i:11;s:4:"5112";}"


På side2 ser de sådan her ud:

string(213) "a:12:{i:0;s:4:\"5101\";i:1;s:4:\"5102\";i:2;s:4:\"5103\";i:3;s:4:\"5104\";i:4;s:4:\"5105\";i:5;s:4:\"5106\";i:6;s:4:\"5107\";i:7;s:4:\"5108\";i:8;s:4:\"5109\";i:9;s:4:\"5110\";i:10;s:4:\"5111\";i:11;s:4:\"5112\";}"

bool(false)

Er det så stripslashes eller en anden funktion jeg skal bruge for at det kommer til at virke??
Avatar billede erikjacobsen Ekspert
18. august 2005 - 13:24 #24
ja. Det er jo så fordi din server er sat op til automatisk at sætte \-ere på.
Avatar billede flim Nybegynder
18. august 2005 - 13:26 #25
Fremragende!!

Takker mange gange for hjælpen.

Smid et svar og I får point :-)
Avatar billede erikjacobsen Ekspert
18. august 2005 - 13:29 #26
Jeg samler slet ikke på point, tak.
Avatar billede flim Nybegynder
18. august 2005 - 14:14 #27
Så napper jeg dem selv :-)

Endnu engang tak for hjælpen :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester