Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V  < 1 2 3 >  
Reply to this topicStart new topic
> [SQL][PHP]Dodanie kilku rekordów do bazy danymiz formularza
Michasko
post 9.02.2013, 20:17:48
Post #21





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


O, faktycznie, literówka się wkradła :)
Będę zaglądał mniej więcej do 16-17. Wieczorem już mnie nie będzie.

Ten post edytował Michasko 9.02.2013, 20:17:55


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
--wojtek1988--
post 9.02.2013, 20:33:08
Post #22





Goście







ja bede juz koło 10 to sie odezwe z ciekawym pytaniem.potem dasz mi numer konta i spłace dług tongue.gif.. Ja twoj uczeń biggrin.gif
Go to the top of the page
+Quote Post
wojtek1988
post 10.02.2013, 15:00:08
Post #23





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Dzięki @Michasko juz wiem jak dodać kilka wierszy do bazy poprzez formularz i teraz zastanawiam się czy byłoby możliwe wykonanie wielokrotnego zapytania dodania wierszy a po nim zapytanie do bazy danych dodające jeden wiersz do innej tabeli pobierając z wielokrotnego formularza wybrane rekordy . Opsize to na przykłądzie.
Posiadam tabele produkty oraz PZ(dokument przyjecia produktów). W jednym dokumencie chciałbym przechowywac nazwe, ilosc i cene netto wszystkich dodanych produktów.
Dodanie kilku produktów wykonam ale po nim zapytanie dodające jeden wiersz z kilkoma nazwami, i,ościami oraz cenami netto wyżej dodanych produktów.
Co na ten temat myślą mistrzowie?? closedeyes.gif closedeyes.gif
Go to the top of the page
+Quote Post
Michasko
post 10.02.2013, 15:11:41
Post #24





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Czekaj czekaj, bo teraz znikąd pojawia nam się 'dokument'. Jaki dokument?

Jeśli chodzi o kilka produktów w jednym wierszu...nie ma sensu. Wygeneruj sobie ID np. danego zamówienia (czy tam przyjęcia) i dodaj tyle wierszy, ile masz produktów, ale każdy z takim samym ID "zamówienia". Potem wyciągając dane z bazy będziesz sobie wyświetlał wszystkie produkty dla zamówienia X.

Ewentualnie w tym wierszu "zamówienia" zrób sobie pole "produkty", a tam porozdzielasz je np. średnikami. Jednak jest to pójście bardzo okrężną i trudniejszą drogą wink.gif

Ten post edytował Michasko 10.02.2013, 15:13:07


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 10.02.2013, 15:33:35
Post #25





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Pierwszy wariant jest fajny. W tabeli PZ usunę klucz główny i autoinkrementację z ID bo teraz mam. Zapytanie sql będzie wyglądac analgoicznie dodając produkty i dokumenty tylko, że id ,bądz numer PZ powinien być ten sam przy dodanym towarze co nie? smile.gif

Obecnie mam powiązany jeden towar z jednym dokumentem a wyświetlam dokumenty tak:
dokumenty pz

Ten post edytował wojtek1988 10.02.2013, 15:37:51
Go to the top of the page
+Quote Post
Michasko
post 10.02.2013, 22:01:42
Post #26





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Tak. Powiedzmy, ze ja chce od Ciebie zamowic 2 telewizory i 1 mikser. Wtedy do bazy dodajesz 2 rekordy:
Kod
ID_zamowienia | ID_produktu | ilosc
      3       |      7      |   2
      3       |      4      |   1
zakładając, że telewizor ma ID = 7, mikser = 4 smile.gif Oczywiście możesz dodać dowolną ilość kolumn - grunt, to aby każde zamówienie miało swoje własne ID.

Generalnie powiem Ci jak ja by to rozwiązał. Trzy tabele, które na pewno byłyby mi potrzebne - zamówienia, produkty i zamowienia_produkty. Oczywiscie dobrze jest też mieć osobne tabele z danymi klientów, magazynów itd. Ale te potrzebne do obsługi zamówień:
zamowienia:
Kod
ID_zamowienia | koszt | wszystkie | dalsze | kolumny | z danymi | zamowienia
produkty:
Kod
ID_produktu | cena | ilosc_na_stanie | dalsze kolumny...
zamowienia_produkty:
Kod
ID_zamowienia | ID_produktu | zamowiona_ilosc

I teraz tylko sprytnie to polaczyc smile.gif

Ten post edytował Michasko 10.02.2013, 22:09:03


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 11.02.2013, 06:32:53
Post #27





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


