Dublowanie się rekordów w bazie mysql

0

Witam. Mam dosyć dziwny błąd. Otóż wywołuje sobie w pliku .php zapytanie mysql które dodaje mi rekord do bazy. Wszystko jest ok tylko wykonuje się ono zawsze 2 razy. No może nie zawsze ale tak w 66% przypadkach. Dodałem sobie echo 'dupa'; do tego if'a i za każdym razem w przeglądarce widzę go 3 razy (bo 3 razy wywołuje zapytanie). Tylko dlaczego w 66% przypadkach widzę w mojej bazie 6 rekordów? Oczywiście czasami zdarzy się że jest w bazie 3 rekordy. Ale częściej jest 6 rekordów. Zaznaczam że w 100% przypadków w przeglądarce widzę 3 razy słowo (za przeproszeniem) "dupa" czyli if przechodzi tylko 3 razy. A w bazie jest 6 rekordów. Dodam że czytałem w google o tym i inni też mieli takie przypadki lecz nie podali tam rozwiązania... Nie includuje żadnego pliku, nie mam 2 razy nigdzie tego samego kodu.
Skrawek kodu:

if( $auc == $buyers )
{
mysql_query("INSERT INTO buyer VALUES ('$auc', '2', 'abc', '', '', '0', '', '', '0', 'zzz')");
echo 'dupa, ';
}

W przeglądarce widzę ZAWSZE 3 razy słowo dupa, a w bazie mam 6 rekordów po 2 te same (choć czasami mam 3 rekordy i żaden nie zdublowany ;)).

0

Załóż UNIQUE i po problemie.

1

Nie wiem czy Unique rozwiąże problem (bo to raczej jego obejście). Kiedyś miałem podobny problem, popatrz w logi serwera, ja raz miałem taką sytuację że przeglądarka domagała się favicon.ico ze strony przez co do serwera zawsze leciały dwa żądania - te właściwe + te o favicon.ico, przez co dodawały mi się po dwa wpisy. Sprawdź logi serwera po pojedynczym żądaniu.

0

Gdzie te logi znajdę koledzy? Robie to wszystko na razie pod localhost na XAMPP.

0

Hmm. Nie mam nigdzie tego pliku :/ Dziś spróbowałem 5 razy i niby w 100% przypadkach jest wszystko ok (kodu nie zmieniałem) więc trochę to dziwne. Nie wiem co myśleć, a chcę mieć to stabilne. Bo później jak pójdzie to w sieć i zacznie się wszystko sypać to nie będzie ciekawie...

0
axelbest napisał(a):

Nie wiem czy Unique rozwiąże problem (bo to raczej jego obejście).

Może nie rozwiąże, ale pomoże namierzyć miejsce, w którym problem powstaje :)

0

/xampp/apache/logs/error.log faktycznie plik istnieje są w nim same warn'y z ssl ale to chyba można pominąć. Żadnego błędu i warnu nie było w tych godzinach wczoraj co testowałem to wpisywanie do bazy. W ogóle nie ma nawet żeby coś w tych godzinach się działo... Dziś tego nie mogę powtórzyć co wczoraj :/ póki co działa dobrze. Ale w sumie wyczytałem też że to przez Chrome... boshe...

0

No tak. Są po 2 ale takie po 1 też były. Czyli w sumie to by wyjaśniało dlaczego tak się dzieje... Jak sobie z tym poradzić?

127.0.0.1 - - [06/Feb/2014:23:58:45 +0100] "GET /cron_buyers.php HTTP/1.1" 200 30 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
127.0.0.1 - - [06/Feb/2014:23:58:45 +0100] "GET /cron_buyers.php HTTP/1.1" 200 30 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
0

