While loop

    • FangorN wrote:

      Ugh, arrays lijken mij een betere aanpak :p.

      En prijs is in principe informatie die je hebt, dus die hoef je niet te POSTen.

      Anders zou iemand zichzelf een korting kunnen geven :).

      En als je de prijs dan toch uit de database trekt voor een controle, waarom gebruik je die prijs dan niet direct? :)
      prijs heb ik niet. Ik heb geen van de gegevens.
      Dit moet allemaal worden opgegeven.
    • Ik zou toch je formulier anders gaan opbouwen en verwerken, dan moet je geen kromme oplossing gebruiken als dat.

      Je form bijvoorbeeld:

      HTML Source Code

      1. <form method="post">
      2. <table>
      3. <tr>
      4. <td>Prijs:</td>
      5. <td>
      6. <input type="number" name="price[1122]" value="123">
      7. </td>
      8. <td>Aantal:</td>
      9. <td>
      10. <input type="number" name="quantity[1122]" value="10">
      11. </td>
      12. </tr>
      13. </table>
      14. </form>
      Display All


      Waarbij 1122 het ID is is dat je uitleest vanuit je database.
      De rows in dat formmulier kan je dynamisch opbouwen met hetgeen je selecteert uit je database.

      Verwerking lees je dan gewoon je $_POST['price'] en je $_POST['quantity'] uit.
      Dit zal een array zijn in deze vorm:

      Source Code

      1. [
      2. 1122 => 123,
      3. 2233 => 456,
      4. ]

      Hierover kan je dan ook itereren:

      PHP Source Code

      1. <?php
      2. foreach ($_POST['price'] as $id => $price) {
      3. // verdere verwerking
      4. }
    • Zoals @Aaron hierboven aangeeft heeft hij geen enkele informatie, dus ook geen product id's ofzo.

      Neemt niet weg dat e.e.a. eenvoudiger kan. Je kunt alle velden die de productdata samenstellen batchgewijs toevoegen. Hierbij voorzie je alle velden van array-haken zonder een specifieke index. Je hebt dan geen JavaScript-constructies of wat dan ook nodig die tellers mee laten lopen. Je kunt simpelweg itereren over een van de productdata-velden en dat dan als index gebruiken om de andere bijbehorende velden aan te spreken. Dus wat @pottink, @D.Oomens en ik al min of meer voorstelden.

      Om toch ten overvloede maar een voorbeeld te geven:

      HTML Source Code: productform.htm

      1. <!DOCTYPE html>
      2. <html>
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>dynamisch formulier</title>
      6. <script
      7. src="https://code.jquery.com/jquery-1.12.4.min.js"
      8. integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
      9. crossorigin="anonymous"></script>
      10. <style type="text/css">
      11. * { font-family: sans-serif; }
      12. .js-product { font-size: 10pt; margin: 5px 0; }
      13. </style>
      14. </head>
      15. <body>
      16. <form action="productform.process.php" method="post">
      17. <div id="js-productContainer">
      18. </div>
      19. <button type="button" id="js-addField">add field</button>
      20. <button type="submit">go</button>
      21. </form>
      22. <script type="text/javascript">
      23. //<![CDATA[
      24. $().ready(function() {
      25. $('#js-addField').click(function(e) {
      26. e.preventDefault();
      27. var html =
      28. '<div class="js-product">\
      29. product <input type="text" name="product[]">\
      30. cost <input type="text" name="cost[]">\
      31. quantity <input type="text" name="quantity[]">\
      32. </div>';
      33. $('#js-productContainer').append(html);
      34. });
      35. });
      36. //]]>
      37. </script>
      38. </body>
      39. </html>
      Display All


      PHP Source Code: productform.process.php

      1. <?php
      2. // debugging functies
      3. function escape($in) {
      4. return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
      5. }
      6. function dump($in) {
      7. if (is_array($in)) {
      8. $in = print_r($in, true);
      9. }
      10. echo '<pre>'.escape($in).'</pre>';
      11. }
      12. // voor correcte output
      13. header('Content-Type: text/html; charset=UTF-8');
      14. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      15. // dump post
      16. dump($_POST);
      17. echo '<hr>';
      18. // itereren over $_POST
      19. if (isset($_POST['product'])) {
      20. foreach ($_POST['product'] as $index => $product) {
      21. $cost = $_POST['cost'][$index];
      22. $quantity = $_POST['quantity'][$index];
      23. echo 'product: '.escape($product).', cost: '.escape($cost).', quantity: '.escape($quantity).'<br>';
      24. }
      25. } else {
      26. echo 'no products present...';
      27. }
      28. } else {
      29. echo 'nothing posted...';
      30. }
      31. ?>[end]
      Display All
      Je hebt dus behalve voor het interactief toevoegen van velden verder geen enkele JavaScript nodig.