array waarden versturen naar andere pagina
Hieronder is een array met waarden. Het is de bedoeling dat die waarden in een variabele gezet worden en verstuurd worden via get naar de volgende pagina en daar getoond worden.
Op dit moment verstuurd de browser het woord array en toont dit ook op de volgende pagina.
Verder krijg ik de foutmelding Notice: Array to string conversion op regel 7.
Mijn vraag is: hoe krijg ik de waarden van de array (alaska, alabama enz.) in 1 variabele en dat dit via de get verstuurd wordt naar otherpage.php?
alvast bedankt.
De code is:
Gebruik dus $States[0] voor Alaska, $States[1] voor Alabama etc....
Zelf zou ik een foreach() gebruiken om je array door te lopen, als dat nodig is.
In jouw geval heb je al een array ($States, bovenaan) die je prima in implode() kan gebruiken.
Gewijzigd op 11/03/2018 15:11:49 door - Ariën -
Heb een foreach gebruikt, maar krijg nu 5 a hrefs achter elkaar, omdat de array uit 5 waarden bestaan.
De linkjes bevatten wel ieder apart de waarden van de array.
Ik begrijp niet helemaal hoe ik dan 1 ahref kan krijgen met de 5 waarden van de array.
Gewijzigd op 11/03/2018 15:27:23 door - Ariën -
Er valt dus iets voor te zeggen om een functie te bouwen voor zowel het "inpakken" als het "uitpakken" van de informatie. Hierbij gaan we er gemakshalve vanuit dat dit altijd een array is. Verzin ook toepasselijke namen voor deze functie, ik heb op dit moment niet veel inspiratie.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// returns $array as a string that is safe to transport as querystring parameter value
function encodeUrlData($array) {
$out = ''; // return value
// do stuff
return $out;
}
?>
// returns $array as a string that is safe to transport as querystring parameter value
function encodeUrlData($array) {
$out = ''; // return value
// do stuff
return $out;
}
?>
Een verstandige laatste stap in het in een hyperlink stoppen van informatie is urlencode(). Dit garandeert dat er geen vreemde karakters overblijven die mogelijk een speciale betekenis hebben.
Code (php)
Dan moet het array nog omgezet worden naar een string. Een manier om dit te doen is serialize().
Code (php)
In principe hebben we nu genoeg code voor iets werkends. Dan is daar nog de functie om alles weer uit te pakken:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// returns an unserialized $string as an array
function decodeUrlData($string) {
return unserialize($string);
}
?>
// returns an unserialized $string as an array
function decodeUrlData($string) {
return unserialize($string);
}
?>
Merk op dat $string uit $_GET zou moeten komen, dit superglobal array voert zelf al URL-decoding uit, dus dat hoef je niet zelf nog eens te doen.
Maar dan is er nog de volgende overweging: je weet niet hoeveel tussenstations deze URL passeert van bron naar bestemming. Ook weet je dus niet of hier mogelijk belemmeringen zijn in de ondersteuning van de te transporteren data/karakters. Je zou deze dus in nog een "envelop" kunnen stoppen die beter garandeert dat alles in goede orde zijn bestemming bereikt. Je zou het geserialiseerde array ook nog eens om kunnen zetten naar een (nog) veiligere variant (edit: veilig qua transport, base64 is niet bedoeld voor het encrypten van data) met huis-tuin-en-keuken karakters via base64. De functies worden dan als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function encodeUrlData($array) {
return urlencode(base64_encode(serialize($array)));
}
function decodeUrlData($string) {
return unserialize(base64_decode($string));
}
?>
function encodeUrlData($array) {
return urlencode(base64_encode(serialize($array)));
}
function decodeUrlData($string) {
return unserialize(base64_decode($string));
}
?>
Natuurlijk zijn er op den duur wel restricties hoeveel data je in een URL kunt proppen (check de RFCs).
En dan nog een test-script om dit alles te testen. Deze code werkt hier waarschijnlijk niet omdat de UTF-8 ondersteuning brak is, dus daarom een linkje naar mijn pastebin en een link naar een werkend voorbeeld.
Gewijzigd op 11/03/2018 21:02:41 door Thomas van den Heuvel