Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie w pętli...problem
Forum PHP.pl > Forum > PHP
MateuszRyaN
Witam.

mam dynamiczny formularz na dodawanie kilka rekordów. Wszystko ładnie trafia do tablicy, którą moge spokojnie wyświetlić. Chciałbym w tej pętli docelowo wykonac zapytanie, które wsadzi mi te rekordy do bazy danych. (id celowo nie jest auto_increment).

  1. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar1 , 1 , szt. , 50 , 40.65 , 9.35 , 40.65 , 50 , 23%
  2. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar2 , 1 , szt. , 100 , 81.3 , 18.7 , 81.3 , 100 , 23%
  3. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar3 , 1 , szt. , 150 , 121.95 , 28.05 , 121.95 , 150 , 23%


Wszystko działa jak należy, niestety dodaje mi tylko pierwszy towar. Co robię źle? Poniżej kod php.

  1. if (isset($_POST['wystaw_fakture']))
  2. {
  3. $fak = array();
  4. $fak['nt'] = $_POST['nazwa_towaru'];
  5. $fak['il'] = $_POST['ilosc'];
  6. $fak['jm'] = $_POST['j_m'];
  7. $fak['cb'] = $_POST['cena_brutto'];
  8.  
  9. $id_wynik = mysql_query("SELECT `id` FROM `faktury` ORDER BY `id` DESC LIMIT 1") or die ('Błąd zapytania');
  10. $row = mysql_fetch_array($id_wynik);
  11. $last_id = $row['id'] + 1;
  12.  
  13. for ($i=0,$to=count($fak['nt']);$i<$to;$i++) {
  14. $fak['cn'][$i] = round($fak['cb'][$i] / 1.23, 2);
  15. $fak['kv'][$i] = round(($fak['cn'][$i] * 0.23 * $fak['il'][$i]), 2);
  16. $fak['wn'][$i] = round($fak['cn'][$i] * $fak['il'][$i], 2);
  17. $fak['wb'][$i] = $fak['wn'][$i] + $fak['kv'][$i];
  18. $fak['v'][$i] = $_POST['vat'];
  19. $fak['nb'][$i] = $_POST['nabywca'];
  20. $fak['dt'][$i] = $_POST['data'];
  21. echo $last_id.' , '.$fak['dt'][$i].' , '.$fak['nb'][$i].' , '.$fak['nt'][$i].' , '.$fak['il'][$i].' , '.$fak['jm'][$i].' , '.$fak['cb'][$i].' , '.$fak['cn'][$i].' , '.$fak['kv'][$i].' , '.$fak['wn'][$i].' , '.$fak['wb'][$i].' , '.$fak['v'][$i].'<br>';
  22. $fak_insert = "INSERT INTO `faktury` SET id='$last_id', data='".$fak['dt'][$i]."', nabywca='".$fak['nb'][$i]."', nazwa_towaru='".$fak['nt'][$i]."', ilosc='".$fak['il'][$i]."', j_m='".$fak['jm'][$i]."', cena_brutto='".$fak['cb'][$i]."', cena_netto='".$fak['cn'][$i]."', kwota_vat='".$fak['kv'][$i]."', wartosc_netto='".$fak['wn'][$i]."', wartosc_brutto='".$fak['wb'][$i]."', vat='".$fak['v'][$i]."'";
  23. $ins = @mysql_query($fak_insert);
  24.  
  25. }
  26. }
mkdes
To powinno być w pętli for. $last_id = $row['id'] + 1;
Ale $row['id'] powinieneś przenieść do jakiejś zmiennej pomocniczej. np. $rowid = $row[id];
Na kolumnie "id" daj w bazie opcję "autoincrement" i w zapytaniu usuń wstawianie id. Zostanie ustawione automatycznie z inkrementacją.
MateuszRyaN
Ale nie rozumiesz...ja chce żeby numery id były takie same. I generalnie wszystko sie zgadza.

Załóżmy...robie sobie zapytanie o ID DESCL LIMIT 1...pobiera mi np. 4.