ale jak miałoby wyglądać zapytanie, które wyświetlałoby nazwy towarów oraz ich ilości o tym samy numerze id dokumentu?
Warunek where id_produkt ale dokłądniej jak?
tabela zamówienia to u mnie pz i ma kolumny


id_pz | data | nr_dok | id_magazyn | nazwa | sztuk| k_cena_netto | dostawca | przyjal | uwagi
i obecnie jeden id oraz nr_dok posiada jedna nazwe i po jednym rekordzie z reszty kolumn.

Klucz główny ma teraz id_pz ale jakby miało byc takiesamo w kilku rekordach - towarach to należy usunąc primary key prawda?

Nie mam pojęcia jak wyglądałoby takie zapytanie do bazy sad.gif
Go to the top of the page
+Quote Post
Michasko
post 11.02.2013, 13:07:38
Post #28





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Hola hola, nie masz usuwać primary_key. Nie rozumiesz mnie smile.gif musisz mieć:
- 1 tabelę z wszystkimi zamówieniami
- 1 tabelę z wszystkimi produktami
- 1 tabelę, która połączy zamówione produkty z konkretnym zamówieniem

Spójrz na strukturę, którą przedstawiłem Ci w poprzednim poście smile.gif

I nie "WHERE id_produkt", tylko "WHERE id_pz", bo szukasz wszystkich zamówionych produktów o takim samym ID zamówienia smile.gif Czyli na przykładzie bazy, którą Ci pokazałem:
  1. SELECT * FROM zamowienia_produkty WHERE id_zamowienia = x
jeśli chcesz dokładniejszej pomocy - przedstaw też strukturę tabeli produktów i tabeli, którą chcesz połączyć dany dokument z zamówionymi produktami smile.gif

Ten post edytował Michasko 11.02.2013, 13:09:06


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 11.02.2013, 13:47:11
Post #29





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


tabela produkty wygląda następująco


id_produkt | data | id_magazyn | nazwa | symbol | producent | typ | jednostka | k_cena_netto |k_stawka_vat | k_cena_brutto | marza | cena_netto | stawka_vat | cena_brutto | sztuk | rezerwacja | skladowanie | opis | kody_kreskowe | minimum | waga |gwarancja | data_waznosci | seria | dangerous | uwagi

id_produkt - autoinkrment i primary key
id_magazyn - foreign key

tabela pz(dokument przyjecia)
id_pz | data | nr_dok | id_magazyn | nazwa | sztuk| k_cena_netto | dostawca | przyjal | uwagi
id_pz - autoinkrement i primary key
nr_dok - unikalny index

tAbela wiąząca dokumenty z towaramijak powinna wyglądać?
Go to the top of the page
+Quote Post
Michasko
post 11.02.2013, 14:09:33
Post #30





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Kod
id_pz | id_produkt | zamowiona_ilosc | cena_za_sztuke
id_pz - klucz główny i jednocześnie klucz obcy tabeli 'pz'
id_produkt - klucz obcy tabeli 'produkty'
ilosc - wiadomo smile.gif
cena_za_sztuke - ułatwisz sobie tym tworzenie np. rachunków.

W razie gdybyś nie wiedział co to klucz obcy - CLICK. W skrócie - klucz obcy jest to pole, które jest kluczem głównym w innej tabeli. W ten sposób "wiążemy" ze sobą różne tabele. System bazy danych dzięki temu wie, że dane z tych dwóch (lub więcej) tabel są ze sobą powiązane i np. uniemożliwi Ci przypadkowe usunięcie jakiejś danej, albo będzie je aktualizował kaskadowo (jeśli zmienią się w głównej tabeli - zmienią się we wszystkich, aby zachować spójność).

Ten post edytował Michasko 11.02.2013, 14:11:58


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 11.02.2013, 15:47:45
Post #31





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Tabele mam już zrobione. Teraz należy utworzyć dokument , który wyświetli tyle formularzy dodania towarów ile użytkownik sobie zażyczy. po wypełnieniu danych dokumnety i produktów naciskając przycisk potwierdz tworzą się rekodry nowych towarów w tabeli produkty, jeden dokument pz w tabeli pz oraz tyle wierszy ile produktów w tabeliz amówienia tak?

Wyświetlene dokumentów byłoby następujące.
Wyświetlić wszystkie wiersze z tabeli pz czyli nr_dok, kontrahentów oraz całkowity koszt
a szczegółowy opis dokumentu pobierałby dane z tabeli zamówienia tak? wtedy wszystkie wiersze o takim samym id_pz smile.gif
@Michasko szefie jak myslisz?

Ten post edytował wojtek1988 11.02.2013, 15:54:58
Go to the top of the page
+Quote Post
Michasko
post 11.02.2013, 16:02:23
Post #32





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Jeśli chodzi o wyświetlanie - tak.
Jeśli chodzi o dodawanie - nie wiem. Nie wiem co ma robić Twoja aplikacja, nie wiem czemu dodajesz równocześnie "towary" do tabeli "produkty" i "produkty" do tabeli "zamowienia", ani w ogóle na jakiej zasadzie to działa. Jeśli mógłbyś opisać cały proces od początku do końca, byłoby prościej.

Ten post edytował Michasko 11.02.2013, 16:04:47


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 11.02.2013, 17:10:33
Post #33





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Już tłumaczę, jest to aplikacja magazynowa. Moduł, który jest ostatni to dokumenty a dokładnie PZ. Obsługa polega na przyjęciu towarów na podstawie dokumentu PZ. Obecnie gdy tworzony jest dokument uzytkownik z listy wyboru kontrahentów wybiera dostawcę, odbiorcą jest przedsiębiorstwo magazynu alewymagane jst podanie imienia i nazwiska reprezentanta przedsiębiorstwa, nr dokumentu to składowa RR-MM/nr . Data pobierana jest funkcja date(). Poniżej są pola opisujące id_towaru(nie obowiązkowe do wypełnienia ponieważ działa funkcja autoinkrement), nazwa , ilosc, cena netto, podatek vat z listy wyboru i potem automatycznie poprzez ajax wypełniane są wartosć VAtu, wartośc brutto. Ponizęj przycisk potwierdz ktory wykonuje 2 zapytania do bazy danych.
Pierwsze dodaje produkt do tabeli produkty( przyjmuje produkt)
  1. mysql_query("insert into produkty values('".htmlspecialchars($_POST["id_produkt"])."', '".htmlspecialchars($_POST["data"])."', '".htmlspecialchars($_POST["id_magazyn"])."','".htmlspecialchars($_POST["nazwa"])."','".htmlspecialchars($_POST["symbol"])."','".htmlspecialchars($_POST["producent"])."','".htmlspecialchars($_POST["typ"])."','".htmlspecialchars($_POST["jednostka"])."','".htmlspecialchars($_POST["k_cena_netto"])."','".htmlspecialchars($_POST["k_stawka_vat"])."','".htmlspecialchars($_POST["k_cena_brutto"])."','".htmlspecialchars($_POST["marza"])."','".htmlspecialchars($_POST["cena_netto"])."' , '".htmlspecialchars($_POST["stawka_vat"])."' , '".htmlspecialchars($_POST["cena_brutto"])."' , '".htmlspecialchars($_POST["sztuk"])."' , '".htmlspecialchars($_POST["rezerwacja"])."' , '".htmlspecialchars($_POST["skladowanie"])."' , '".htmlspecialchars($_POST["opis"])."' , '".htmlspecialchars($_POST["kody_kreskowe"])."' , '".htmlspecialchars($_POST["minimum"])."' , '".htmlspecialchars($_POST["waga"])."' , '".htmlspecialchars($_POST["gwarancja"])."' , '".htmlspecialchars($_POST["data_waznosci"])."' , '".htmlspecialchars($_POST["seria"])."' , '".htmlspecialchars($_POST["dangerous"])."' , '".htmlspecialchars($_POST["uwagi"])."' )"); // zapisywanie rekordu do bazy

Drugie zapytanie dodaje wiersz w tabeli PZ zawierający nazwe , ilosc, cene netto oraz strony transakcji


Wyświetlanie działa nasepująco. Użytkownik wchodzi do modułu dokumnetów potem staje przed wyborem typu dokumentów czyli PZ albo WZ
Wybiera PZ i widzi tabelę zawierającą wiersze każdy z nich wyświetla wszystkie informacje o pojedycznym dokumencie przyjęcia produktu.

A lepiej gdyby była możliwość klikniecia na dany id dokumentu i wyswietlenie lisy towarów powiązanych z nim oraz stony transkacji i koszta smile.gif


Zrobimy to ?tongue.gif

Ten post edytował wojtek1988 11.02.2013, 17:20:59
Go to the top of the page
+Quote Post
Michasko
post 11.02.2013, 17:17:31
Post #34





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


