Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dodawanie rekordów a rodzaj przeglądarki
Forum PHP.pl > Forum > Przedszkole
krzesik
Mam problem ze skryptem i dodawanie rekordów do tabeli MySQL. Pod IE działa ok dodaje więcej niż jeden rekord (formularz w pętli), a w Mozilli dodaje mi tylko jeden rekord, to jest wina przeglądarki? czy może sią jakieś inne powody? Dla jasności dołączam skrypt dodający dane do bazy.

  1. .......
  2. // wcześniej zapisuję do jednej z tabel nagłówek dokumentu
  3. if ($zapisnaglowka)
  4. {
  5.  
  6. $x = 0;
  7. while(!empty($nazwa_zw[$x]) and !empty($ilosc[$x]) and !empty($cena[$x]))
  8. {
  9. $zapissrodka = @mysql_query("INSERT INTO sprzedaz_srodek SET
  10. typ_dok ='$typ_dok',
  11. id_dok_spr ='$id_dok_spr',
  12. nr_dok_spr ='$NowyNrFaktury/$rok',
  13. data_sprzedazy ='$data_sprzedazy',
  14. nazwa_zw ='$nazwa_zw[$x]',
  15. ilosc ='$ilosc[$x]',
  16. jm ='$jednostka_miary[$x]',
  17. cenaN ='$cena[$x]',
  18. prc_vat ='$prc_vat[$x]',
  19. wartoscbrutto ='$wartoscbrutto[$x]',
  20. wartoscN ='$wartoscnetto[$x]',
  21. wartoscvat ='$wartoscvat[$x]'") or die('Queryproblem: '.mysql_error());
  22. $x++;
  23. }
  24. .........
  25.  
b4rt3kk
Jeśli istnieją rozbieżności pod różnymi przeglądarkami to nie jest to na pewno winą kodu PHP (który wykonuje się po stronie serwera, więc przeglądarka nie ma tu nic do rzeczy), a kodu HTML, także własnie ten powinieneś tu wkleić.
krzesik
  1.  
  2. <table width="100%" border="0" id="tabela">
  3. <tr bgcolor="teal">
  4. <th width="5%">L.p.</th>
  5. <th width="30%">Nazwa towaru / usługi</th>
  6. <th width="5%">j.m.</th>
  7. <th width="10%">Ilość</th>
  8. <th width="10%">Cena jednost.</th>
  9. <th width="5%">VAT</th>
  10. <th width="5%">Usuń</th>
  11. </tr>
  12. <tr id="wiersz-1">
  13. <td width="5%" align="center">1</td>
  14. <td width="30%">
  15. <input type="text" name="nazwa_zw[]" value="" style="width: 98%"></input>
  16. </td>
  17. <td width="5%">
  18. <SELECT name='jednostka_miary[]' style="width: 100%">
  19. <option value='kg'>kg</option>
  20. <option value='szt'>szt</option>
  21. </td>
  22. <td width="10%">
  23. <input type="text" name="ilosc[]" value="" style="width: 96%"></input>
  24. </td>
  25. <td width="10%">
  26. <input type="text" name="cena[]" value="" style="width: 96%"></input>
  27. </td>
  28. <td width="5%">
  29. <SELECT name='prc_vat[]' style="width: 100%">
  30. <option value='23'>23%</option>
  31. <option value='8'> 8%</option>
  32. <option value='5' selected="selected"> 5%</option>
  33. <option value='3'> 3%</option>
  34. <option value='0'>n.p.</option>
  35. </td>
  36. <td align="center"><a class="delete button" href="#"></a></td>
  37.  
  38. </tr>
  39. <p><a href="#" id="dodajWiersz" class="add button">Dodaj nowy wiersz</a></p>
  40.  
  41.  
  42.  
  43.  
b4rt3kk
A jak wygląda skrypt dodający kolejne wiersze?
krzesik
mam to w jednym pliku, najpierw mam podany html, a później kod php, który przedstawiłem wcześniej
b4rt3kk
Cytat(krzesik @ 10.01.2013, 18:06:10 ) *
mam to w jednym pliku, najpierw mam podany html, a później kod php, który przedstawiłem wcześniej


Chodziło mi o ten fragment kodu:

  1. <p><a href="#" id="dodajWiersz" class="add button">Dodaj nowy wiersz</a></p>


Podejrzewam, że jest obsługiwany przez jakiś skrypt jQuery? Ten kod jest potrzebny, prawdopodobnie masz w nim jakiś błąd.
krzesik
:-) proszę bardzo!
  1. <script language="javascript">
  2.  
  3. $(document).ready(function() {
  4. //funkcja odczytująca kliknięcie w element o id: dodajWiersz
  5. //i wykonująca akcję dodawania nowego wiersza do tabeli
  6. $('#dodajWiersz').click(function() {
  7.  
  8. //policz ile jest wierszy w tabeli
  9.  
  10. var liczba = $('#tabela tr').length;
  11.  
  12. var f1 = '<td><input type="text" name="nazwa_zw[]" style="width: 98%" value="" ></input></td>';
  13.  
  14. var f2 = '<td><SELECT name="jednostka_miary[]" style="width: 100%"><option value="kg">kg</option><option value="szt">szt</option></SELECT></td>';
  15.  
  16. var f3 = '<td><input type="text" name="ilosc[]" value="" style="width: 96%"></input></td>';
  17.  
  18. var f4 = '<td><input type="text" name="cena[]" value="" style="width: 96%"></input></td>';
  19.  
  20. var f5 = '<td><SELECT name="prc_vat[]" style="width: 100%"><option value="23">23%</option><option value="8"> 8%</option><option value="5" selected="selected"> 5%</option><option value="3"> 3%</option><option value="0">n.p.</option></SELECT></td>';
  21.  
  22. var f6 = '<td align="center"><a class="button delete" href="#">Usuń</a></td>';
  23.  
  24. //w tej zmiennej definiujemy nowy wiersz w tabeli
  25. var row = '<tr class="none" id="wiersz-'+liczba+'"><td align="center">'+liczba+'</td>'+f1+f2+f3+f4+f5+f6+'</tr>';
  26.  
  27. //dołącz nowy wiersz na końcu tabeli
  28. $('#tabela').find('tbody').append(row);
  29.  
  30. //usuwamy klasę: none z wiersza oraz animujemy efekt dodawania wiersza
  31. $('tr.none').removeClass('none').animate({'backgroundColor':'#66B04D','color':'#fff'},200,function(){
  32. $(this).animate({'backgroundColor':'#fff','color':'#000'},200);
  33. });
  34. });
  35.  
  36. //funkcja odczytująca kliknięcie w element o klasie: delete
  37. //i wykonująca akcję usuwania danego wiersza z tabeli
  38. //oraz dokonuje przeliczenia numerów wierszy w tabeli
  39. $('.delete').live('click',function() {
  40. //znajdź najbliższy wiersz będący elementem nadrzędnym dla linka usuwającego ten wiersz
  41. //i wykonaj animację
  42. $(this).closest('tr').animate({'backgroundColor':'#EF3E23','color':'#fff'},200,function(){
  43.  
  44. //usuń dany wiersz
  45. $(this).remove();
  46.  
  47. //aktualizuj numery pozostałych wierszy
  48. //dzięki temu gdy usuniemy wiersz w środku tabeli
  49. //to nie będzie istniała dziura w numeracji wierszy
  50. $('#tabela > tbody > tr').each(function(i) {
  51. //wpisz nowy numer wewnątrz pierwszej komórki danego wiersza
  52. $(this).find('td:first-child').text(i+1);
  53. });
  54. });
  55. });
  56. });
  57.  
  58.  
b4rt3kk
Hmm, niby wszystko wygląda ok, jeszcze się temu przyjrzę, poza jedną rzeczą. Nie:

  1. <input type="text" name="nazwa_zw[]" style="width: 98%" value="" ></input>


a:

  1. <input type="text" name="nazwa_zw[]" style="width: 98%" value="" />
krzesik
ale w JS czy w HTML?, tylko w innych kontrolkach też mam pozamykane....
b4rt3kk
Cytat(krzesik @ 10.01.2013, 20:15:59 ) *
ale w JS czy w HTML?, tylko w innych kontrolkach też mam pozamykane....


Zarówno w JS, jak i HTML, nie jest to poprawny sposób.
krzesik
Zmieniłem.................... bez reakcji na wynik, IE zapisuje tyle rekordów ile ma a FF tylko pierwszy.........
b4rt3kk
Cytat(krzesik @ 10.01.2013, 20:21:51 ) *
Zmieniłem.................... bez reakcji na wynik, IE zapisuje tyle rekordów ile ma a FF tylko pierwszy.........


No to cóż, najprostsza metoda. Dane z formularza są przesyłane do pliku wynikowego za pomocą POST? Jeśli tak wyświetl sobie całą tablicę - print_r($_POST) i będziesz miał jasność jak wyglądają przesłane pola, przetestuj to pod FF.

Tylko pozostaje jeszcze pytanie czy dodaje Ci tylko jeden rekord czy ten sam rekord n razy?
krzesik
pod IE tablica Array ma przy dwóch zapisywanych rekordach wypełnione prawidłowo array[0] oraz array[1], a FF wyłącznie array[0]

a może coś tutaj?

  1. $faktura_srodek = array();
  2. $faktura_srodek['nazwa_zw'] = $_POST['nazwa_zw'];
  3. $faktura_srodek['ilosc'] = $_POST['ilosc'];
  4. $faktura_srodek['jednostka_miary'] = $_POST['jednostka_miary'];
  5. $faktura_srodek['cena'] = $_POST['cena'];
  6. $faktura_srodek['wartoscN'] = $_POST['wartoscN'];
  7. $faktura_srodek['prc_vat'] = $_POST['prc_vat'];
  8. $ilosc = str_replace(",",".",$_POST['ilosc']);
  9. $cena = str_replace(",",".",$_POST['cena']);
  10. $jednostka_miary = $_POST['jednostka_miary'];
  11. $prc_vat = $_POST['prc_vat'];
  12. $faktura_brutto = $_POST['faktura_brutto'];
  13.  
  14. ?>
  15.  
  16.  
  17.  
  18. <?php
  19.  
  20. foreach($nazwa_zw as $x => $y)
  21. {
  22. if (!empty($faktura_brutto)) {
  23. $wartoscbrutto[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]));
  24. $wartoscvat[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]))*($prc_vat[$x]/(100+$prc_vat[$x]));
  25. $wartoscnetto[$x] = $wartoscbrutto[$x]-$wartoscvat[$x];
  26. }
  27. else
  28. $wartoscnetto[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]));
  29. $wartoscvat[$x] = round($wartoscnetto[$x]*($prc_vat[$x]/100),2);
  30. $wartoscbrutto[$x] = $wartoscnetto[$x]+$wartoscvat[$x];
  31. }
  32.  
  33. $sprzapisuwrej = "select id_dok_spr from tabela WHERE id_dok_spr='$id_dok_spr";
  34.  
  35. if(mysql_num_rows($sprzapisuwrej) == '0')
  36. {
  37. ........
  38. //dalej już masz
b4rt3kk
Cytat(krzesik @ 10.01.2013, 20:39:24 ) *
pod IE tablica Array ma przy dwóch zapisywanych rekordach wypełnione prawidłowo array[0] oraz array[1], a FF wyłącznie array[0]

a może coś tutaj?

  1. $faktura_srodek = array();
  2. $faktura_srodek['nazwa_zw'] = $_POST['nazwa_zw'];
  3. $faktura_srodek['ilosc'] = $_POST['ilosc'];
  4. $faktura_srodek['jednostka_miary'] = $_POST['jednostka_miary'];
  5. $faktura_srodek['cena'] = $_POST['cena'];
  6. $faktura_srodek['wartoscN'] = $_POST['wartoscN'];
  7. $faktura_srodek['prc_vat'] = $_POST['prc_vat'];
  8. $ilosc = str_replace(",",".",$_POST['ilosc']);
  9. $cena = str_replace(",",".",$_POST['cena']);
  10. $jednostka_miary = $_POST['jednostka_miary'];
  11. $prc_vat = $_POST['prc_vat'];
  12. $faktura_brutto = $_POST['faktura_brutto'];
  13.  
  14. ?>
  15.  
  16.  
  17.  
  18. <?php
  19.  
  20. foreach($nazwa_zw as $x => $y)
  21. {
  22. if (!empty($faktura_brutto)) {
  23. $wartoscbrutto[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]));
  24. $wartoscvat[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]))*($prc_vat[$x]/(100+$prc_vat[$x]));
  25. $wartoscnetto[$x] = $wartoscbrutto[$x]-$wartoscvat[$x];
  26. }
  27. else
  28. $wartoscnetto[$x] = (str_replace(",",".",$ilosc[$x])*str_replace(",",".",$cena[$x]));
  29. $wartoscvat[$x] = round($wartoscnetto[$x]*($prc_vat[$x]/100),2);
  30. $wartoscbrutto[$x] = $wartoscnetto[$x]+$wartoscvat[$x];
  31. }
  32.  
  33. $sprzapisuwrej = "select id_dok_spr from tabela WHERE id_dok_spr='$id_dok_spr";
  34.  
  35. if(mysql_num_rows($sprzapisuwrej) == '0')
  36. {
  37. ........
  38. //dalej już masz


Na pewno nie, jak widzisz problemem jest gdzieś w jQuery, bo w ogóle nie przesyła wartości dla dynamicznie utworzonych inputów. Wyniki dla print_r($_POST) mówią wszystko na ten temat.
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.