Skicka array med webbformulär

PHPportalen Forum Index » Diskutera webbutveckling
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
stilun



Medlem i: 6208 dagar
Från: Ersmark
Status: Offline



#742917
Inlägg Skrivet: 2021-02-14 20:54      Ämne: Skicka array med webbformulär Citera

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:
KOD:
1:
<input name="fspec[][]" type="hidden" value="<?=$fspec ?>">

Där $fspec är en 2-dimensionell array.

På mottagarsidan ser det ut så här:
KOD:
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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Peppe L-G



Medlem i: 5116 dagar
Från: Mullsjö
Status: Offline



#742918
Inlägg Skrivet: 2021-02-15 09:42      Ämne: Citera

$fspec = $_POST['fspec[][]']; ska nog vara $fspec = $_POST['fspec'];.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
stilun



Medlem i: 6208 dagar
Från: Ersmark
Status: Offline



#742919
Inlägg Skrivet: 2021-02-15 10:18      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Peppe L-G



Medlem i: 5116 dagar
Från: Mullsjö
Status: Offline



#742920
Inlägg Skrivet: 2021-02-15 14:32      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande MSN Messenger
stilun



Medlem i: 6208 dagar
Från: Ersmark
Status: Offline



#742921
Inlägg Skrivet: 2021-02-15 15:28      Ämne: Citera

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:
KOD:
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:
KOD:
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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Peppe L-G



Medlem i: 5116 dagar
Från: Mullsjö
Status: Offline



#742922
Inlägg Skrivet: 2021-02-15 19:29      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5374 dagar
Från: Tavesta
Status: Offline



#742923
Inlägg Skrivet: 2021-02-16 12:45      Ämne: Citera

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:
PHP:
1:
<input name="fspec" type="hidden" value="<?=htmlspecialchars(json_encode($fspec)) ?>">

PHP:
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
Visa användarprofil Skicka privat meddelande
stilun



Medlem i: 6208 dagar
Från: Ersmark
Status: Offline



#742924
Inlägg Skrivet: 2021-02-17 10:23      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Peppe L-G



Medlem i: 5116 dagar
Från: Mullsjö
Status: Offline



#742925
Inlägg Skrivet: 2021-02-17 10:35      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 5374 dagar
Från: Tavesta
Status: Offline



#742926
Inlägg Skrivet: 2021-02-17 12:37      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande
stilun



Medlem i: 6208 dagar
Från: Ersmark
Status: Offline



#742927
Inlägg Skrivet: 2021-02-17 12:56      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
harald_b
Moderator



Medlem i: 5374 dagar
Från: Tavesta
Status: Offline



#742928
Inlägget är accepterad som det rätta svaret Skrivet: 2021-02-17 14:22      Ämne: Citera

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
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Diskutera webbutveckling
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic