hoe krijg ik de data uit een html formulier zo in de arrys in $_post()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Douwe Jong

Douwe Jong

22/12/2018 17:09:00
Quote Anchor link
Halo,
Ik heb een probleem waarover ik een vraag wil stellen op het PHP-forum.
Ik ben nieuw hier en het koste me al een uur zoeken om uit te vinden waar ik een topic kan starten...
Dat heb ik gevonden maar nu...

Mijn eigenlijke vraag heeft te maken met het op de juiste manier in een array krijgen van data uit een HTML-form,zodat ik een database tabel met eenmaal op submit drukken kan updaten. Ik heb mijn vraag duidelijk op papier staan maar om duidelijk te maken wat waar fout gaat heb ik ook 2 php pagina's en 4 schermafdrukken nodig.
Ik zie hier geen mogelijkheid om dit bijvoorbeeld in .pdf formaat als bijlage bij mijn tekst te voegen.
De hele website waar het voor is nog in een testfase en kan dus niet even snel online gezet worden.

Hoe kan ik mijn topic toch indienen?

Vriendelijke groet,
Douwe
Gewijzigd op 22/12/2018 19:07:36 door - Ariën -
 
PHP hulp

PHP hulp

28/03/2024 12:45:33
 
- Ariën  -
Beheerder

- Ariën -

22/12/2018 17:36:22
Quote Anchor link
Kan je jouw probleem en relevante code (max. 20 regels) hier plaatsen tussen [code] en [/code] tags?
Gewijzigd op 22/12/2018 17:36:57 door - Ariën -
 
Douwe Jong

Douwe Jong

22/12/2018 17:43:43
Quote Anchor link
Helaas zijn het meer dan 20 regels en dan de screenprints met de resultaten nog... anders zou ik de datebase beschikbaar moeten maken. Maar dank voor de redactie. Misschien kan ik de code in stukken hakken?
Gewijzigd op 22/12/2018 17:44:30 door Douwe Jong
 
- Ariën  -
Beheerder

- Ariën -

22/12/2018 17:46:21
Quote Anchor link
Ik kan me niet indenken dat er voor het oplossen van een probleem vele tientallen regels aan code nodig zijn. Je kan het vast tot minimale code proberen te brengen.
 
Douwe Jong

Douwe Jong

22/12/2018 17:50:34
Quote Anchor link
Ik zou kunnen proberen om alleen het formulier waar het $_POST array uit voort komt te plaatsen maar of men dan het probleem begrijpt, ik weet het niet
 
- Ariën  -
Beheerder

- Ariën -

22/12/2018 18:06:11
Quote Anchor link
Give it a try ;-)
 
Ozzie PHP

Ozzie PHP

22/12/2018 18:19:15
Quote Anchor link
Oké ... dit is dus je vraag:

"Mijn eigenlijke vraag heeft te maken met het op de juiste manier in een array krijgen van data uit een HTML-form,zodat ik een database tabel met eenmaal op submit drukken kan updaten."

Wat lukt je niet? Waarop loop je vast?
 
- Pepijn  -

- Pepijn -

22/12/2018 18:37:18
Quote Anchor link
Het zou helpen om wat code te zien,

probeer ons te voorzien van het HTML formulier en het stuk code dat de POST data om moet zetten naar een database query, wat gaat er fout?
Krijg je een error?

Wat is de uitkomst wanneer je iets soortgelijks als in je script zet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {  
     print_r($_POST['formnaam']); /* netjes de array weergeven ;
                                  pas "formnaam" aan naar de naam van jouw formulier
                                  je kunt ook print_r($_POST); gebruiken om alle POST
                                  waarden te printen */

} // wanneer er POST data op deze pagina actief is
?>
Gewijzigd op 22/12/2018 18:41:24 door - Pepijn -
 
Douwe Jong

Douwe Jong

22/12/2018 18:58:17
Quote Anchor link
Jongens,
Ik vroeg hier alleen hoe kan ik een bericht plaatsen met meerdere "bijlage's"
Dat is me inmiddels met wat aanwijzingen van Ariën gelukt.
Dit staat in het daarvoor bedoelde segement.

Mvg,
Douwe


Hallo,

Ik heb hulp nodig bij het oplossen van een probleem waar ik zelf als beginner met php niet uit kom.

