Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Update tabeli
jarek0203
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Witam. Mam funkcje dodaj która dodaje do Faktury (min. materialy, ceche materialu oraz ilosc)i automatycznie dodaje je do tabeli magazyn. Problem pojawia się gdy chce dodać ten sam material który ma tą samą ceche ponieważ ilość materiału musi się zwiększyć o daną liczbe.

W kodzie mam coś źle ze sprawdzaniem czy już istnieje materiał z taką cechą ponieważ update działa mi tylko gdy dodaje dane z ostatniej pozycji magazynu.
Nie wiem jak to zrobić żeby porównywało dane z całej tabeli.
Ktoś wie jak to naprawić ?


  1. function dodaj_f($nr,$cecha,$ilosc,$material,$data,$cena)
  2. {
  3. mysql_query("INSERT INTO faktura VALUES(0,'$cecha','$nr','$data')");
  4. mysql_query("INSERT INTO materialy VALUES(0,'$nr','$material','$ilosc','$cena')");
  5. $dane_mg=mysql_query("SELECT * FROM magazyn");
  6. while ($txt_mg = mysql_fetch_assoc($dane_mg))
  7. {
  8. $zawartosc_mg[]=$txt_mg;
  9. foreach($zawartosc_mg as $element_mg){
  10. echo(''.$element_mg['material'].', '.$element_mg['cecha'].', '.$element_mg['ilosc'].'<br>');}
  11. }
  12.  
  13. if(($material==$element_mg['material']) && ($cecha==$element_mg['cecha']))
  14. {
  15. $ilosc_suma=$ilosc+$element_mg['ilosc'];
  16. echo('UPDATE magazyn SET ilosc="'.$ilosc_suma.'" WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  17. mysql_query('UPDATE magazyn SET ilosc="'.$ilosc_suma.'" WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  18. }
  19. else{
  20. mysql_query("insert into magazyn values(0,'$material','$ilosc','$cecha')");
  21. echo("insert into magazyn values(0,'$material','$ilosc','$cecha')");
  22. }}
Go to the top of the page
+Quote Post
fate
post
Post #2





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


  1.  
  2.  
  3. function dodaj_f($nr,$cecha,$ilosc,$material,$data,$cena)
  4. {
  5. mysql_query("INSERT INTO faktura VALUES(0,'$cecha','$nr','$data')");
  6. mysql_query("INSERT INTO materialy VALUES(0,'$nr','$material','$ilosc','$cena')");
  7. $dane_mg=mysql_query("SELECT * FROM magazyn");
  8. while ($txt_mg = mysql_fetch_assoc($dane_mg))
  9. {
  10. $zawartosc_mg[]=$txt_mg;
  11. foreach($zawartosc_mg as $element_mg){
  12. echo(''.$element_mg['material'].', '.$element_mg['cecha'].', '.$element_mg['ilosc'].'<br>');
  13.  
  14. if(($material==$element_mg['material']) && ($cecha==$element_mg['cecha']))
  15. {
  16. $ilosc_suma=$ilosc+$element_mg['ilosc'];
  17. echo('UPDATE magazyn SET ilosc="'.$ilosc_suma.'" WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  18. mysql_query('UPDATE magazyn SET ilosc="'.$ilosc_suma.'" WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  19. }
  20. else{
  21. mysql_query("insert into magazyn values(0,'$material','$ilosc','$cecha')");
  22. echo("insert into magazyn values(0,'$material','$ilosc','$cecha')");
  23. }
  24. }
  25. }
  26.  
  27. }
  28.  


Przenioslem do petli, sprawdz teraz wydajnosc tego skryptu

Ten post edytował fate 9.12.2013, 10:29:45
Go to the top of the page
+Quote Post
jarek0203
post
Post #3





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Już tak próbowałem. W tym wypadku nic nie dodaje do magazynu.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Po update wywołaj mysql_affected_rows. Jeśli zwraca 0, o znaczy, że UPDATE się nie udał (nie zmodyfikowano żadnego rekordu - pewnie nie ma takich). Wtedy trzeba wywolać INSERT.

EDIT:
Nie musisz sam dodawać i sumować wartości.. Wystarczy że zrobisz:
  1. mysql_query('UPDATE magazyn SET ilosc=ilosc+'.intval($element_mg['ilosc']).' WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  2. // i tu to o czym wyżej pisłem:
  3. if (mysql_affected_rows()==0) mysql_query('INSERT INTO magazyn (...) ...');


Ten post edytował mmmmmmm 9.12.2013, 18:21:48
Go to the top of the page
+Quote Post
jarek0203
post
Post #5





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Działa! Musiałem tylko zmienić '.intval($element_mg['ilosc']).' na '.intval($ilosc).' .

  1. function dodaj_f($nr,$cecha,$ilosc,$material,$data,$cena){
  2. mysql_query("INSERT INTO faktura VALUES(0,'$cecha','$nr','$data')");
  3. mysql_query("INSERT INTO materialy VALUES(0,'$nr','$material','$ilosc','$cena')");
  4. $dane_mg=mysql_query("SELECT * FROM magazyn");
  5. while ($txt_mg = mysql_fetch_assoc($dane_mg)){
  6. $zawartosc_mg[]=$txt_mg;
  7. foreach($zawartosc_mg as $element_mg){
  8. echo(''.$element_mg['material'].', '.$element_mg['cecha'].', '.$element_mg['ilosc'].'<br>');}}
  9. mysql_query('UPDATE magazyn SET ilosc=ilosc+'.intval($ilosc).' WHERE material="'.$material.'" AND cecha="'.$cecha.'"');
  10.  
  11. if (mysql_affected_rows()==0) mysql_query("INSERT INTO magazyn values(0,'$material','$ilosc','$cecha')");
  12.  
  13. // header("Location: index.php");
  14. }


Nadal nie rozumiem czemu w tamtym przypadku nie działało prawidłowo jak teoretycznie niczym się to nie różni. Ale dziękuje:)
Go to the top of the page
+Quote Post
fate
post
Post #6





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


bo wrzuciles do petli a tak miales do dyspozycji tylko ostatni wynik
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 17:57