array waarden versturen naar andere pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert Jansen

Robert Jansen

11/03/2018 14:56:33
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$States = array("Alaska", "Alabama", "Arkansas", "New York", "washington");

$name = "click here";

//for($x = 0; $x < $arrlength; $x++) {
    
    $States[] = '<a href="otherpage.php?name=' . $States . '" title="">' . $name .'</a>';
//}
echo implode(',', $States);
 
PHP hulp

PHP hulp

28/03/2024 15:43:00
 
- Ariën  -
Beheerder

- Ariën -

11/03/2018 15:01:50
Quote Anchor link
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.
Gewijzigd op 11/03/2018 15:11:49 door - Ariën -
 
Robert Jansen

Robert Jansen

11/03/2018 15:21:32
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach ($States as $value){  
    echo '<a href="otherpage.php?name=' . $value . '" title="">' . $name .'</a>';
    }
 
- Ariën  -
Beheerder

- Ariën -

11/03/2018 15:25:22
Quote Anchor link
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 -
 
Thomas van den Heuvel

Thomas van den Heuvel

11/03/2018 17:26:47
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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 more stuff

    return urlencode($out);
}

?>

Dan moet het array nog omgezet worden naar een string. Een manier om dit te doen is serialize().
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 = serialize($array); // return value
    // do more stuff

    return urlencode($out);
}

?>

In principe hebben we nu genoeg code voor iets werkends. Dan is daar nog de functie om alles weer uit te pakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// 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)
PHP script in nieuw venster Selecteer het PHP script
1
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));
}

?>

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.