dodaje 1...i mam $last_id = 5. I kolejne rekordy ktore dodam powinny miec id 5...nie udało by się to gdybym miał auto increment prawda?

Po prostu potrzebuje to zapytanie...żeby dodało mi w pętli te rekordy...ale żeby ID było takie samo. Rozumiesz?

Tablica wyświetlana jest OK. Wszystko jak należy. Do bazy dodaje mi tylko pierwszy rekord. Nie wiem dlaczego. Czyżby nie można dodać kilka rekordów o jednakowym ID? przecież nie mam ustawionego id na auto_increment.

  1. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar1 , 1 , szt. , 100 , 81.3 , 18.7 , 81.3 , 100 , 23%
  2. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar2 , 1 , szt. , 150 , 121.95 , 28.05 , 121.95 , 150 , 23%
  3. 5 , 24-01-2011 , GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59 , towar3 , 1 , szt. , 200 , 162.6 , 37.4 , 162.6 , 200 , 23%
  4.  
  5. (
  6. [nt] => Array
  7. (
  8. [0] => towar1
  9. [1] => towar2
  10. [2] => towar3
  11. )
  12.  
  13. [il] => Array
  14. (
  15. [0] => 1
  16. [1] => 1
  17. [2] => 1
  18. )
  19.  
  20. [jm] => Array
  21. (
  22. [0] => szt.
  23. [1] => szt.
  24. [2] => szt.
  25. )
  26.  
  27. [cb] => Array
  28. (
  29. [0] => 100
  30. [1] => 150
  31. [2] => 200
  32. )
  33.  
  34. [cn] => Array
  35. (
  36. [0] => 81.3
  37. [1] => 121.95
  38. [2] => 162.6
  39. )
  40.  
  41. [kv] => Array
  42. (
  43. [0] => 18.7
  44. [1] => 28.05
  45. [2] => 37.4
  46. )
  47.  
  48. [wn] => Array
  49. (
  50. [0] => 81.3
  51. [1] => 121.95
  52. [2] => 162.6
  53. )
  54.  
  55. [wb] => Array
  56. (
  57. [0] => 100
  58. [1] => 150
  59. [2] => 200
  60. )
  61.  
  62. [v] => Array
  63. (
  64. [0] => 23%
  65. [1] => 23%
  66. [2] => 23%
  67. )
  68.  
  69. [nb] => Array
  70. (
  71. [0] => GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59
  72. [1] => GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59
  73. [2] => GRAFITT TAMARA MEREDYK , Rybnik , Miejska 13a , 647-147-72-59
  74. )
  75.  
  76. [dt] => Array
  77. (
  78. [0] => 24-01-2011
  79. [1] => 24-01-2011
  80. [2] => 24-01-2011
  81. )
  82.  
  83. [idik] => Array
  84. (
  85. [0] => 5
  86. [1] => 5
  87. [2] => 5
  88. )
  89.  
  90. )
  91.  
tehaha
Cytat
Czyżby nie można dodać kilka rekordów o jednakowym ID? przecież nie mam ustawionego id na auto_increment.

1. jeżeli dałeś to pole jako primarykey albo unique key to nie może, ID rekordu to ID rekordu, ma być unikalne, jeżeli ma być to relacja to dodaj drugą kolumnę np. id_faktury, które nie będzie kluczem
2. To można dodać jednym zapytaniem, Twój sposób jest bardzo nie wydajny, używając składni: INSERT INTO table(column, column) VALUES(value, value), (value, value), (value, value), (value, value), (value, value), (value, value)
MateuszRyaN
Cytat(tehaha @ 24.01.2011, 12:13:13 ) *
ID rekordu to ID rekordu, ma być unikalne, jeżeli ma być to relacja to dodaj drugą kolumnę np. id_faktury, które nie będzie kluczem

Masz racje. O tym nie pomyślałem. Jak będę miał z tym jakieś problemy to jeszcze tu napiszę. Na razie dzięki smile.gif
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.