17. september 2007 - 07:22Der er
11 kommentarer og 1 løsning
POST et array med php
Hej med jer...
Jeg har en form der skal sende et array med method=POST. Jeg danner selv arrayet ud fra nogle data, og det kan blive nogle hundrede enheder langt. Brugeren skal også sende et par almindelige tekstfelter med samme POST.
Den eneste måde jeg lige kan komme på, er at lave en <select> multiple med alle elementer prevalgt, men brugeren har på ingen måde behov for at se alle de valgte elementer, og de skal heller ikke kunne vælge nogen enheder fra. Jeg kan selvfølgelig disable den, men er der ikke en måde hvor jeg kan få et <input type=hidden> til at indeholde et array? Eller en anden måde jeg kan få PHP til at POSTE et array?
Jeg har overvejet at lægge den multiple select på en display:hidden div, og så gøre den synlig idet man submitter, så den kommer med - men det er ærlig talt ikke en særlig sexet løsning :-(
Jeg har også kikket lidt på HttpRequest og HttpRequest::addPostFields. Det ser på en eller anden måde lidt mere fornuftigt ud, men jeg er sku ikke helt sikker på hvordan jeg skal gøre. :-(
Er der nogen der kan give mig et simpelt kode eksempel, eller har en god ide?
hmmm ... jeg har brug for noget der kan presse et array gennem en HTTP request med POST data
kan du ikke forklare mig hvordan serialize kan hjælpe mig dér?
I øvrigt har jeg via PHP gemt alle data i nogle javascript arrays, så med mindre jeg selv skal bygge requesten op, så har jeg ikke adgang til PHP i det øjeblik formen submittes (ups - så burde spørgsmålet måske være under javascript?? ... nej - ikke hvis nogen her kan vise mig (med kode eksempel!) hvordan jeg selv fyrer en HTTP request med POST data afsted)
Jeg skal have sendt en masse mobilnumre til en sms gateway, og de skriver i deres dokumentation at jeg så skal POSTe et array recipient[] med et nummer i hvert element i arrayet.
Det er mange numre, og jeg kan ikke se nogen fornuftig grund til at brugeren skal plages med de eksakte numre for at kunne sende en sms afsted.
Grunden til at jeg har smidt numrene ud i javascript arrays er at de er delt op geografiskt, og brugeren der sender en sms skal kunne bestemme hvilke områder en given sms skal sendes til.
Det vil altså sige at min javascript sørger for at generere et array recipient af numre der skal sendes til, og så skal jeg have det POSTet til sms gatewayen.
Jeg har nu lagt dem alle ind i en multiple select box, og det fungerer sikkert (har ikke haft tid til at teste endnu) ... men det er lidt ligegyldigt at brugeren kan se en masse numre!
Som Ole siger så står det lidt uklart hvad det du har og vil lave, men i tilfælde af dit array er lavet i php kan du som windcape sende det ved hjælp af serialize. <input type="hidden" name="langtArray" value="<?php echo serialize($mitArray);"> På modtagersiden convertere du lantArray variablen tilbage til et array $modtagetArray = unserialize($_POST['langtArray']);
OK - jeg har tydeligvis ikke fået forklaret mig godt nok. Jeg prøver lige igen så: Jeg har en masse mobil numre delt op i geografiske områder i min database. Jeg lader PHP hente disse numre ud i javascript arrays på en html/php side. på den side er der også en form hvor brugeren dels kan krydse af hvilke områder han gerne vil sende en sms til, og dels et felt hvor han kan skrive sms teksten i. Denne sides form POSTer indholdet til en smsgateway der skal have en række foruddefinerede felter. Heriblandt et felt "recipient" der ifølge smsgatewayens API enten skal indeholde et mobil nummer, eller - hvis der skal sendes til flere mobiler - et array recipient[] der indeholder alle de numre sms'en skal sendes til.
Jeg skal sende til en masse numre, så jeg skal have lavet det her array. Jeg har selv lavet en multiple selectbox hvor jeg lader mit javascript manipulere indholdet, og så selecter jeg alle numre i den, inden jeg submitter formen. Men det er ikke en særligt lækker løsning. Der er ikke nogen grund til at brugeren skal se 150 løsrevne telefonnumre. Det kan alligevel ikke checke om de er korrekte.
fedt! jeg bruger ikke de mange checkboxe, for det ser pænt dumt ud med 300 unavngivne checkboxe efter hinanden. Men tricket med name="recipient[]" virker fint :-D
Jeg har nu en <select name="recipient[]" multiple="multiple" rows="3" style="width:100px"> </select>
og så har jeg noget javascript der dynamisk bygger listen op med blandt andet: var sendesTil = document.getElementById("recipient[]"); var newOption = new Option(smsNummer,smsNummer); newOption.selected = "selected"; sendesTil.options[sendesTil.options.length] = newOption;
Det står stadig på siden, men det er noget kønnere end checkboxene.
Jeg har endnu ikke prøvet at se om man evt. kunne gøre det samme med hidden fields, men opstår behovet, så kender jeg i hvert fald nu en ting at undersøge :-)
Tak for hjælpen allesammen. Smider du et svar windscape, så smækker jeg en håndfuld points efter dig!
Windcape: nu æder jeg pointsene selv, selvom du retmæssigt burde have dem. Men det er noget rod med åbne spørgsmål.
Hvis du vågner af din dvale, og gerne vil have pointene, så skrive det her, så vil jeg oprette et nyt spørgsmål med dine points!
Hvis nogen skulle være i tvivl, så var det tricket med at navngive mine input felter name="navn[]" der fungerede for mig.
Synes godt om
Ny brugerNybegynder
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.