Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Przesłanie wartości z nowych wierszy POSTEM
Forum PHP.pl > Forum > Przedszkole
denis95x
Mam problem z przesłaniem wartości z nowych wierszy utworzonych wcześniej jQuery.

Kod do tworzenia wiersza w tabeli:

[JAVASCRIPT] pobierz, plaintext
  1. $("#dodaj_wiersz").click(function() {
  2.  
  3.  
  4. var tabelka = document.getElementById('pozycje');
  5. var wierszy = tabelka.rows.length;
  6.  
  7. $('#ilewierszy').val(wierszy);
  8.  
  9. var row ='<tr class="dane" id="'+wierszy+'"><td style="text-align:center;" id="'+wierszy+'">'+wierszy+'</td><td ><input type="text" name="nazwa_pozycji'+wierszy+'" id="nazwa_pozycji" class="form-control" placeholder="Nazwa pozycji / artykułu" /></td><td ><input style="text-align:center;" type="text" name="pkwiu" class="form-control"/></td><td ><input style="text-align:center;" type="text" name="ilosc" id="ilosc" class="form-control" value="0.00" placeholder="0.00" onchange="checkCyfra(this)" /></td><td><select name="jm" data-placeholder="szt" class="selectlist"><option value="">szt</option><option selected="selected" value="szt">szt.</option><option value="usl">usł.</option> <option value="opak">opak.</option><option value="godz">godz.</option><option value="str">str.</option><option value="m2">m2</option></select></td><td ><input style="text-align:center;" type="text" name="cena_netto" id="cena_netto" value="0.00" placeholder="0.00" class="form-control" onchange="checkCyfra(this)" /></td><td ><select name="vat" data-placeholder="%" class="selectlist" ><option value="0">0</option><option selected="selected" value="23">23</option><option value="22">22</option><option value="20">20</option><option value="19">19</option><option value="15">15</option><option value="8">8</option><option value="7">7</option><option value="3">3</option><option value="0">0</option><option value="0">ZW</option><option value="0">NP</option></select></td><td ><input style="text-align:center;" type="text" name="wartosc_netto" id="wartosc_netto" value="0.00" onchange="checkCyfra(this)" class="form-control"/></td><td ><input style="text-align:center;" type="text" name="wartosc_brutto" id="wartosc_brutto" value="0.00" onchange="checkCyfra(this)" class="form-control"/></td></tr>';
  10.  
  11. $('#pozycje').find('tbody').append(row);
  12. });
[JAVASCRIPT] pobierz, plaintext



wiersze dodaje, wszystko super, jednak gdy chciałem to przesłać POSTEM w poniższy sposób nie działa

  1. if ($_POST["action"] == "Zapisz fakturę") {
  2.  
  3. $numer_faktury = $_POST[numer_faktury];
  4.  
  5. $ile_wierszy = $_POST[ilewierszy]; // pobiera z ukrytego inputa nad tabelą - działa
  6.  
  7.  
  8. echo'Faktura VAT '.$numer_faktury.'</br>
  9. wierszy '.$ile_wierszy.'<br />';
  10.  
  11. $i = 1;
  12. while($i <= $ile_wierszy)
  13. {
  14. $n = 'nazwa_pozycji'.$i.'';
  15. echo ''.$_POST[$n].' - ' . $i . '<br />';
  16. $i++;
  17. }
  18.  
  19.  
  20. }

I wynikiem jest :

Faktura VAT FS 1/2015
wierszy 2
TEST1 - 1
- 2

wierszy 2 - owszem zgadza się,
wartość pierwsza też się zgadza, jednak w drugiej już nie pobiera wartości z nazwa_pozycji.

Jak to rozwiązać ?
Inaczej z jQuery to przesłać ?

Powyższy sposób może nie jest idealny ani dobry, ale jakikolwiek mi potrzebny
Randallmaster
Może lepiej zmienić nazwę inputa na: nazwa_pozycji['+wierszy+'], dodaj kwadratowe nawiasy i zobacz co teraz będzie wysyłał formularz.
denis95x
Co ciekawe w zrodle strony po dodaniu nowych wierszy przez jQuery nie pokazuje dodanych tr.
Czy tak powinno byc?
blahy
Zrodlo strony (to co sie dostaje przez prawy -> pokaz zrodlo) pokazuje to co response, ktory zostal wyslany przez serwer, kazda zmiana po stronie klienta nie jest tam uwzgledniana.
Widac je w konsoli developerskiej albo w firebugu jesli uzywasz firefoxa. Tam html bedzie aktualny.
Nie widac poczatkowego html, wiec moze dodane wiersze (i inputy) nie sa w obrebie formularza, ktory submitujesz.
W PHP dumpnij cala zawartosc $_POST.
W konsoli js po kliknieciu na dodaj sprawdz co ci wypisze $(selektor_formularza).serialize() i czy tam sa te dodawane inputy.

