array waarden versturen naar andere pagina
Hallo,
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:
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:
Je gebruikt in je anchor-tag de variable $States. Maar daar zitten meerdere waarden in. Dus zal je de juiste op moeten noemen. PHP kan immers geen gedachte lezen ;-)
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.
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 -
ok, bedankt voor de info
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.
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.
Als je een array wilt lijmen, voldoet een implode() al voldoende, zoals je eerst had. Die loopt feitelijk al door je array heen. Dus for() en foreach() zijn dan onnodig.
Gewijzigd op 11/03/2018 15:27:23 door - Ariën -
En wat als hier nu speciale karakters in zitten? Of karakters die in URL's een speciale betekenis hebben? In beide gevallen is er een gevaar voor het verkeerd interpreteren van verstuurde/ontvangen gegevens. Beide partijen zullen dus ook afspraken moeten maken over hoe de informatie geïnterpreteerd dient te worden. Deze partijen kunnen namelijk best compleet verschillende websites (of andere entiteiten) zijn, waarbij de andere zijde bij jou informatie afneemt als een dienst. Die moet dan dus ook weten wat deze precies ontvangt, en in welke vorm.
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.
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.
Dan moet het array nog omgezet worden naar een string. Een manier om dit te doen is serialize().
In principe hebben we nu genoeg code voor iets werkends. Dan is daar nog de functie om alles weer uit te pakken:
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:
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.
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