No dobrze, ale załóżmy, że w magazynie masz 10 telewizorów i ktoś przywozi kolejne 10 dokładnie takich samych. Sumujesz to, czy masz 2 osobne rekordy, w kazdym po 10 telewizorów (chodzi mi o tabelę 'produkty').

Ale generalnie koncepcja dodawania jest OK.

Ten post edytował Michasko 11.02.2013, 17:17:54


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 11.02.2013, 18:40:45
Post #35





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


W tabeli produkty nie wiąże kontrahenta z towarem. Gdybym przyjął towar który juz mam w tabeli to obecnie mogę zrobic to zwiększając ilość ale gdybym miał to zrobić poprzez dokument pz to mysle ze praca nie warta świeczki ?

Zaczynamy programowac?:0

A jak oddzielić nazwy i ilości w tabeli zamowienia_produkty jeśli mam tylko jedną kolumne id_produkt | zamowiona_ilosc | cena_za_sztuke




Pomijając pytanie powyżej przemyślałem podpowiedzi @Michaska i doszedłęmdo następujacych wniosków:

Będę miał 1 tabele przechowujaća i opisujaca tylko produkty o nazwie produkty,
Id_produkt | id_magazyn | nazwa | ilosć i dalej .....

tabelę pz zawierającą informacje o dokumencie pz czyli:
id_pz | magazyn przyjecia | kto przyjął | kto dostawcą | uwagi

trzecia tabela zamowienia_pz będzie zawierać opis towarów i powiąże je z dokumentem pz poprzez pz_id
id_pz | id_towar | ilość przyjęta | cena za sztukę|

Tworząc dokument użytkownik powinien wybrac ile pozycji towarów chce miec na dokumencie, po tej czynności powinien wypełnić formularz i zatwierdzić jednym przyciskiem , który wywoła zapytnia do bazy danych , a mianowicie :

1. Dodanie towarów do tabeli produkty ( to umiem zrobić)
2.Utworzyć wiersze o jednakowym id_pz i id_produktu, ilości oraz cenie -tego nie umiem
3. Utworzyć wiersz do tabeli pz opisujacy dany dokument - to umiem







Teraz jak wyświetlić dokumenty?
Obecnie wyświetlam je w tabeli , każdy wiersz to inny dokument i tutaj nie ma problemu bo dane wyciągam z tabeli pz,
ale gdy chciałbym zobaczyc szczegóły dokumentu to co teraz? Chciałbym aby przy każdym z wierszy był napis szczegoły ( option=szczegoły po id_pz)

  1. if ( $_GET['option']=="show") {
  2. mysql_query("select * FROM `pz` WHERE `id_pz` = $_GET[row]");
  3. return false;
  4.  
  5. }

ale jak połączyć wyświetlanie wszystkiego z tabeli pz z towarami , ilościami i cena za sztuke z tabeli zamowienia_pz questionmark.gif?

Ten post edytował wojtek1988 12.02.2013, 07:16:41
Go to the top of the page
+Quote Post
Michasko
post 12.02.2013, 14:45:33
Post #36





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


1. Dodaj najpierw rekord do tabeli 'pz' i zapamiętaj sobie 'id_pz' z jakim je dodałeś.
2. Dodaj produkty do tabeli 'produkty' i zapamiętaj wszystkie ID i ilości, jakie je dodawałeś.
3. Dodaj rekordy do tabeli 'zamowienia_pz', każdy o innym ID produktu (te, które zapamiętałeś), ale wszystkie ze stałym ID_pz.

Czego konkretnie nie umiesz? Bo nie rozumiem. Przecież wyświetlanie masz dobre, tylko teraz zamiast tabeli 'pz' będziesz wyświetlał z tabeli 'zamowienia_pz'.

