Visa föregående ämne :: Visa nästa ämne |
Startad av: |
Meddelande |
stilun

Medlem i: 6208 dagar Från: Ersmark
Status: Offline
#742917
|
Skrivet: 2021-02-14 20:54
Ämne: Skicka array med webbformulär
|
|
|
Hej!
Jag har försökt att skicka en array med ett webbformulär men misslyckats.
Så här ser koden i formuläret ut:
1: <input name="fspec[][]" type="hidden" value="<?=$fspec ?>">
|
Där $fspec är en 2-dimensionell array.
På mottagarsidan ser det ut så här:
1: $fspec = $_POST['fspec[][]'];
2: echo "<table border='1' cellspacing='0' cellpadding='4'>";
3: foreach($fspec as $fsp)
4: {
5: echo "<tr>";
6: foreach($fsp as $p)
7: {
8: echo "<td>".utf8_encode($p)."</td>";
9: }
10: echo "</tr>";
11: }
12: echo "</table>";
|
Vad jag kan förstå överförs inte arrayen till mottagarfilen. Varför? Vad har jag missat eller eventuellt missförstått? |
|
|
_________________ MVH
Stig Lundmark
"Pojkar blir aldrig vuxna, det är bara leksakerna som blir dyrare!" |
Till toppen på sidan |
|
Peppe L-G

Medlem i: 5116 dagar Från: Mullsjö
Status: Offline
#742918
|
Skrivet: 2021-02-15 09:42
Ämne:
|
|
|
$fspec = $_POST['fspec[][]']; ska nog vara $fspec = $_POST['fspec'];. |
|
|
|
Till toppen på sidan |
|
stilun

Medlem i: 6208 dagar Från: Ersmark
Status: Offline
#742919
|
Skrivet: 2021-02-15 10:18
Ämne:
|
|
|
Hej Peppe L-G.!
Tack för svar. Ändrade enligt ditt förslag.
Problemet är att jag nu bara får svaret "Array".
Mottagarfilen förstår alltså att det handlar om en Array men innehållet saknas. Vad är felet nu då? |
|
|
_________________ MVH
Stig Lundmark
"Pojkar blir aldrig vuxna, det är bara leksakerna som blir dyrare!" |
Till toppen på sidan |
|
Peppe L-G

Medlem i: 5116 dagar Från: Mullsjö
Status: Offline
#742920
|
Skrivet: 2021-02-15 14:32
Ämne:
|
|
|
Om value="<?=$fspec ?>" är en array så får nog det gömda input-fältet värdet Array, vilket sedan skrivs ut av din PHP-kod. Har du kollat i källkoden som webbläsaren mottar om så är fallet? för då är felet att du tilldelar input-fältet fel värde. |
|
|
|
Till toppen på sidan |
|
stilun

Medlem i: 6208 dagar Från: Ersmark
Status: Offline
#742921
|
Skrivet: 2021-02-15 15:28
Ämne:
|
|
|
Du har ju förstås helt rätt. Frågan är då vad ska det stå i inputfältet?
Den 2-dimensionella Arrayen bildas på detta sätt:
1: $fspec = array();
2: $fspec[0] = array($antal, "St.", $besk, $apris, $spris);
3: $fspec[1] = array($antal, "St.", $besk, $apris, $spris);
4: osv ......
|
Där $fspec[] representerar varje rad i arrayen. Jag vet inte i förväg hur många rader som finns, därav den 2-dimensionella arrayen.
Om jag loopar genom arrayen på formulärsidan med:
1: echo "<table border='1' cellspacing='0' cellpadding='4'>";
2: foreach($fspec as $fsp)
3: {
4: echo "<tr>";
5: foreach($fsp as $p)
6: {
7: echo "<td>".$p."</td>";
8: }
9: echo "<tr>";
10: }
11: echo "</table>";
|
Får jag då en prydlig tabell med alla värden som jag vill ha det. Men det funkar tydligen inte på mottagarsidan. |
|
|
_________________ MVH
Stig Lundmark
"Pojkar blir aldrig vuxna, det är bara leksakerna som blir dyrare!" |
Till toppen på sidan |
|
Peppe L-G

Medlem i: 5116 dagar Från: Mullsjö
Status: Offline
#742922
|
Skrivet: 2021-02-15 19:29
Ämne:
|
|
|
Istället för att namnge inputfältet name="fspec[][]" så behöver du nog använda name="fspec[0][]", men där nollan så klart byts ut mot en etta på nästa rad, och sedan mot en tvåa på raden därefter, och så vidare. Annars vet nog inte PHP hur den återskapade arrayen ska se ut. |
|
|
|
Till toppen på sidan |
|
harald_b


