[PHP]data uit array terugplaatsen in form

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik submit een bestel form met daarin aantallen en producten. Het veld voor de producten ziet er zo uit:
code:
1
<input name="product[<?php echo $product_nr ?>]" type="text" size="2">



Die zet ik in een array waaruit ik een overzicht genereer.
PHP:
1
2
3
4
5
6
7
foreach($_POST['product'] as $key => $line)
    {
         if($_POST['product'][$key] > null) //als er in de input een aantal staan
            {

                        }
       }


Nu wil ik de gebruiker de mogelijkheid geven om terug te gaan naar de pagina waar je producten selecteerd om bv nog iets toe te voegen. Ik wil nu natuurlijk ook de aantallen laten zien de je al hebt. Ik moet dus het input veld weer vullen met de waarde die opgegeven is...

Nu heb ik de volgende oplossing al deels werken:
Ik heb in mijn overzicht pagina een form met hidden input waar ik de data uit de array nogmaals in zet. Door hier op "submit" te klikken post je de data weer terug naar de pagina waar je producten selecteerd.

Alleen hoe kan ik hier uit de terug geposte array bij het juiste veld weer het juiste aantal tonen?
De array doorlopen tot het productid wat uit de database komt (daar komen de producten vandaan) gelijk is aan de gene in de array en dan het aantal echo'en.. maar hoe doe je dit?

Acties:
  • 0 Henk 'm!

Anoniem: 174951

PHP:
1
echo $_POST['product'][$key];


lijkt me? Daarin staat toch de value van het tekstveld? En die value is toch het aantal producten... zo niet dan begrijp ik het nog niet zo... en moet je ff wat extra uitleg geven.

een:

PHP:
1
print_r($_POST['product']);


kan ook wat duidelijkheid hierin verschaffen.

edit:

als je trouwens for each gebruikt, wordt the "as" de array, na de foreach staaan je array-keys dus in $key en de waardes in $line!

[ Voor 68% gewijzigd door Anoniem: 174951 op 22-11-2006 12:11 ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 09:58
Een session is hier handiger voor :)
Dan kun je gewoon value="<?= $_SESSION['product'][$id_uit_db]; ?>" doen?

[ Voor 11% gewijzigd door man-o-script op 22-11-2006 12:09 ]

//


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
man-o-script schreef op woensdag 22 november 2006 @ 12:08:
Een session is hier handiger voor :)
Dan kun je gewoon value="<?= $_SESSION['product'][$id_uit_db]; ?>" doen?
Nee want ik post nog nix naar de database..

Gebruiker selecteerd > post
Er wordt een overzicht getoond, klik op bestellen dan gaat alles zo de database in.
Klik je op "Terug" oid dan submit je het hidden form weer terug naar de producten pagina en kan je dus nog meer producten selecteren, maar de producten die je al aangegeven hebt moeten in de lijst ook met de waarde die je ze in eerste instantie gegeven hebt...

BV:
Product Aantal
Brood 1
Melk <-- niet opgegeven
Cola <-- niet opgegeven
Sinas 3

[ Voor 12% gewijzigd door ViNyL op 22-11-2006 12:18 ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 09:58
Dus als je dan bij het laden van de pagina met het overzicht de geposte data in die session zet, kun je die als iemand op back klikt weer uitlezen in de velden die daar staan. Op bovenstaande manier dus, klopt dan toch?

Ingevulde velden --> Klikt verder --> Opslaan in Session --> Weergeven overzicht
Klikt op terug --> Weergeven invulvelden --> Opgegeven waardes weeregeven vanuit Session

En om je kijken of er wel een opgegeven waarde is voor een product kun je isset gebruiken.

[ Voor 38% gewijzigd door man-o-script op 22-11-2006 12:23 ]

//


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja maar hoe... Want de pagina bevat 1000 producten. Ik kan de data in de array bv aan de hand van productid matchen en dan kijken of die is opgegeven...

Ik doe nu terwijl ik de lijst met producten uit de database haal voor ieder product dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
foreach($_POST['product'] as $key => $line)
 {
   if ($_POST['product'][$key] > null)
   {
    if ($_POST['product'][$key] == $product_nr)  //<-- product_nr komt uit de database
     {
?>                                  
<input name="product[<?php echo $product_nr ?>]" type="text" size="2" value="<?php echo $_POST['product'][$key];  ?>"></th>
<?php
     } else {
?>                                      
      <input name="product[<?php echo $product_nr ?>]" type="text" size="2">
<?php   
     }
   }
 }
?>      

Maar dat werkt dus niet :) (Mogelijk erg fout)
man-o-script schreef op woensdag 22 november 2006 @ 12:20:
Dus als je dan bij het laden van de pagina met het overzicht de geposte data in die session zet, kun je die als iemand op back klikt weer uitlezen in de velden die daar staan. Op bovenstaande manier dus, klopt dan toch?

Ingevulde velden --> Klikt verder --> Opslaan in Session --> Weergeven overzicht
Klikt op terug --> Weergeven invulvelden --> Opgegeven waardes weeregeven vanuit Session

En om je kijken of er wel een opgegeven waarde is voor een product kun je isset gebruiken.
Hoe zou dat met isset gaan dan?

