Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] podwójne odejmowanie rekordu :/
Forum PHP.pl > Forum > Przedszkole
Kamil90
Witam.
Mam dziwny i chyba rzadko spotykany problem wstydnis.gif . Chodzi o to że mam formularz dodawania filmików, wprowadzam dane i wszystko jest ok. Pole 'typ' wynosi 7 tak jak być powinno...


Później dane z formularza idą do weryfikacji do admina:
  1. <?php
  2. if ($admin && $row['typ'] >= 5 && $row['typ'] != 15 && $row['typ'] != 16 && $row['typ'] != 17)
  3. {
  4. echo '<p>
  5. Weryfikacja: <a href="index.php?page=display&amp;id=' . ((int) $_GET['id']) . '&amp;action=zatwierdz" title="ZatwierdĽ"><img src="ikonki/zatwierdz.gif"border="0">zatwierdĽ</a> <a href="index.php?page=display&amp;id=' . ((int) $_GET['id']) . '&amp;action=odrzuc" title="Odrzuć"><img src="ikonki/usun.gif"border="0">odrzuć</a>
  6. </p>';
  7. ?>


a nastepnie od pola 'typ' ma być odjęte -4 i problem jest w tym, że odejmuje zawsze dwa razy tyle, czyli odejmuje od 7-8 i mam -1 w mysql a powinno być 3 :/, jak wprowadze 2 zamiast 4 to bedzie dejmowało 4 :/ niestety przy kazdej wartości pola 'typ' musi byc odejmowane 4 dlatego nie moge zastapić tego 2. Oto kod w którym przerabiana jest weryfikacja:
  1. <?php
  2. if ($admin && isset($_GET['action']))
  3. {
  4.   switch ($_GET['action'])
  5.   {
  6.   case 'zatwierdz':
  7.     if (!mysql_query('update `stuff` set `typ` = `typ` - 4 where `id`=' . ((int) $_GET['id'])  ))
  8.     {
  9.       echo '<p>Nie udało się zaaktualizować rekordu.</p>';
  10.     }
  11.     else
  12.     {
  13.       echo '<p>Filmik został zatwierdzony poprawnie.</p>';
  14.     }
  15.     break;
  16.  
  17.   case 'odrzuc':
  18.     if (mysql_query('delete from `komentarze` where `stuff`=' . ((int) $_GET['id'])) &&
  19.     mysql_query('delete from `oceny` where `stuff`=' . ((int) $_GET['id'])) &&
  20.     mysql_query('delete from `stuff` where `id`=' . ((int) $_GET['id'])))
  21.     {
  22.       echo '<p>Filmik został poprawnie usuniety.</p>';
  23.     }
  24.     else
  25.     {
  26.       echo '<p>Nie udało się usunąć rekordów z tabeli.</p>';
  27.     }
  28.     break;
  29.   }
  30. }
  31. ?>


a oto efekt w bazie mysql:


mam nadzieje że jesno przedstawiłem problem... bardzo proszę o pomoc.

Pozdrawiam
Zyx
Jesteś pewien, że ten kod albo to zapytanie się dwukrotnie nie wykonuje? Ono samo działa poprawnie, zaś podane kawałki kodu nie mówią nic, dlaczego tak by się mogło dziać.
Wykrywacz
Używaj odpowiedniego BB-codu, bo mi się aż nie chce tego czytać aby ci pomóc. Pokaż więcej bo tak jak Zyx napisał tu wygląda wszystko wporzo
EarthCitizen
Wklej strukturę tabeli, pewnie robisz działania na stringu...
Kamil90
oto struktura tabeli:



tutaj mysle ze chyba jest wszystko ok...

edit:
  1. <?php
  2. if ($admin && isset($_GET['action']))
  3. {
  4.   switch ($_GET['action'])
  5.   {
  6.   case 'zatwierdz':
  7.     if (!mysql_query('update `stuff` set `typ` = `typ` - 4 where `id`=' . ((int) $_GET['id'])  ))
  8.     {
  9.       echo '<p>Nie udało się zaaktualizować rekordu.</p>';
  10.     }
  11.     else
  12.     {
  13.  
  14. [b]// I TUTAJ MOZE BY DODAC TE 4? questionmark.gif Jaki w takim razie kod musiałbym wkleić?[/b]
  15.       echo '<p>Filmik został zatwierdzony poprawnie.</p>';
  16.     }
  17.     break;
  18. ?>
EarthCitizen
No masz inta, chociaż nie wiem po co Ci tam int, daj tinyint(2) albo enum.

A co do problemu, to może daj po prostu SET typ = 3 ?
Chociaż chyba lepiej abyś rzeczywiście sprawdził, czy ten kod nie wykonuje się 2 razy...
Kamil90
no właśnie nie bardzo pasuje dac mi 'SET typ=3', bo typ będzie różny... Jestem pewien że ten odcinek wykonywany jest 2 razy bo jak wpisze '- 3' to odejmuje mi 6. Pomyślełem że po tych linijkach kodu
  1. <?php
  2. {
  3. case 'zatwierdz':
  4. if (!mysql_query('update `stuff` set `typ` = `typ` - 4 where `id`=' . ((int) $_GET['id']) ))
  5. {
  6. echo 'Nie udało się zaaktualizować rekordu.
  7.  
  8. ';
  9. }
  10. else
  11. {
  12. ?>

tutaj ponownie dodać te 4 do 'typ' ale jaki będzie kod?
Wykrywacz
Cytat(Wykrywacz @ 21.01.2009, 16:15:28 ) *
  1. SELECT panstwa FROM panstwa LEFT JOIN miasta ON panstwa.id = miasta.panstwa_id

chyba "Ja chciałbym pobrać listę tylko tych państw, dla których w tabeli 'miasta' są dodane jakieś wpisy "

Cytat
if (!mysql_query('update `stuff` set `typ` = `typ` - 4 where `id`=' . ((int) $_GET['id']) ))


a spróbuj zrobić tak
  1. <?php
  2. if (!mysql_query('update `stuff` set `typ` = (`typ` - 4) where `id`=' . ((int) $_GET['id']) ))
  3. ?>
EarthCitizen
Cytat
tutaj ponownie dodać te 4 do 'typ' ale jaki będzie kod?

To nie ma sensu... znajdź błąd dlaczego kod wykonuje się 2 razy, a nie kombinuj z obejściem tego....
Kamil90
Wykrywacz włąsnie tak spróbowałem i niestety dalej to samo...sad.gif a może ten kod który odejmuje 4 wrzucić by na koniec? albo jeszcze inaczej wpisać w pętle while i żeby 1 raz tylko wykonywało...
Zyx
I właśnie tu by się teraz przydała przyzwoita biblioteka do komunikacji z bazami danych, a nie ciągle tylko te debilne mysql_cośtam, które już dawno powinny znaleźć się na śmietniku historii. Choćby nawet i PDO, bo wtedy od biedy można stworzyć prostą nakładkę, która wyświetla wszystkie zapytania i inaczej zainicjować obiekt - wtedy byś od razu widział, czy to wina skryptu, bo dwukrotnie wykonuje jakieś zapytanie, czy też może tego, że przez przypadek jest wywoływana strona dwa razy jakimś magicznym sposobem.
Kamil90
też o tym właśnie myślełem że może strona jest wywoływana dwa razy ale nie mam jak sprawdzić, ogólnie z problemem poradziłem sobie tak:
  1. <?php
  2. if ($admin && isset($_GET['action']))
  3. {
  4.  switch ($_GET['action'])
  5.  {
  6.  case 'zatwierdz':
  7.    if (!mysql_query("update `stuff` set `typ` = `typ` - 4 where `id`=" . ((int) $_GET['id']  )))
  8.    {
  9.      echo '<p>Nie udało się zaaktualizować rekordu.</p>';
  10.    }
  11.    else
  12.    {
  13. (!mysql_query("update `stuff` set `typ` = `typ` + 2 where `id`=" . ((int) $_GET['id']  )));
  14.      echo '<p>Filmik został zatwierdzony poprawnie.</p>';
  15.  
  16.    }
  17.    break;
  18. ?>
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.