Medlem i: 5374 dagar Från: Tavesta
Status: Offline
#742923
|
Skrivet: 2021-02-16 12:45
Ämne:
|
|
|
Om man skall skicka komplext data (som t.ex arrayer) i ett dolt fält i ett webbformulär brukar ofta JSON vara en mycket bra lösning:
1: <input name="fspec" type="hidden" value="<?=htmlspecialchars(json_encode($fspec)) ?>">
|
1: $fspec = json_decode($_POST['fspec']);
|
Bara viktigt att tänka på är att arrayer som består av nyckel-värde-par blir object när de förs över från php till json.
Men det finns fler sätt att serialisera data:
json_encode/json_decode Bygger på javascript, och är en standard som förstås av de flesta programspråk.
serialize/unserialize Specialiserat på php-data, men förstås inte i så hög grad av andra programspråk.
I normalfallet brukar jag förorda JSON, eftersom det underlättar om man t.ex skall komma åt datat från klientsidan. |
|
|
_________________ R.r - Ett fritt affärssystem |
Till toppen på sidan |
|
stilun

Medlem i: 6208 dagar Från: Ersmark
Status: Offline
#742924
|
Skrivet: 2021-02-17 10:23
Ämne:
|
|
|
Hej harald_b!
Tusen tack för hjälpen. Det funkade bra med JSON. Testade också med serialize/unserialize. Funkade också bra.
Jag hade nog på känn att man måste förpacka arrayen på något vis för att sedan packa upp den på mottagarsidan.
Alltid lär man sig något! |
|
|
_________________ MVH
Stig Lundmark
"Pojkar blir aldrig vuxna, det är bara leksakerna som blir dyrare!" |
Till toppen på sidan |
|
Peppe L-G

Medlem i: 5116 dagar Från: Mullsjö
Status: Offline
#742925
|
Skrivet: 2021-02-17 10:35
Ämne:
|
|
|
Jag som totalt missuppfattat, trodde du skulle visa alla värden i input-fält så användaren kunde ändra dem ^^'
Men om användaren inte ska kunna ändra arrayen så skulle du lika gärna kunna spara den i sessionen? |
|
|
|
Till toppen på sidan |
|
harald_b


Medlem i: 5374 dagar Från: Tavesta
Status: Offline
#742926
|
Skrivet: 2021-02-17 12:37
Ämne:
|
|
|
Ja. Sessionsvariabler är helt klart att föredra om det finns risker med att användaren kan manipulera datat, eller om det finns risker ifall datat skulle komma på avvägar.
Sessionsvariabler är däremot inte åtkomliga från klientsidan eller tredje part, om det är det som är poängen.
Sessionsvariabler spar trafik och gör koden mindre komplex, jämfört med att skicka data fram och tillbaka i formulär. |
|
|
_________________ R.r - Ett fritt affärssystem |
Till toppen på sidan |
|
stilun

Medlem i: 6208 dagar Från: Ersmark
Status: Offline
#742927
|
Skrivet: 2021-02-17 12:56
Ämne:
|
|
|
Jag hade ju inte nämnt att formuläret hämtar data från ett webbhotell och mottagarfilen ligger på ett annat webbhotell. Innan jag ska överföra data till databasen i det andra webbhotellet vill jag kunna uppdatera informationen vid behov.
Därför tror jag nog inte att man kan använda sessioner, eller? Det hade ju annars varit det enklaste. Jag såg det hela närmast som en utmaning.
Det är endast tänkt för mitt eget bruk så att säga. De aktuella filerna ligger inte ute på någon offentlig hemsida. |
|
|
_________________ MVH
Stig Lundmark
"Pojkar blir aldrig vuxna, det är bara leksakerna som blir dyrare!" |
Till toppen på sidan |
|
harald_b


Medlem i: 5374 dagar Från: Tavesta
Status: Offline
#742928
|
Skrivet: 2021-02-17 14:22
Ämne:
|
|
|
Nej. I det läget är sessionsvariabler inte ett alternativ. Här är det ju en tredje part som skall ta del av datat. |
|
|
_________________ R.r - Ett fritt affärssystem |
Till toppen på sidan |
|
|