[ Voor 29% gewijzigd door ViNyL op 22-11-2006 12:26 ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 09:58
Is ook een manier zo, maar wat is dan het probleem?

Persoonlijk zou ik gewoon de tabel met invulvelden opbouwen vanuit de productendatabase en dan bij ieder input veld kijken of er een waarde in de post (of Session) staat.
PHP:
1
<? if(isset($_POST['product'][$product_nr]) && $_POST['product'][$product_nr] > null) echo $_POST['product'][$product_nr]; ?>


Isset is in dit geval wat overbodig, maar persoonlijk zou ik dan ook geen Session vullen met producten waarbij de waarde 0 is gebleven.

[ Voor 16% gewijzigd door man-o-script op 22-11-2006 12:30 ]

//


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Nee ik wil ook geen session vullen met producten die 0 zijn gebleven..Op de overzicht pagina staan alleen de producten die je aangeven hebt. Wil je nog meer producten bestellen wil ik alleen de gene vullen die je al aangegeven hebt met het aantal wat je hebt opgegeven...

Acties:
  • 0 Henk 'm!

Anoniem: 174951

Wat is het probleem nou? Ik snap nog steeds niet wat niet lukt... vind het vrij onduidelijk moet ik zeggen. Allereerst vraag je hoe je die array nou uitleest... heb je je foreach loop volgens mij verkeerd, en stel ik je voor de hele array eens te (print_r)'en, zodat je kan zien hoe hij is opgebouwd. Zodra je dat weet lijkt me dat wat je wil bereiken vrij eenvoudig te doen is, of zie ik het nou verkeerd?

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja je begrijpt me verkeerd. Me array werkt prima...

Ik heb een lijst met producten, die bestaan uit een input zoals in me first post staat. Bestaat dus uit productnummer en aantal van het product.
Die post ik naar een overzicht pagina, zodat de gebruiker kan zien wat er allemaal op zijn bestelling komt. Ik verwerkt de array ook weer (gelijkertijd) in een form met hidden inputs waar ook weer het productnummer en het aantal in staat.
Je het hidden form submitten zodat je teruggaat naar de pagina met producten om eventueel nog wat aan je bestelling toe te voegen.
Ik wil alleen wel weer dat de producten die al op je lijst stonden weer in de lijst met alle producten staan en het aantal wat je er van gekozen hebt...
Dat laatste stukje krijg ik niet voor elkaar.. Dus hoe zorg ik ervoor dat de de aantallen van een product weer in de lijst met alle producten ertussen komen met het aantal wat je had gekozen....

Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 09:58
Had ik toch al verteld? :p

Ten eerste kun je echt beter een session gaan gebruiken ipv een hidden form met een submit, nu werkt immers de back knop van je browser ook niet goed...

Als je dan weer terugkomt op de pagina met invulvelden kun je toch gewoon per veld gaan checken of er al eerder een waarde voor is opgegeven? Zie php regeltje hierboven, daarmee moet je er toch wel uitkomen?

//


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
hmm ik kom er op dit moment niet uit. Ik loop een beetje stuk op dat session verhaal en dat regeltje hierboven... Misschien kijk ik er al te lang tegen aan...

PHP:
1
<? if(isset($_POST['product'][$product_nr]) && $_POST['product'][$product_nr] > null) echo $_POST['product'][$product_nr]; ?>


Wat is hier bv die $_POST['product'][$product_nr]? Niet wat in de session zit neem ik aan ? En hoe kijk ik of als bv "Melk" in me session heb met als aantal 10 tijdens het opbouwen van mijn product lijst dat ik bij "Melk" ben en dat die waarde 10 moet krijgen.. ?

[ Voor 60% gewijzigd door ViNyL op 22-11-2006 14:04 ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 09:58
Bovenstaand regeltje was op basis van dat hidden form, niet met een session.

Dat $product_nr haalde je uit de database toch? Neem aan dat dat de unieke ID is van het product welke ook als key in de post array voorbij komt?
Dan kun je die toch ook gewoon weer zo aanroepen met $_POST['product'][$product_nr]?

Regeltje kun je zo gebruiken, maar dan moet je wel die foreach die je nu hebt vervangen door een while loop van wat er uit je database komt aan producten.

PHP:
1
<INPUT type="text" value="<? if(isset($_POST['product'][$product_nr]) && $_POST['product'][$product_nr] > null) echo $_POST['product'][$product_nr]; ?>">


Als eerder al id 457 (bijvoorbeeld Melk, 9 stuks) is opgeslagen als $_POST['product'][457] => 9
dan kun je tijdens het opbouwen met bovenstaand regeltje nakijken of $_POST['product'][457] überhaupt bestaat en of deze groter is dan null. Is dat het geval dan kun je de inhoud van deze laten zien in de value.

[ Voor 19% gewijzigd door man-o-script op 22-11-2006 14:17 ]

//


Acties:
  • 0 Henk 'm!

Anoniem: 174951

je weet toch de waarde van een array item, als deze groter dan 0 is... is dat product dus besteld geweest... lijkt me toch geen enkel probleem? Zowiezo kun je bij getallen beter 0 gebruiken dan null, dat slaat meer op is_null ofzo.

in je foreach gebruik je dan:
PHP:
1
2
3
4
5
6
7
8
9
<?php
foreach($_POST['product'] as $key => $line)
    {
          if($line > 0) //als er in de input een aantal staan
            {
              echo "product met productnummer " .$key. " heeft " .$line. " bestellingen";
             }
       }
?>
Pagina: 1