Przykład:
  1. //dodawanie pz
  2. $lastID = 0;
  3. $query = 'INSERT INTO pz VALUES ("tutaj", "twoje", "wartosci");';
  4. $res = mysql_query($query);
  5. if($res) // jesli dodawanie się powiodło
  6. $lastID = mysql_insert_id();
  7. else
  8. {
  9. //komunikat o błędzie;
  10. }
  11.  
  12. //dodawanie produktów
  13. $iloscDodanychProduktow = count($_POST['Produkt']); // zakladam, ze formularz zawiera pola o nazwach Produkt[] oraz pola o nazwach Ilosc[] (tablice wartosci)
  14. $iloscPoszczegolnychProduktow = $_POST['Ilosc'];
  15.  
  16. // tutaj zapytanie dodające produkty (kilka na raz - w ilości równej $ilosc); - to umiesz zrobić, więc zrobisz sam
  17. //jak skonczysz dodawanie do tabeli 'produkty', to kontynuujesz w ten sposób:
  18.  
  19. $dodaneProdukty = mysql_result(mysql_query('SELECT GROUP_CONCAT(produkt_id) FROM produkty ORDER BY produkt_id DESC LIMIT '.$iloscDodanychProduktow), 0);
  20. $cenyZaSztuke= mysql_result(mysql_query('SELECT GROUP_CONCAT(cena_za_sztuke) FROM produkty ORDER BY produkt_id DESC LIMIT '.$iloscDodanychProduktow), 0);
  21.  
  22. //teraz zmienne $dodaneProdukty i $cenyZaSztuke zawierac beda ciągi ID i cen dodanych produktów, oddzielonych przecinkami, np. "14, 6, 3"
  23. $dodaneProdukty = explode(",", $dodaneProdukty); // teraz masz tablice ID, ale są one odwrócone (malejąco, a w $iloscPoszczegolnychProduktow masz je rosnąco - wiec trzeba odwrócić)
  24. $cenyZaSztuke = explode(",", $cenyZaSztuke); // podobnie z cenami
  25.  
  26. $dodaneProdukty = array_reverse($dodaneProdukty);
  27. $cenyZaSztuke = array_reverse($cenyZaSztuke);
  28.  
  29. //dodanie rekordów do tabeli zamowienia_pz
  30. $zamQuery = 'INSERT INTO zamowienia_pz VALUES ';
  31.  
  32. for($j = 0; $j < count($dodaneProdukty); $j++)
  33. {
  34. $zamQuery .= '('.$lastID.', '.$dodaneProdukty[$j].', '.$iloscPoszczegolnychProduktow[$j].', "'.$cenyZaSztuke[$j].'")';
  35. if($j < count($dodaneProdukty) - 1)
  36. {
  37. $zamQuery .= ', ';
  38. }
  39. }
  40.  
  41. if(mysql_query($zamQuery))
  42. {
  43. //komunikat powodzenia;
  44. }
  45. else
  46. {
  47. //komunikat niepowodzenia
  48. }


Oczywiście wszystko pisane na szybko i z palca, więc mogą byc jakieś błędy, ale generalnie powinno być ok. Poza tym mogą wystąpić problemy, jeśli w tym samym czasie kilka osób doda jakieś zamówienia - mogą się pomieszać. Aby temu zapobiec musiałbyś użyć transakcji.

I miej na uwadze, że od nowych wersji PHP funkcje typu mysql_query już nie będą obsługiwane, więc radziłbym już teraz poczytać o bibliotece PDO.

Ten post edytował Michasko 12.02.2013, 15:20:41


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 12.02.2013, 15:32:29
Post #37





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Już wdrażam twój kod
atrybut id_pz w kolumnie zamowienia_pz nie moze byc primary bo bedzie sie powtarzał , prawda?

Ten post edytował wojtek1988 12.02.2013, 15:39:27
Go to the top of the page
+Quote Post
Michasko
post 12.02.2013, 15:46:41
Post #38





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Prawda. Twoim kluczem głównym może być produkt_id, o ile w tabeli produkty za każdym razem będziesz generował nowy wiersz (a nie sumował ilość sztuk na magazynie). Może też być całkiem nowa kolumna. Nie jestem pewien, czy tabela może nie mieć klucza głównego (sprawdź to) - jeśli może nie mieć, to go po prostu nie rób.

Ten post edytował Michasko 12.02.2013, 15:50:20


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post
wojtek1988
post 12.02.2013, 20:35:09
Post #39





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 8.02.2013

Ostrzeżenie: (0%)
-----


