Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Update tabeli
Forum PHP.pl > Forum > Przedszkole
jarek0203
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. }}
fate
  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
jarek0203
Już tak próbowałem. W tym wypadku nic nie dodaje do magazynu.
mmmmmmm
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 (...) ...');
jarek0203
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:)
fate
bo wrzuciles do petli a tak miales do dyspozycji tylko ostatni wynik
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.