Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Integralność danych przy jednoczesnym dostępie
Kikert
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 15.09.2008

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


Cześć,
stworzyłem stronę z konkursami online, jest oparta o chat, w którym użytkownicy wpisują odpowiedzi. Jeżeli trafią jedną z trzech opcji, użytkownik wygrywa. W takiej sytuacji do tabeli z wiadomościami była dodawania nowa, a później wykonywał się UPDATE w tabeli z konkursami, żeby ustawić zwycięzcę, jeżeli odpowiedź jest prawidłowa. Niestety, ostatnio są problemy - skrypt dwa razy dodał prawidłową odpowiedź do chatu, ale nie ustawił zwycięzcy i wygrała osoba, która podała odpowiedź jako trzecia. Niestety kto inny zajmuje się administracją - nie mogę założyć dodatkowych logów itp.

Zastanawiam się, jak zabezpieczyć skrypt przed taką sytuacją. Korzystam z mysqli, obydwie tabele na silniku InnoDB. Uwarunkowałem dodanie wiadomości do chatu od tego, czy wykonano UPDATE, ale obawiam się, że to za mało. Poniżej fragment pliku odbierającego ajaxowe zapytania:
  1. $update = $db->query(
  2. "UPDATE {$DBP_}contests SET `winner`='{$_SESSION['id']}' ".
  3. "WHERE `id`='{$contest['id']}' AND winner IS NULL AND '{$message_lowercase}' IN (answer, answer2, answer3)"
  4. );
  5.  
  6. if ($update) {
  7.  
  8. if ($db->affected_rows === 1)
  9. $json['won'] = array(
  10. 'answers' => array($message),
  11. 'winner_login' => $_SESSION['username'],
  12. 'winner_gravatar' => $_SESSION['gravatar']
  13. );
  14.  
  15. // ADD MESSAGE
  16. $db->query("INSERT INTO {$DBP_}chat SET `user_id`='{$_SESSION['id']}', `date`=NOW(), `text`='{$message}'");
  17.  
  18. }

Czy ktoś mógłby podać jakąś wskazówkę co jeszcze można zrobić?
Go to the top of the page
+Quote Post

Posty w temacie


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 - 02:54