Jak nie pomoze, to pokaz strukture html dokumentu.
denis95x
Faktycznie,
nie wyświetla mi ich w konsoli po wpisaniu $(basicForm4).serialize()

pokazuje mi tylko pierwszy wiersz, który był wpisany przed dodawaniem wierszy.

Efekt:
"numer_faktury=FS+1%2F2015&termin_dni=0&termin_data=2015-07-28&data_sprzedazy=2015-07-28&data_wystawienia=2015-07-28&nazwa=&nip=&adres=&kod_pocztowy=&miasto=&nazwa_pozycji1=&pkwiu=&ilosc=0.00&jm=szt&cena_netto=0.00&vat=23
&wartosc_netto=0.00&wartosc_brutto=0.00&ilewierszy=4&wystawiajacy=aaaa&odbierajacy=0"

może błąd jest gdzieś w tym ?

[JAVASCRIPT] pobierz, plaintext
  1. $('#pozycje').find('tbody').append(row);
[JAVASCRIPT] pobierz, plaintext


Struktura html
  1. ...
  2. ...
  3. <form id="basicForm4" method="post" action="">
  4.  
  5. <table id="pozycje" name="pozycje" class="table table-hidaction table-hover mb30">
  6. <tr >
  7. <th width="50" style="text-align:center;">Lp</th>
  8. <th width="300" style="text-align:center;">Nazwa</th>
  9. <th style="text-align:center;">PKWiU</th>
  10. <th style="text-align:center;">Ilość</th>
  11. <th style="text-align:center;">j.m.</th>
  12. <th style="text-align:center;">Cena netto</th>
  13. <th style="text-align:center;">VAT<br />[%]</th>
  14. <th style="text-align:center;">Wartość netto</th>
  15. <th style="text-align:center;">Wartość brutto</th>
  16. </tr>
  17. </thead>
  18.  
  19. <tbody>
  20.  
  21. <tr class="dane" id="1">
  22. <td style="text-align:center;" id="1">1</td>
  23.  
  24. <td>
  25. <input type="text" name="nazwa_pozycji1" id="nazwa_pozycji1" class="form-control" placeholder="Nazwa pozycji / artykułu" />
  26. </td>
  27.  
  28. <td>
  29. <input style="text-align:center;" type="text" name="pkwiu" id="pkwiu" class="form-control"/>
  30. </td>
  31.  
  32. <td >
  33. <input style="text-align:center;" type="text" name="ilosc" id="ilosc" class="form-control" value="0.00" placeholder="0.00" onchange="checkCyfra(this)" />
  34. </td>
  35.  
  36. <td>
  37. <select name="jm" id="jm" data-placeholder="szt" class="selectlist">
  38. <option value="">szt</option>
  39. <option selected="selected" value="szt">szt.</option>
  40. <option value="usl">usł.</option>
  41. <option value="opak">opak.</option>
  42. <option value="godz">godz.</option>
  43. <option value="str">str.</option>
  44. <option value="m2">m2</option>
  45. </select>
  46. </td>
  47.  
  48. <td>
  49. <input style="text-align:center;" type="text" name="cena_netto" id="cena_netto" value="0.00" placeholder="0.00" class="form-control" onchange="checkCyfra(this)" />
  50. </td>
  51.  
  52.  
  53.  
  54. <td>
  55. <select name="vat" id="vat" data-placeholder="%" class="selectlist" >
  56. <option value="0">0</option>
  57. <option selected="selected" value="23">23</option>
  58. <option value="22">22</option>
  59. <option value="20">20</option>
  60. <option value="19">19</option>
  61. <option value="15">15</option>
  62. <option value="8">8</option>
  63. <option value="7">7</option>
  64. <option value="3">3</option>
  65. <option value="0">0</option>
  66. <option value="0">ZW</option>
  67. <option value="0">NP</option>
  68. </select>
  69. </td>
  70.  
  71. <td >
  72. <input style="text-align:center;" type="text" name="wartosc_netto" id="wartosc_netto" value="0.00" onchange="checkCyfra(this)" class="form-control"/>
  73. </td>
  74.  
  75. <td>
  76. <input style="text-align:center;" type="text" name="wartosc_brutto" id="wartosc_brutto" value="0.00" onchange="checkCyfra(this)" class="form-control"/>
  77. </td>
  78.  
  79. </tr>
  80.  
  81. <input type="button" id="dodaj_wiersz" class="jquery-add-row" value="Dodaj wiersz" /> <br />
  82. <input type="hidden" id="ilewierszy" name="ilewierszy" value="1" />
  83.  
  84.  
  85.  
  86. </tbody>
  87.  
  88. ...
  89.  
  90. <input class="btn btn-warning" name="action" type="submit" value="Zapisz fakturę" />
  91.  
  92. </form>


W czym błąd ?
POMOCY ! co_jest.gif

Pomoże ktoś ?
Dalej się z tym męczę sad.gif

Albo może ktoś podsunie jakiś inny pomysł ?
blahy
Sprawdz czy jak dodajesz wiersz to odpowiednio aktualizuje Ci sie wartosc zmiennej: wierszy (2,3,4,...), za pomoca console.log(wierszy) albo konsoli w przegladarce.

Jezeli jest prawidlowa to wydaje mi sie, ze dodaje Ci do formularza wartosc nazwa_pozycji1 (jest na poczatku w html), nazwa_pozycji2 (jak dodajesz jeden wiersz).
Innych wartosci CI nie doda, bo juz w html masz np. pole pkwiu, a pozniej dodajesz kolejne pole z name=pkwiu. To bedzie submitowane jako jedno pole, a nie dwa.

Masz tez np.
<option value="0">0</option>
<option value="0">ZW</option>
<option value="0">NP</option>
w jednym selectcie - to jest obojetne co user wybierze z tych opcji, bo dostaniesz dla kazdej 0.

A tutaj Twoj kod:
  1. <form id="basicForm4" method="post" action="">
  2.  
  3. <table id="pozycje" name="pozycje" class="table table-hidaction table-hover mb30">
  4. <tr >
  5. <th width="50" style="text-align:center;">Lp</th>
  6. <th width="300" style="text-align:center;">Nazwa</th>
  7. <th style="text-align:center;">PKWiU</th>
  8. <th style="text-align:center;">Ilość</th>
  9. <th style="text-align:center;">j.m.</th>
  10. <th style="text-align:center;">Cena netto</th>
  11. <th style="text-align:center;">VAT<br />[%]</th>
  12. <th style="text-align:center;">Wartość netto</th>
  13. <th style="text-align:center;">Wartość brutto</th>
  14. </tr>
  15. </thead>
  16.  
  17. <tbody>
  18.  
  19. <tr class="dane" id="1">
  20. <td style="text-align:center;" id="1">1</td>
  21.  
  22. <td>
  23. <input type="text" name="nazwa_pozycji1" id="nazwa_pozycji1" class="form-control" placeholder="Nazwa pozycji / artykułu" />
  24. </td>
  25.  
  26. <td>
  27. <input style="text-align:center;" type="text" name="pkwiu" id="pkwiu" class="form-control"/>
  28. </td>
  29.  
  30. <td >
  31. <input style="text-align:center;" type="text" name="ilosc" id="ilosc" class="form-control" value="0.00" placeholder="0.00" onchange="checkCyfra(this)" />
  32. </td>
  33.  
  34. <td>
  35. <select name="jm" id="jm" data-placeholder="szt" class="selectlist">
  36. <option value="">szt</option>
  37. <option selected="selected" value="szt">szt.</option>
  38. <option value="usl">usł.</option>
  39. <option value="opak">opak.</option>
  40. <option value="godz">godz.</option>
  41. <option value="str">str.</option>
  42. <option value="m2">m2</option>
  43. </select>
  44. </td>
  45.  
  46. <td>
  47. <input style="text-align:center;" type="text" name="cena_netto" id="cena_netto" value="0.00" placeholder="0.00" class="form-control" onchange="checkCyfra(this)" />
  48. </td>
  49.  
  50.  
  51.  
  52. <td>
  53. <select name="vat" id="vat" data-placeholder="%" class="selectlist" >
  54. <option value="0">0</option>
  55. <option selected="selected" value="23">23</option>
  56. <option value="22">22</option>
  57. <option value="20">20</option>
  58. <option value="19">19</option>
  59. <option value="15">15</option>
  60. <option value="8">8</option>
  61. <option value="7">7</option>
  62. <option value="3">3</option>
  63. <option value="0">0</option>
  64. <option value="0">ZW</option>
  65. <option value="0">NP</option>
  66. </select>
  67. </td>
  68.  
  69. <td >
  70. <input style="text-align:center;" type="text" name="wartosc_netto" id="wartosc_netto" value="0.00" onchange="checkCyfra(this)" class="form-control"/>
  71. </td>
  72.  
  73. <td>
  74. <input style="text-align:center;" type="text" name="wartosc_brutto" id="wartosc_brutto" value="0.00" onchange="checkCyfra(this)" class="form-control"/>
  75. </td>
  76.  
  77. </tr>
  78.  
  79. <input type="button" id="dodaj_wiersz" class="jquery-add-row" value="Dodaj wiersz" /> <br />
  80. <input type="hidden" id="ilewierszy" name="ilewierszy" value="1" />
  81.  
  82.  
  83.  
  84. </tbody>
  85.  
  86.  
  87. <input id="zeby-kliknac" class="btn btn-warning" name="action" type="submit" value="Zapisz fakturę" />
  88.  
  89. </form>
  90.  
  91. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  92.  
  93. $("#dodaj_wiersz").click(function() {
  94.  
  95.  
  96. var tabelka = document.getElementById('pozycje');
  97. var wierszy = tabelka.rows.length;
  98.  
  99. $('#ilewierszy').val(wierszy);
  100.  
  101. var row ='<tr class="dane" id="'+wierszy+'"><td style="text-align:center;" id="'+wierszy+'">'+wierszy+'</td><td ><input type="text" name="nazwa_pozycji'+wierszy+'" id="nazwa_pozycji" class="form-control" placeholder="Nazwa pozycji / artykułu" /></td><td ><input style="text-align:center;" type="text" name="pkwiu" class="form-control"/></td><td ><input style="text-align:center;" type="text" name="ilosc" id="ilosc" class="form-control" value="0.00" placeholder="0.00" onchange="checkCyfra(this)" /></td><td><select name="jm" data-placeholder="szt" class="selectlist"><option value="">szt</option><option selected="selected" value="szt">szt.</option><option value="usl">usł.</option> <option value="opak">opak.</option><option value="godz">godz.</option><option value="str">str.</option><option value="m2">m2</option></select></td><td ><input style="text-align:center;" type="text" name="cena_netto" id="cena_netto" value="0.00" placeholder="0.00" class="form-control" onchange="checkCyfra(this)" /></td><td ><select name="vat" data-placeholder="%" class="selectlist" ><option value="0">0</option><option selected="selected" value="23">23</option><option value="22">22</option><option value="20">20</option><option value="19">19</option><option value="15">15</option><option value="8">8</option><option value="7">7</option><option value="3">3</option><option value="0">0</option><option value="0">ZW</option><option value="0">NP</option></select></td><td ><input style="text-align:center;" type="text" name="wartosc_netto" id="wartosc_netto" value="0.00" onchange="checkCyfra(this)" class="form-control"/></td><td ><input style="text-align:center;" type="text" name="wartosc_brutto" id="wartosc_brutto" value="0.00" onchange="checkCyfra(this)" class="form-control"/></td></tr>';
  102.  
  103. $('#pozycje').find('tbody').append(row);
  104. });
  105.  
  106. $('#zeby-kliknac').click(function(e) {
  107. e.preventDefault();
  108. console.log($('#basicForm4').serialize());
  109. });
  110. </body>
  111. </html>