"Hmmm a jak wtedy namierzyć błąd - skoro będzie poprawny zapis do bazy (pojedynczy, a nie podwojny) ? Wg mnie lepiej się namierza, mając błąd - bo gdy go ominiemy w sposób"unikalny" :) - to potem cieżko będzie stwierdzić czy naprawiliśmy czy nie ."

  • jeśli pojawiają się dwa wpisy w bazie, to jeśli będzie unikalny, powinien pojawić się błąd przy drugim zapisie... czy jestem juz zbyt zmęczony?
1

W sumie u mnie pojawiał się /GET z favicon.ico, ale kombinowałbym jeszcze na innych przeglądarkach, wyłączył wszystkie pluginy (adblocki itp itd).... na chwilę obecną więcej nie poradzę. :)

0

Jest i też favicon ;)

127.0.0.1 - - [06/Feb/2014:20:42:18 +0100] "GET /cron_buyers.php HTTP/1.1" 404 1136 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
127.0.0.1 - - [06/Feb/2014:20:42:19 +0100] "GET /favicon.ico HTTP/1.1" 404 1136 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
0

Hm... Daj cały plik.

0

Po co cały plik? On sporo waży. Umiem czytać i dałem z niego to co potrzebne. Trzeba coś jeszcze to piszcie to dam co trzeba. Nie widzę sensu wrzucania całego

1

Albo po prostu wrzuć tego favicon'a w lokalizacji do której odnosi się żądanie, albo wyklucz go jakoś z .htaccessa. Innej rady nie widzę, ew korzystaj z takiej przeglądarki która nie potrzebuje tej ikonki.

1

Tu nie chodzi o to żeby zabezpieczyć się przed podwójnym wejściem na ten sam URL, ale żeby 2x nie dodawać tego samego wpisu. Jeśli jest to np. metoda GET to możesz zamienić ją na POST będzie przynajmniej ostrzeżenie przed ponownym wysłaniem formularza, ale licz się z tym że jeśli nie Ty sam to ktoś inny uprze się i będzie sobie "klikał" w link sam.
Aplikacja musi być tak napisana, żeby nawet setne kliknięcie nie zmieniało stanu aplikacji - podobny problem często występuje na forach "bo mi się nie wysłał post więc dałem odśwież". Zazwyczaj jeśli coś dodajesz to używaj metody POST i to powinno załatwić sprawę, jeśli chcesz się zabezpieczyć bardziej poważnie przed tym warto zrobić np. randomowy ukryty token ważny tylko do momentu otrzymania formularza w tej sesji - takie zabezpieczenia są np. w niektórych sklepach internetowych, aby nie kupić 2x tego samego przedmiotu przez podwójne odświeżenie strony, ale jest przy tym więcej zabawy.

0

Dzięki koledzy za rady. Ten plik będzie uruchamiany z cronjoba więc raczej tego błędu później nie będzie bo nikt nie będzie go uruchamiał ręcznie. Jednak zabezpieczyć go trzeba. Poczytam, pomyśle, a jeśli nie będzie nic lepszego to zrobię to tak jak pisze @szopenfx. Dzięki wielkie Panowie za pomoc.

1

Jak z cron'a to zrób zabezpieczenie, że tylko żądania z localhost będą wykonywane - myślę, że to wystarczy i w miarę proste w realizacji.

0

mi też niektóre (ale nie wszystkie) rzeczy dublowało np.
wysyłanie zapytania na mail ze stronki wysyłało pojedynczo ale z tej samej stronki z drugiego formularza który był prawie taki sam wysyłał 2 razy.
Dodawanie użytkownika do bazy sql dodawał podwójnie puste rekordy i jeden prawdziwy, ale do tej samej bazy towar do koszyka dodawał normalnie.

Masakra!

No i po przeczytaniu waszych rad usunąłem po prostu <link rel="Shortcut icon" href="" />


Działa wszystko ok. Chyba z rok tworzyłem kombinacje aby to obchodzić. DZIĘKI ZA NATCHNIENIE!

Ale teraz powiedzcie co ma piernik do wiatraka?

1 użytkowników online, w tym zalogowanych: 0, gości: 1