Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] UPDATE w pętli
Forum PHP.pl > Forum > Przedszkole
kamilo818
Wydawało mi się to nie skomplikowane, ale niestety mam problem.
  1. sql2 = "SELECT * FROM zamowienia_produkty WHERE id_zamowienia='$id'";
  2. $result2 = mysql_query($sql2);
  3.  
  4. while ($row2 = mysql_fetch_array($result2)) {
  5. if($new_stat==='anulowano'){
  6. $oddaj = $row2['ilosc'];
  7. $id = $row2['id_produktu'];
  8. $kolor = $row2['kolor'];
  9. $rozmiar = $row2['rozmiar'];
  10. echo $oddaj.' '.$id.' '.$kolor.' '.$rozmiar;
  11. mysql_query("UPDATE produkty_info SET ilosc=ilosc+$oddaj WHERE id='$id' AND kolor='$kolor' AND rozmiar='$rozmiar'");
  12. }
  13. }


Chce zeby ilosci produktów wracały na stan gdy zamówienie osiągnie status 'anulowano'.
Zaden błąd się nie wyświetla a UPDATE sie nie wykonuje poprawnie tj. jak jest kilka rekordów to tylko 1 sie uploaduje.

Co może być nie tak?
Turson
Jesteś pewny, że zapytanie zwraca więcej niż 1 rekord?
kamilo818
Tak.

Gdy jest 1 rekord to poprawnie działa ten kod.
Problem pojawia się gdy jest więcej rekordów
Turson
Proponuję wyświetlić treść każdego zapytania i przejrzeć jak to wyglada
kamilo818
W koncu sie dopatrzyłem. Wszytko jest ok.
Okazało się że nie mam takiego elementu w bazie i nie miał co updatować po prostu.
W bazie miałem kolor: biały a w zapytaniu: kolor=białe

Chciałbym na przyszłość się zabezpieczyć przed tym i jak update sie nie uda zeby wywlał komunikat.

Zrobiłem coś takeigo:

  1. while ($row2 = mysql_fetch_array($result2)) {
  2. if($new_stat==='anulowano'){
  3. $oddaj = $row2['ilosc'];
  4. $id = $row2['id_produktu'];
  5. $kolor = $row2['kolor'];
  6. $rozmiar = $row2['rozmiar'];
  7.  
  8.  
  9. $sql = "UPDATE produkty_info SET ilosc=ilosc+$oddaj WHERE id='$id' AND kolor='$kolor' AND rozmiar='$rozmiar'";
  10. $result = mysql_query($sql);
  11.  
  12. if(!$result) {
  13. echo 'brak elementu w bazie';
  14. }
  15.  
  16.  
  17. }


Ale nie działa. W każdym przypku $result jest true nawet jak update sie nie uda.

Co to zmienic?
viking
Zrób var_dump($result); dla niepowodzenia i zobacz co masz. Dla poleceń zmieniających mysql_query zwraca true/false.
nospor
brak rekordow spelaniajacych warunek w UPDATE to dla mysql nie jest zadne niepowodzenie. mysql_query zawsze zwroci ci TRUE dla zapytan UPDATE ( nie liczac przypadku bledu bazy/zapytania)
By sprawdzic ile zmodyfikowano rekordow masz uzyc:
http://pl1.php.net/manual/en/function.mysq...fected-rows.php
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.