Waar gaat het om:
Er is een database tabel met producten die bereidt en bezorgt kunnen worden bij de klanten.
Er is ook een wisselend dagmenu dat tegen een lagere prijs dan normaal wordt aangeboden.
De status van ieder product moet door de kok, op een gebruiksvriendelijke manier bijgewerkt kunnen worden, soms meerdere malen per dag. Gebruiksvriendelijk is in dit geval, op 1 pagina en voor alle producten tegelijk.
In de database zijn er o.a. de kolommen: SKU (product nummer), Nombre_del_producto (productnaam), Producto_disponible ( product beschikbaar ) en Comida_del_dia ( dagmaaltijd).
Of een product beschikbaar is en maaltijd van de dag is wordt aangegeven met een 1 of een 0 in de betreffende kolom in de database.

Wat heb ik gedaan om dit te realiseren:
Ik haal middels een query de benodigde gegevens van alle producten op uit de database en laat deze zien in een tabel.
Ik voer de Query nogmaals uit maar vervang nu in de tabel de gegevens voor “product beschikbaar” en “maaltijd van de dag” door inputs, respectievelijk een checkbox en een radio button, waarmee de kok de gewenste nieuwe status kan in geven.
Hierna worden de gegevens verstuurt naar “status_bijwerken.php”. Dit is nu, na wat experimenteren, even vereenvoudigd tot een pagina die alleen de arrays in $_POST() laat zien.
Er zijn “hidden inputs” opgenomen om er zeker van te zijn, dat er een 0 als waarde wordt gebruikt, indien een maaltijd niet beschikbaar is en geen dagmaaltijd is. Dit blijkt niet goed te werken! (bij arrays?) Hoe dit op te lossen is dan ook de kern mijn vraag.
Er is voor gekozen om geen “checked”radiobutton te gebruiken want er kan ook, geen dagmaaltijd, zijn.
Onderstaand de code van de tweede quiery en het formulier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo "<form method='post' action='status_bijwerken.php'>";
  echo "<br><b>Introduzca el nuevo estado deseado de los productos:</b> "; // laat de lijst opnieuw zien, maar nu met inputs, zodat de gewenste nieuwe status van de producten gekozen kan worden.  
