Dodawanie duplikatów do MySQL mimo sprawdzenia

0

Mam stronę w PHP z użyciem AJAX'a. Dość rozbudowany panel, porozbijany na różne pliki, które odświeża AJAX, gdy zajdą jakieś zmiany, porobione zegarki w JS, które sprawdzają zmiany i odświeżają podpliki php.

Mam coś takiego, że klikam w przycisk, pojawia się okienko (modal) i tam wpisuje dane, klikam OK i te dane wpadają do bazy MySQL jako nowy rekord. Wcześniej sprawdzam, czy takie dane już nie istnieją w bazie. Jeżeli istnieją - wyrzuć komunikat o błędzie i przerwij skrypt.

Problem pojawia się gdy dodam pierwszy raz zupełnie coś nowego, np:

Informacja1 | Informacja2

Tych danych nie ma w bazie. Wpisuje w formularz, daję OK i dodaje mi (różnie) - 3, 5 rekordów takich samych (mimo sprawdzenia czy rekord już istnieje)

Informacja1 | Informacja2
Informacja1 | Informacja2
Informacja1 | Informacja2
Informacja1 | Informacja2
Informacja1 | Informacja2

Tak jakby skrypt gdzieś wykonywał się 5 razy w jednym momencie i nienadążał sprawdzać czy rekord istnieje.

Jak znowu spróbuje dodać (gdy dane już są w bazie)

Informacja1 | Informacja2

Już nie doda, wyskoczy błąd. Duplikuje mi rekordy, gdy dane są zupełnie nowe.

Wiem, że winą są tu te zegarki i odświeżanie plików i nie zdąża sprawdzić czy rekord istnieje.

Jak sobie z tym poradzić?

1

W przypadku posta który nie zawiera kodu, jedyną poradą jak sobie z tym poradzić będzie tylko - "Naprawić błąd". A tak już ciutkę poważniej - użyj debuggera i zobacz w którym momencie są robione wpisy do bazy. Mi to wygląda na pętle jakąś, albo podpięte eventy lub zbędne/nadmiarowe wywołania metody dodającej do bazy. Tak poza tym w bazie danych nie możesz zrobić unique? Btw najpierw sprawdzaj czy rekord istnieje, a potem dodawaj, bo wyżej napisałeś tak jakbyś to Ty wiedział że rekord nie istnieje - tak więc najpierw sprawdzaj (w phpie), potem dodawaj. Ew. może masz jeszcze jakieś transakcje otwarte czy coś? Ciężko wróżyć jak się nie ma kodu.

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