Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] podwójne odejmowanie rekordu :/, gdzie jest błąd w php??
Kamil90
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 17.02.2008
Skąd: Toruń

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


Witam.
Mam dziwny i chyba rzadko spotykany problem (IMG:http://forum.php.pl/style_emoticons/default/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...
(IMG:http://img159.imageshack.us/img159/9518/83638262bg6.jpg)

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:
(IMG:http://img530.imageshack.us/img530/6329/59122780hp6.jpg)

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

Pozdrawiam

Ten post edytował erix 21.01.2009, 16:25:44
Powód edycji: bbcode + ortografia
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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ć.
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #3





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

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


Wklej strukturę tabeli, pewnie robisz działania na stringu...
Go to the top of the page
+Quote Post
Kamil90
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 17.02.2008
Skąd: Toruń

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


oto struktura tabeli:

(IMG:http://img120.imageshack.us/img120/8223/79618083sw3.jpg)

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? (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Jaki w takim razie kod musiałbym wkleić?[/b]
  15.       echo '<p>Filmik został zatwierdzony poprawnie.</p>';
  16.     }
  17.     break;
  18. ?>


Ten post edytował Kamil90 21.01.2009, 16:33:52
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

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


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...

Ten post edytował EarthCitizen 21.01.2009, 16:24:10
Go to the top of the page
+Quote Post
Kamil90
post
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 17.02.2008
Skąd: Toruń

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


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?

Ten post edytował Kamil90 21.01.2009, 16:34:17
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #8





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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. ?>
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #9





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

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


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....
Go to the top of the page
+Quote Post
Kamil90
post
Post #10





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 17.02.2008
Skąd: Toruń

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


Wykrywacz włąsnie tak spróbowałem i niestety dalej to samo...(IMG:http://forum.php.pl/style_emoticons/default/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...

Ten post edytował Kamil90 21.01.2009, 17:10:53
Go to the top of the page
+Quote Post
Zyx
post
Post #11





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.
Go to the top of the page
+Quote Post
Kamil90
post
Post #12





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 17.02.2008
Skąd: Toruń

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


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. ?>
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: 24.08.2025 - 14:33