Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]wysyłanie do bazy danych dynamicznie tworzonych pól
Forum PHP.pl > Forum > Przedszkole
ABDOO
Witam,

utworzyłam formularz, którego część może zostać powielona przez użytkownika. Standardowo w formularzu występuje zestaw pól dotyczących jednego dostawcy, ale użytkownik może kliknąć "Dodaj dostawcę" i zestaw pól pojawi się ponownie, tyle ile użytkownik doda. Nie wiem jednak przesłać te dynamicznie tworzone pola do bazy danych. Utworzyłam dodatkową tabelę w której id z głównej tabeli przypisane będą wartości dla dostawców, ale najwyraźniej pętla użyta w submit.php nie działa, bo w bazie danych pojawia sie tylko jeden nowy wiersz z ostatnim dostawcą.
Dołączam kod i z góry dziękuję za wszelkie rady.

ps. To moje początki z php więc proszę o wyrozumiałość

  1. <?php
  2. if ($result = $mysqli->query("SELECT id FROM job_order ORDER BY id")) {
  3.  
  4. /* determine number of rows result set */
  5. $row_cnt = $result->num_rows;
  6.  
  7. /* close result set */
  8. $result->close();
  9. }
  10. $n =0;
  11. ?>
  12. <form action="submit.php" method="POST">
  13.  
  14. No. <input type="text" name="order_id" value="<?php echo ++$row_cnt;?>"></div> <br/></div></div>
  15.  
  16. <fieldset name="Supplier Accounts" >
  17. <div id="supplier">
  18. <?php ++$n;?>
  19. <table class="full" cellspacing="0">
  20. <tr>
  21. <td colspan="2" class="bordered"> <label>Supplier</label><br/><input type="text" name="supplier" value=""></td>
  22. <td colspan="2" class="bordered"><label>Cost</label><br/><input type="text" name="cost" value=""></td>
  23. <td colspan="2" class="bordered"> <label>Cost Plus Tax</label><br/><input type="text" name="cost_plus_tax" value="">
  24. </td></tr>
  25. </table>
  26. </div>
  27. <input type="text" name="n" value="<?php echo $n;?>" class="hidden">
  28. </fieldset>
  29. <button type="button" name="Submit" onclick="duplicate();">Add supplier</button>
  30.  
  31. <input type="submit" name="Submit" value="Save">
  32.  
  33. </form>
  34.  
  35.  
  36. <script>
  37. var i = 0;
  38. var original = document.getElementById('supplier');
  39.  
  40. function duplicate() {
  41. var clone = original.cloneNode(true); // "deep" clone
  42. clone.id = "supplier" + ++i;
  43. // or clone.id = ""; if the divs don't need an ID
  44. original.parentNode.appendChild(clone);
  45. }
  46. </script>



submit.php:

  1. {
  2. $order_id= addslashes ($_POST['order_id']);
  3.  
  4. $supplier= addslashes ($_POST['supplier']);
  5. $cost= addslashes ($_POST['cost']);
  6. $cost_plus_tax= addslashes ($_POST['cost_plus_tax']);
  7. $supplier_invoice_no= addslashes ($_POST['supplier_invoice_no']);
  8. $sup_issued_on= addslashes ($_POST['sup_issued_on']);
  9.  
  10. $n= addslashes ($_POST['n']);
  11.  
  12.  
  13. }
  14. else
  15. {
  16.  
  17. $order_id = $_POST['order_id'];
  18.  
  19. $supplier=$_POST['supplier'];
  20. $cost= $_POST['cost'];
  21. $cost_plus_tax= $_POST['cost_plus_tax'];
  22. $supplier_invoice_no= $_POST['supplier_invoice_no'];
  23. $sup_issued_on= $_POST['sup_issued_on'];
  24.  
  25.  
  26. $n=$_POST['n'];
  27.  
  28. };
  29.  
  30.  
  31. $x=0;
  32. while($x <= $n){
  33. $x++;
  34. $sql3 = "INSERT INTO suppliers (parent_id, supplier, cost, cost_plus_tax, invoice_no, issued_on )
  35. VALUES ('$order_id','$supplier', '$cost', '$cost_plus_tax', '$supplier_invoice_no', '$sup_issued_on')";
  36. }
nospor
Aby formularz wysylal kilka inputow o tej samej nazwie to muszą one miec nazwe tablicową

czyli nie name="jakiesname"
tylko name="jakiesname[]"

A potem w php pod $_POST['jakiesname'] bedziesz mial tablice wartosci z danych input
szczemp
Cytat(nospor @ 18.08.2015, 09:14:11 ) *
Aby formularz wysylal kilka inputow o tej samej nazwie to muszą one miec nazwe tablicową

czyli nie name="jakiesname"
tylko name="jakiesname[]"

A potem w php pod $_POST['jakiesname'] bedziesz mial tablice wartosci z danych input

Też to stosowałem, ale wymagałem wypełnienia wszystkich pól. Jak się takie rozwiązanie zachowa jeśli niektóre pola będą mogły zostać puste?
Przykładowo w pole name = imie[] uzupełnimy pierwsze, drugie zostanie puste i znowu trzecie będzie uzupełnione.
Czy będzie wyglądało to tak: imie[0] = 'imię', imie[1] = null, imie[2] = 'inneimię'?
Czy może tak: imie[0] = 'imię', imie[1] = 'inneimię'?
nospor
Naprawde tak ciezko sprawdzic? Toz to 30 sekund roboty.... :/

Puste pola beda zawieraly pusty ciag a nie zadne null.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.