Dodaje mi jedynie "produkty" w reszcie zapytań do tabeli "pz" oraz "zamowienie_pz" wyświetla else " niepowodzenie"
@Michasko mógłbyś poprawić, spojrzeć smile.gif

  1. insertuje 1 rekord ale nie wszystkie elementy na raz
  2. <div id="wrapper" class="panel">
  3. ORYGINAŁ / KOPIA
  4. <section id="opcje" class="ramka2">
  5. <?php
  6.  
  7. require_once('include/database.php');
  8.  
  9.  
  10.  
  11.  
  12. include ("include/wyswietl_dane_firmy.php");
  13.  
  14. ?>
  15.  
  16.  
  17.  
  18. </section>
  19. <script>
  20. <!--
  21. function doit(){
  22. if (!window.print){
  23. alert("Musisz mieć NS4.x lub IE5,\naby użyć przycisku drukowania!")
  24. return
  25. }
  26. window.print()
  27. }
  28. //-->
  29. </script>
  30. <section id="opcje" class="ramka3">
  31. <div id="button">
  32. <a href="java script:doit()" ><img src="gfx/print.gif" border="0"></a>
  33. </div>
  34.  
  35. </section> <?php
  36.  
  37. $wynik = mysql_query('SELECT * FROM produkty')
  38. or die('Błąd zapytania');
  39.  
  40. echo "<form action='dodaj_towar_pz.php' method=post>";
  41.  
  42. function ShowForm($komunikat=""){ //funkcja wyświetlająca formularz dodania towaru
  43. echo "$komunikat<br>";
  44.  
  45. echo "<table boder=\"1\"><tr style=\"cursor: pointer\">";
  46. for($i = 1; $i <=4; $i++) {
  47. echo"<tr>";
  48. echo "<td>Nr produktu </td>";
  49. ECHO "<td>Nazwa </td>";
  50. ?>
  51. <td>Magazyn: </td>
  52. <td>Jednostka: </td>
  53. <td>Ilość </td>
  54.  
  55.  
  56. <td>Cena netto</td>
  57. <td>Wartość netto</td>
  58.  
  59.  
  60. <td>Stawka VAT</td>
  61. <td> Kwota VAT </td>
  62. <td> Wartość brutto </td>
  63. </tr><tr>
  64. <td><input type="text" size="3" name="id_produkt[]"></td>
  65. <td><input type="text" name="nazwa[]"></td>
  66. <td><select name="id_magazyn[]">
  67. <?
  68.  
  69. $res = mysql_query ("SELECT * FROM magazyny ");
  70. while($row = mysql_fetch_array($res))
  71. {
  72.  
  73. $id_magazyn= $row["id_magazyn"];
  74. $nazwa= $row["nazwa"];
  75. ?>
  76. <option value="<? echo "$id_magazyn"; ?>"><? echo " $nazwa ";
  77. ?></option>
  78. <?
  79. }
  80. ?>
  81. </select></td><input type="hidden" name="data" value="<?php echo date("Y-m-d");?>">
  82.  
  83. <td>
  84. <select name="jednostka[]">
  85. <?
  86.  
  87. $res = mysql_query ("SELECT * FROM jednostki ");
  88. while($row = mysql_fetch_array($res))
  89. {
  90.  
  91. $nazwa= $row["nazwa"];
  92.  
  93. ?>
  94. <option value="<? echo "$nazwa"; ?>"><? echo " $nazwa ";
  95. ?></option>
  96. <?
  97. }
  98. ?>
  99. </select></td>
  100.  
  101. <td><input type='text' size='5' id='sztuk[]' name='sztuk[]' value='' onkeyup='podlicz();'></td>
  102.  
  103. <td><input size="5" MAXLENGTH="12" id="k_cena_netto[]" name="k_cena_netto[]" type="text" value="" onkeyup="podlicz();"></td>
  104. <td><span id="wynikk[]"></span></td>
  105. <td><select id="podatek[]" name="k_stawka_vat[]" onchange="podlicz();">
  106. <option VALUE="23">23 %</option>
  107. <option VALUE="7">7 %</option>
  108. <option VALUE="33">33 %</option>
  109. </select></td>
  110. <td><span id="wynik[]" ></span></td>
  111.  
  112. <td>
  113. <span id="wynikkk[]" name="kwota_brutto[]"></span></td>
  114. <?php
  115.  
  116. echo "</tr>";
  117. }
  118. echo "<input type=hidden value='1' name=zapisz>";
  119. echo "<input type=submit value='Potwierdź'>";
  120.  
  121.  
  122.  
  123. echo "</table>";
  124. echo "</form>";
  125.  
  126. }
  127.  
  128. if(isset($_POST['zapisz']) && $_POST["zapisz"]==1){
  129. //dodawanie pz
  130. $lastID = 0;
  131. $query = 'INSERT INTO pz VALUES ("id_pz", "nr_dok", "id_magazyn" , "dostawca" , "przyjal" , "uwagi");';
  132. $res = mysql_query($query);
  133. if($res) // jesli dodawanie się powiodło
  134. $lastID = mysql_insert_id();
  135. else
  136. {
  137. echo"błąd";
  138. //komunikat o błędzie;
  139. }
  140.  
  141. //dodawanie produktów
  142. $iloscDodanychProduktow = count($_POST['nazwa']); // zakladam, ze formularz zawiera pola o nazwach Produkt[] oraz pola o nazwach Ilosc[] (tablice wartosci)
  143. $iloscPoszczegolnychProduktow = $_POST['sztuk'];
  144.  
  145. // tutaj zapytanie dodaj&plusmn;ce produkty (kilka na raz - w ilo&para;ci równej $ilosc); - to umiesz zrobić, więc zrobisz sam
  146.  
  147. $zapytanie = 'INSERT INTO produkty VALUES ';
  148. for($i = 0; $i < count($_POST['nazwa']); $i++){
  149. if(empty($_POST['nazwa'][$i])) {//oraz czy uzupełniono wszystkie dane
  150. echo "Pole \"nazwa\" nie może być puste!";
  151.  
  152. }
  153.  
  154.  
  155.  
  156. else{
  157. // je&para;li pola s&plusmn; poprawne, to dodajesz je do zapytania:
  158. $zapytanie .= '("'.$_POST['id_produkt'][$i].'", "'.$_POST['data'][$i].'", "'.$_POST['id_magazyn'][$i].'", "'.$_POST['nazwa'][$i].'" , "'.$_POST['symbol'][$i].'" , "'.$_POST['producent'][$i].'" , "'.$_POST['typ'][$i].'" , "'.$_POST['jednostka'][$i].'" , "'.$_POST['k_cena_netto'][$i].'" , "'.$_POST['k_stawka_vat'][$i].'" , "'.$_POST['k_cena_brutto'][$i].'" , "'.$_POST['marza'][$i].'" , "'.$_POST['cena_netto'][$i].'" , "'.$_POST['stawka_vat'][$i].'" , "'.$_POST['cena_brutto'][$i].'" , "'.$_POST['sztuk'][$i].'" , "'.$_POST['rezerwacja'][$i].'" , "'.$_POST['skladowanie'][$i].'" , "'.$_POST['opis'][$i].'" , "'.$_POST['kody_kreskowe'][$i].'" , "'.$_POST['minimum'][$i].'" , "'.$_POST['waga'][$i].'", "'.$_POST['gwarancja'][$i].'", "'.$_POST['data_waznosci'][$i].'", "'.$_POST['seria'][$i].'", "'.$_POST['dangerous'][$i].'", "'.$_POST['uwagi'][$i].'" )';
  159. if($i != count($_POST['id_produkt']) - 1)
  160. {
  161. $zapytanie .= ', ';
  162. }
  163. }
  164. }
  165.  
  166. if ( mysql_query($zapytanie) ) {
  167. echo "Dodano produkt do tabeli ";
  168. echo "Produkt został poprawnie dodany!<br />Za chwilę nastąpi przekierowanie kontaktów. Proszę czekać.";
  169.  
  170.  
  171. //jak skonczysz dodawanie do tabeli 'produkty', to kontynuujesz w ten sposób:
  172.  
  173. $dodaneProdukty = mysql_result(mysql_query('SELECT GROUP_CONCAT(id_produkt) FROM produkty ORDER BY id_produkt DESC LIMIT '.$iloscDodanychProduktow), 0);
  174. $cenyZaSztuke= mysql_result(mysql_query('SELECT GROUP_CONCAT(cena_za_sztuke) FROM produkty ORDER BY id_produkt DESC LIMIT '.$iloscDodanychProduktow), 0);
  175.  
  176. //teraz zmienne $dodaneProdukty i $cenyZaSztuke zawierac beda ci&plusmn;gi ID i cen dodanych produktów, oddzielonych przecinkami, np. "14, 6, 3"
  177. $dodaneProdukty = explode(",", $dodaneProdukty); // teraz masz tablice ID, ale s&plusmn; one odwrócone (malej&plusmn;co, a w $iloscPoszczegolnychProduktow masz je rosn&plusmn;co - wiec trzeba odwrócić)
  178. $cenyZaSztuke = explode(",", $cenyZaSztuke); // podobnie z cenami
  179.  
  180. $dodaneProdukty = array_reverse($dodaneProdukty);
  181. $cenyZaSztuke = array_reverse($cenyZaSztuke);
  182.  
  183. //dodanie rekordów do tabeli zamowienia_pz
  184. $zamQuery = 'INSERT INTO zamowienia_pz VALUES ';
  185.  
  186. for($j = 0; $j < count($dodaneProdukty); $j++)
  187. {
  188. $zamQuery .= '('.$lastID.', '.$dodaneProdukty[$j].', '.$iloscPoszczegolnychProduktow[$j].', "'.$cenyZaSztuke[$j].'")';
  189. if($j < count($dodaneProdukty) - 1)
  190. {
  191. $zamQuery .= ', ';
  192. }
  193. }
  194.  
  195. if(mysql_query($zamQuery))
  196. {
  197. echo"powodzenie dodania zamowienia_pz";
  198. //komunikat powodzenia;
  199. }
  200. else
  201. {
  202. //komunikat niepowodzenia
  203. echo"nie dodano zamowienia_pz";
  204.  
  205. }
  206.  
  207.  
  208. }
  209. else
  210. {
  211. echo "Dodawanie wyników nie powiodło się!<br/>".mysql_error();
  212.  
  213.  
  214.  
  215. }
  216. }
  217. echo ShowForm();
  218.  
  219. ?>
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. </br>
  227. <br/>
  228.  
  229.  
  230. <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
  231. <thead>
  232. <tr>
  233. <th style="text-align:center">Dostawca:</th> <th><select name="dostawca">
  234. <?
  235.  
  236. $res = mysql_query ("SELECT * FROM kontrahenci ");
  237. while($row = mysql_fetch_array($res))
  238. {
  239. $firma= $row["nazwa"];
  240. $imie= $row["imie"];
  241. $nazwisko= $row["nazwisko"];
  242. $id_kontrahent= $row["id_kontrahent"];
  243. $ulica= $row["ulica"];
  244. $numer_budynku= $row["numer_budynku"];
  245. $kod_pocztowy= $row["kod_pocztowy"];
  246. $miejscowosc= $row["miejscowosc"];
  247. $nip= $row["nip"];
  248.  
  249. ?>
  250. <option value="<? echo "$firma $imie $nazwisko"; ?>"><? echo " [ $firma ] - $imie $nazwisko ul. $ulica $numer_budynku , $kod_pocztowy $miejscowosc NIP $nip";
  251. ?></option>
  252. <?
  253. }
  254. ?>
  255. </select> </th><th></th><th></th></tr><tr><th style="text-align:center">Przyjął:<input size="15" MAXLENGTH="30" name="przyjal" type="text" value="imię nazwisko"><div id="button"></th>
  256. <th><a href="dodanie_kontrahenta.php"><b>Dodaj kontrahenta </b></a></div></th> <th></th><th></th></tr>
  257. <tr><th style="text-align:center">Data:<input type="" name="data" value="<?php echo date("Y-m-d");?>"></th>
  258. <th style="text-align:center" >Godzina: <?php echo date("H:i:s");?> </th><th></th><th></th></tr>
  259. <tr><th style="text-align:center">Numer dokumentu:</th> <th><input type="text" size="10" name="nr_dok" value="<?php echo date("Y-m"); echo "/";?>"></th><th></th><th></th></tr>
  260.  
  261. <tr><th style="text-align:center">Uwagi: </th><th></th><th></th><th></th></tr><tr><th><textarea cols="20" rows="4" class="form" name="uwagi" ></textarea></th><th></th><th></th><th></th></tr>
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. <tr><th style="text-align:center">Elementy:</th> </tr>
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281. </thead>
  282.  
  283. <tfoot>
  284.  
  285.  
  286. </tfoot>
  287.  
  288. </table>
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298. <br><br><br>
  299. <div><span class="prawa">Podpis osoby upoważnionej<br>do odebrania dokumentu pz </span><span class="lewa">Podpis osoby upoważnionej<br>do wystawienia dokumentu pz</span></div>
  300.  
  301.  
  302.  
  303. </div>
  304.  
  305.  
  306.  


Ten post edytował wojtek1988 12.02.2013, 20:36:04
Go to the top of the page
+Quote Post
Michasko
post 12.02.2013, 21:01:40
Post #40





Grupa: Zarejestrowani
Postów: 283
Pomógł: 31
Dołączył: 10.01.2006
Skąd: Działoszyn

Ostrzeżenie: (0%)
-----


Jakie masz typy kolumn? w ID pewnie masz typ INT, a starasz sie wstawić "pz_id"...
Poza tym dodaj tam "mysql_error()" po kazdym zapytaniu i sie dowiemy o co chodzi.

Ten post edytował Michasko 12.02.2013, 21:02:34


--------------------
Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :)
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 08:37