$sql = "SELECT `SKU`,`Nombre_del_producto`,`Producto_disponible` , `comida_del_dia` FROM `productas` ";
  $result1 = $dbconn->query($sql);  
  echo "<table border= '1'  width='80%'><tr> <th> SKU </th> <th> Nombre_del_producto </th> <th> Producto disponible</th> <th> Comida_del_dia </th> </tr>";
    if ($result1->num_rows > 0) {
   // output data of each row
    while($row = $result1->fetch_assoc()) {            
        $sku = $row["SKU"] ;     
        $nombre = $row["Nombre_del_producto"];        
        echo " <tr>
                 <td><input type='hidden' name = 'Sku[]' value='$sku'> ".$sku."</td>
                 <td><input type='hidden' name = 'Nombre_del_producto[]' value='$nombre'>".$nombre."</td>                  
                 <td> <input type='hidden' name = 'Producto_disponible[]' value='0'> <input type='checkbox' name = 'Producto_disponible[]' value='1'> </td>
                 <td><input type='hidden' name = 'Comida_del_dia[]' value='0'> <input type='radio' name ='Comida_del_dia[]' value='1'></td>
               </tr>";        }
        }
echo "</table><br><input type='submit' name='submit' value='Enviar a la base de datos '></form><br><br>";// stuur nieuwe status naar de database
$dbconn->close();  


In bijgaande screen-prints zie de 1 tabel met de inputs 2 de r_print van het resulterende $_post() array. Je ziet dat er extra regels aangemaakt worden, er zijn 12 producten dus er moeten ook 2 maal 12 status regels zijn.

Zonder de hidden inputs krijg je weer minder status regels dan productregels dus dat gaat ook niet goed.

En regel voor regel updaten wordt zo veel werk voor de kok... er komen nog wel 30 producten bij.
Wie heeft de oplossing?


1 Afbeelding

2 Afbeelding
Gewijzigd op 22/12/2018 19:05:49 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

22/12/2018 19:00:59
Quote Anchor link
Ik heb je vraag aan dit topic toegevoegd!
Gewijzigd op 22/12/2018 19:06:22 door - Ariën -
 
Adoptive Solution

Adoptive Solution

22/12/2018 23:24:47
Quote Anchor link
Ik heb niet direct een idee wat de bedoeling is.

Gaat het om gebruiksgemak voor de kok of de verwerking van de invoer in de database?

Op basis van de code en de afbeeldingen heb ik dit ervan gemaakt :

http://adoptive.2kool4u.net/restaurant/

En dit is de code :

http://adoptive.2kool4u.net/restaurant/index.txt

Wel even e.e.a. aanpassen aan de eigen situatie.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/12/2018 00:38:34
Quote Anchor link
Euh, als je nou eens de SKU de key laat zijn van alle arrays? :/

Het lijkt mij zo dat een SKU geen enkele betekenis heeft voor een kok, dus die kun je rustig weglaten uit het zichtbare gedeelte? Dit is enkel een (intern) nummer om een maaltijd te identificeren.
Gewijzigd op 23/12/2018 00:38:59 door Thomas van den Heuvel
 
Douwe Jong

Douwe Jong

23/12/2018 10:25:31
Quote Anchor link
Volgens mij heb je het heel goed begrepen Adoptive!

Het gaat om beiden het verwerken van de invoer in de database op een voor de kok werkbare manier...

Je hebt het ook nog heel netjes en compleet uitgewerkt, echt niet te geloven.
Ik ga alles nog eens goed bestuderen om het echt te snappen zodat ik deze methode ook kan gebruiken voor het aanpassen van de prijzen.
Ik zal je naam zeker noemen in de header van de pagina. TOP!
Mag ik indien ik dingen niet begrijp daarover nog via een PM of hier in het forum nog verdere uitleg vragen?

Thomas, Je opmerkingen kloppen de vraag was alleen hoe...

MVGr,
Douwe
 
- Ariën  -
Beheerder

- Ariën -

23/12/2018 11:33:12
Quote Anchor link
Bij zeer sterke voorkeur hier in het forum.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/12/2018 15:33:05
Quote Anchor link
Douwe Jong op 23/12/2018 10:25:31:
Thomas, Je opmerkingen kloppen de vraag was alleen hoe...

Nou...
Thomas van den Heuvel op 23/12/2018 00:38:34:
Euh, als je nou eens de SKU de key laat zijn van alle arrays? :/

Veel duidelijker dan dat kan ik het eigenlijk niet zeggen. Ten overvloede toch een voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input name="Nombre_del_producto[<SKU hiero>]" ...>"

(op de plek van <SKU hiero> voer je dus een SKU-nummer in)

Daarnaast, als je geen character encoding selecteert bij het maken van je database connectie, wees dan voorbereid dat je problemen krijgt met accenten en vreemde letters... vooral in vreemde talen.

Daarbij, waar is je ontwerp? Hoe zien jouw schermen en formulieren er uit? Vergelijk dit met het bouwen van een huis. Dan begin je toch ook niet op een zonnige dag met bouwen en zeg je op een zeker moment "dit is het huis wat ik voor ogen had" (of je bereikt dit punt nooit...). Dit doe je aan de hand van een ontwerp, van een blauwdruk. Van een doel waar je naartoe werkt. Waar werk je nu naartoe?

In het ding wat jij aan het bouwen bent komen een aantal disciplines bij elkaar (formulieren en de afhandeling, databases, pagina-opbouw et cetera). Om de interactie goed te begrijpen heb je enige ervaring nodig, maar of dit nu echt ingewikkeld (lees: complex) is? Nee.

Echter, als dit al een uitdaging is, maak je borst maar nat... Maar ook, als je dit weet, deel dit probleem dan op in deelproblemen in plaats van te proberen alles in één keer te tacklen. Begin bijvoorbeeld eens met een soort van mockup, een ontwerp van alle schermen, ga dan eens kijken hoe je dit programmatisch aanpakt. En als je tegen problemen aanloopt, los deze dan in afzondering op in plaats van te proberen dit meteen in je eindoplossing te incorporeren, je maakt het jezelf veel te moeilijk.

Ook lijkt het mij verstandig om vooral eerlijk tegenover jezelf te blijven en als dit te hoog gegrepen is zou ik er misschien niet eens aan beginnen. Of als je jezelf duidelijk kan maken welke onderdelen voor problemen zorgen, dan is dat dus een gebied wat je zelf verder zou kunnen bestuderen om te kijken of je het op die manier op kunt lossen.

Je zult je dus meer moeten bedienen van een systematische aanpak. Want nu krijg ik de indruk dat je aan een formulier begonnen bent en dat je ergens halverwege vaststaat in de blubber, zonder dat je precies weet welke kant je op moet. Nogmaals, wat is het plan precies?
Gewijzigd op 23/12/2018 15:34:17 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.