Dodalem tylko akcje, zeby klikanie w Zapisz fakturę generowalo log z zawartoscia formularza.
i przykladowe wywolanie.
1. log z danymi formularza przy 1 wierszu i po dodaniu 2 wiersza:

nazwa_pozycji1=&pkwiu=&ilosc=0.00&jm=szt&cena_netto=0.00&vat=23&wartosc_netto=0.00&wartosc_brutto=0.00&ilewierszy=1

nazwa_pozycji1=&pkwiu=&ilosc=0.00&jm=szt&cena_netto=0.00&vat=23&wartosc_netto=0.00&wartosc_brutto=0.00&ilewierszy=2&nazwa_pozycji2=&pkwiu=&ilosc=0.00&jm=szt&cena_netto=0.00&vat=23&wartosc_netto=0.00&wartosc_brutto=0.00

Jak widac dodalo nazwa_pozycji2 do nazwa_pozycji1. Ale dodalo tez dublujace sie klucze, takie jak pkwiu itp.

No i oczywiscie dodajac kolejne wiersze masz tez dublujace sie id w html, np. po dodaniu wiersza sa dwa inputy z ID ilosc, co jest bledne i beda problemy z uzywaniem selektorow w js.
denis95x
Wiem wiem odnośnie tych inputów i id smile.gif
ale chciałem zobaczyć czy w ogole prześle mi tylko nazwe pozycji o roznych id.
reszte mialem zamiar zrobic tak samo +wierszy+
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.