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
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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.
18. august 2005 - 12:45
#2
Du skal nok lave en urlencode - og husk grænsen på ca. 2000 tegn.
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?
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)
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
18. august 2005 - 12:52
#6
Nej, forkert ;) htmlentities
18. august 2005 - 12:52
#7
echo '<a href="side2.php?med='.htmlentities($arraymed).'">Link</a>
18. august 2005 - 12:53
#8
erikjacobsen: Urlencode skulle da også meget gerne virke?
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>
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 :)
18. august 2005 - 12:56
#11
yes.. det er korrekt.. jeg skulle lige fange hvad han mente :)
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??
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 :-)
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??
18. august 2005 - 13:07
#15
Skal jeg decode før jeg unserializer? Prøver jeg i hvert fald lige
18. august 2005 - 13:09
#16
ingen har bedt dig om at bruge både base64_encode og htmlentities
18. august 2005 - 13:10
#17
Nå por poikker - så har jeg læst forkert. Fjerner lige htmlentities og prøver igen :-)
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 :)
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.
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
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?
18. august 2005 - 13:19
#22
"Det er det eneste du behøver rette i forhold til dit oprindelige script."
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??
18. august 2005 - 13:24
#24
ja. Det er jo så fordi din server er sat op til automatisk at sætte \-ere på.
18. august 2005 - 13:26
#25
Fremragende!! Takker mange gange for hjælpen. Smid et svar og I får point :-)
18. august 2005 - 13:29
#26
Jeg samler slet ikke på point, tak.
18. august 2005 - 14:14
#27
Så napper jeg dem selv :-) Endnu engang tak for hjælpen :D
Vi tilbyder markedets bedste kurser inden for webudvikling