Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne dodawanie pól formularza oraz grupowanie dodanych rekordów
Forum PHP.pl > Forum > PHP
Norbit_24
Witam,

Chcę zrobić dynamiczne dodawanie pól formularza wszystko działa pięknie gdy chcę powielać jeden input jednocześnie..
Problem pojawia się wtedy gdy chcę powielać dwa inputy jednocześnie czyli jednym pliknieciem w button chce dodać następne dwa inputy: Nazwa oraz Powierzchnia

  1. <script type="text/javascript">
  2. <!--
  3. function dodaj_element(kontener){
  4. var znacznik = document.createElement('input');
  5. znacznik.setAttribute('type', 'text');
  6. znacznik.setAttribute('name', 'powierzchnia[]');
  7. znacznik.className = 'zestawienie_powierzchni';
  8. var kontener = document.getElementById(kontener);
  9. kontener.appendChild(znacznik);
  10. }
  11. //-->
  12.  
  13. <style type="text/css">
  14. <!--
  15. input.zestawienie_powierzchni { display: block; }
  16. -->
  17.  
  18. <div id="zestawienie">Nazwa: <input type="text" name="powierzchnia[]" class="zestawienie_powierzchni"> Powierzchnia:<input type="text" name="m2[]" class="wm2"></div>
  19.  
  20. <input type="button" value="Dodaj kolejne pole" onclick="dodaj_element('zestawienie');" />



Mam jeszcze drugie pytanie. Jak odebrać następnie te dane i zapisać do bazy danych, Nazwa oraz Powierzchnia muszą być w jednym rekordzie.. Nie wiem jak to pogrupować..
  1. foreach ($_POST as $klucz => $tablica ) {
  2. echo 'kluczc: '.$klucz.'<br>';
  3. foreach ($tablica as $nr_wiersza => $warotsc )
  4. echo 'nr wiersza: '.$nr_wiersza.' wartosc :'.$warotsc.'<br>';
  5. }


Z góry dzięki za pomoc.
krowal
Trochę źle to robisz, niby działa, ale potem właśnie masz problemy z odebraniem tego i tak dalej...
Powinieneś przerobić funkcję dodaj_element() tak aby dodawała ci dwa pola naraz, każde z unikalnym indexem - takim samym dla jednej pary, żeby później wiadomo było które dane są do czego. Sam html powinien wyglądać mniej więcej tak (zwróć uwage na 'name' w inputach):
  1. <input type="text" name="powierzchnia[1][powierzchnia]" class="zestawienie_powierzchni">
  2. <input type="text" name="powierzchnia[1][m2]" class="wm2">
  3.  
  4. <input type="text" name="powierzchnia[2][powierzchnia]" class="zestawienie_powierzchni">
  5. <input type="text" name="powierzchnia[2][m2]" class="wm2">
  6.  
  7. <input type="text" name="powierzchnia[3][powierzchnia]" class="zestawienie_powierzchni">
  8. <input type="text" name="powierzchnia[3][m2]" class="wm2">

Wtedy możesz to odebrać z jednego parametru $_POST['powierzchnia'] co zwróci ci tablicę z parami. Później możesz ją sobie łatwo przelecieć za pomocą foreach i wstawić do bazy.
Norbit_24
Dziękuję za odpowiedź.
Stanąłem w tym momencie:

  1. <script type="text/javascript">
  2. <!--
  3. function dodaj_element(kontener){
  4.  
  5. var kontener = document.getElementById(kontener);
  6.  
  7.  
  8. var losowa=Math.floor(Math.random()*10);
  9.  
  10. var znacznik1 = document.createElement('input');
  11. znacznik1.setAttribute('type', 'text');
  12. znacznik1.setAttribute('name', 'powierzchnia[losowa][powierzchnia]');
  13. znacznik1.className = 'zestawienie_powierzchni';
  14. kontener.appendChild(znacznik1);
  15.  
  16. var znacznik2 = document.createElement('input');
  17. znacznik2.setAttribute('type', 'text');
  18. znacznik2.setAttribute('name', 'powierzchnia[losowa][m2]');
  19. znacznik2.className = 'wm2';
  20. kontener.appendChild(znacznik2);
  21.  
  22. }
  23. //-->
  24.  
  25. <style type="text/css">
  26. <!--
  27. input.zestawienie_powierzchni { display: block; }
  28. input.wm2 { display: block; }
  29. -->
  30.  
  31.  
  32. <form action="" method="post">
  33.  
  34. <div id="zestawienie">
  35. Nazwa: <input type="text" name="powierzchnia[][powierzchnia]" class="zestawienie_powierzchni">
  36. Powierzchnia:<input type="text" name="powierzchnia[][m2]" class="wm2">
  37. </div>
  38.  
  39. <div>
  40. <input type="button" value="Dodoaj kolejne pola" onclick="dodaj_element('zestawienie');" />
  41. <input type="submit" value="Wyslij" />
  42. </div>
  43. </form>


I dodaje się tylko jedno pole i nie wiem też z jakimi indeksami..
Proszę o pomoc
Ilware
przetestowałem ten skrypt na ie i mozilli chwilowo nie mam nic więcej ale dodaje prawidłowo po dwa pola tyle razy ile się naciśnie dodaj tylko masz błąd w liczbie losowej,zamień na :

  1. znacznik2.setAttribute('name', 'powierzchnia[' + losowa +'][m2]');


dodało mi pola takie :

  1. <input type="text" name="powierzchnia[3][powierzchnia]" class="zestawienie_powierzchni">
  2. <input type="text" name="powierzchnia[3][m2]" class="wm2">
Norbit_24
Działa, dzięki. Punkty rozdane.
krowal
No ale to raczej nie powinna być liczba losowa, bo jeśli ci się trafi taka sama liczba (po wylosowaniu) to jeden z rekordów ci zginie przy przesyłaniu.
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. var index = 0;
  3. function dodaj_element(kontener){
  4.  
  5. var kontener = document.getElementById(kontener);
  6.  
  7.  
  8. index++;
  9.  
  10. var znacznik1 = document.createElement('input');
  11. znacznik1.setAttribute('type', 'text');
  12. znacznik1.setAttribute('name', 'powierzchnia['+index+'][powierzchnia]');
  13. znacznik1.className = 'zestawienie_powierzchni';
  14. kontener.appendChild(znacznik1);
  15.  
  16. var znacznik2 = document.createElement('input');
  17. znacznik2.setAttribute('type', 'text');
  18. znacznik2.setAttribute('name', 'powierzchnia['+index+'][m2]');
  19. znacznik2.className = 'wm2';
  20. kontener.appendChild(znacznik2);
  21.  
  22. }
  23. </script>
[JAVASCRIPT] pobierz, plaintext

Nie musisz dawać tego kodu JS w komentarzach, już dawno te czasy minęły w których można było trafić na przeglądarkę nie obsługującą tagów <script>.
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.