Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 16

Wątek: php czasem zawodzi...

  1. #1
    Zarejestrowany
    Dołączył
    Jul 2011
    Posty
    242

    Domyślnie php czasem zawodzi...

    niech mi ktoś to wyjaśni

    Kod php:

    $query 
    mysql_query("select * from users where user = ".$id);
    $dane mysql_fetch_array($query);

    if(isset(
    $_GET['x']) && $dane['kasa'] > 0) {
    $query mysql_query("update users set kasa = kasa - 1 where user = ".$id);


    jakim cudem w bazie kasa może wejść na wartość poniżej 0?
    Chętnie pomogę, pisz na GG: 36974269

    masz długą nazwę gry i nie chcesz płacić za domenę?
    uruchom domenę TwojaNazwa.tk za darmo -> http://dot.tk

  2. #2
    Zarejestrowany Awatar Migo
    Dołączył
    Aug 2011
    Posty
    905

    Domyślnie

    a jakiego tupu jest pole w bazie.

  3. #3
    Zarejestrowany
    Dołączył
    Jul 2011
    Posty
    242

    Domyślnie

    int..

    ogólnie napisali mi na innym forum, że tak może się właśnie zdarzyć i nawet takie rzeczy trzeba zabezpieczać, np poprzez transakcje...

    yehh tego się nie spodziewałem ;]
    Chętnie pomogę, pisz na GG: 36974269

    masz długą nazwę gry i nie chcesz płacić za domenę?
    uruchom domenę TwojaNazwa.tk za darmo -> http://dot.tk

  4. #4
    Zarejestrowany Awatar Migo
    Dołączył
    Aug 2011
    Posty
    905

    Domyślnie

    mi się nigdy nie zdarzyło przy typu pola int ale kto wie.

  5. #5
    Zarejestrowany
    Dołączył
    Jul 2011
    Posty
    242

    Domyślnie

    no nie chodzi o typ pola, tylko o ilość przeładowań strony i w pewnym momencie może być tak, że dasz 2 jednoczesne zadania dla danego usera

    jedno się nie skończy a już drugie zacznie lecieć
    Chętnie pomogę, pisz na GG: 36974269

    masz długą nazwę gry i nie chcesz płacić za domenę?
    uruchom domenę TwojaNazwa.tk za darmo -> http://dot.tk

  6. #6
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    118

    Domyślnie

    Nie bardzo rozumiem to pytanie. Przecież to chyba jasne, że gdyby nie ten warunek, że kasa ma być >0 to można by zjechać z kasą grubo ponad kreskę. A w ten sposób UPDATE wykona się gdy kasa==1 ale już nie gdy kasa==0.

  7. #7
    Zarejestrowany
    Dołączył
    Jul 2011
    Posty
    242

    Domyślnie

    no właśnie nie zrozumiałeś

    bo jak się okazało, to sam ten warunek if(isset($_GET['x']) && $dane['kasa'] > 0) { nie wystarcza

    w sytuacjach dużej ilości przekliknięć/odwiedzin strony to okaże się, że się wywali w momencie gdy np 2x klikniesz w link, który potem miałby wykonać tą akcję
    Chętnie pomogę, pisz na GG: 36974269

    masz długą nazwę gry i nie chcesz płacić za domenę?
    uruchom domenę TwojaNazwa.tk za darmo -> http://dot.tk

  8. #8
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    118

    Domyślnie

    Co znaczy 'się wywali'? Mniemam, że chodzi o to, że zapytanie się wykona i sprowadzi wartość kasy poniżej 0. A wykona się nie z winy PHP, tylko z winy MySQL.

    Użycie transakcji w takim wypadku powinno zagwarantować prawidłowe działanie.

  9. #9
    Zarejestrowany
    Dołączył
    Jul 2011
    Posty
    242

    Domyślnie

    to ze transakcja to zalatwi to jest to pewne i sam to napisalem juz dawno poczytaj wczesniejsze posty

    problem pojawia sie gdy ten prosty kod, bardziej skomplikujemy

    i nie chodzi o to ze ja nadal nie wiem jak co zrobic, tylko pokazuje userom, ze taka sytuacja moze sie zdazyc choc niby IF mial przed tym chronic

    (sorry za brak pl, pisane z komorki)
    Chętnie pomogę, pisz na GG: 36974269

    masz długą nazwę gry i nie chcesz płacić za domenę?
    uruchom domenę TwojaNazwa.tk za darmo -> http://dot.tk

  10. #10
    Zarejestrowany
    Dołączył
    Nov 2011
    Posty
    118

    Domyślnie

    Kod php:
    if(isset($_GET['x'])) { 
    $query mysql_query('UPDATE users SET kasa = kasa - 1 WHERE user = ".$id.' AND kasa>0'); 

    Taki, prostszy kod, zadziała bez transakcji.

Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Czasem jako nadmin nie jestem podliczany pkt
    Przez michal12514 w dziale Pytania dotyczące silnika Xnova
    Odpowiedzi: 4
    Ostatni post / autor: 21-07-2009, 22:08

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •