Zabezpieczenie przed dublowanie sie wpisów...
Sniper Elite
13.08.2014
Witam. Szukam zabezpieczenia przed dublowaniem sie wpisow w bazie danych. Wiem ze trzeba bylo nadac unikalny klucz pewnej kolumnie w bazie (ja chce to zrobic na nick) oraz dodac do pluginu przy tworzeniu wpisu pewna fraze. Moglby mi to ktos przyblizyc?
Sniper Elite
13.08.2014
Zrobilbym tak:
ALTER TABLE `nazwa_tabeli` ADD PRIMARY KEY (`nazwa_kolumny`)
A na serwerze podczas dodawania wpisu w bazie zamienie to:
formatex(q_command, 511, "INSERT INTO `%s` (`nick`,`klasa`,`lvl`,`exp`) VALUES ('%s',%i,1,0)", g_sqlTable, name, class);
na:
formatex(q_command, 511, "INSERT INTO `%s` (`nick`,`klasa`,`lvl`,`exp`) VALUES ('%s',%i,1,0) ON DUPLICATE KEY UPDATE `exp` = `exp`+VALUES(`exp`)", g_sqlTable, name, class);
Bedzie trybic?
GwynBleidD
13.08.2014
Sniper Elite
16.08.2014
Czyli zbierając to wszystko w całość:
- z tym unikalnym kluczem jako nick jest ok
- jeżeli nowy gracz wbija na serwer nie tworzyć mu nowego wpisu od razu tylko wtedy gdy doświadczenie będzie zapisywane do bazy danych i używać tam komendy:
formatex(q_command, 511, "INSERT INTO `%s` (`nick`,`klasa`,`lvl`,`exp`) VALUES ('%s',%i,%i,%i) ON DUPLICATE KEY `exp` = `exp`+VALUES(`exp`)", g_sqlTable, name, class, PlayerLevel[id], PlayerXp[id]);
Jak zwrócić w tym zapytaniu ilość expa która jest już z bazie? Chcę zrobić tak, że do jednej zmiennej będę zapisywał exp jaki gracz zdobył na jednej mapie a następnie przy zmianie mapy czy wyjściu z serwera pobierał ilość expa w bazie danych, dodawał ilość expa zdobytego i zapisywał do bazy. Potrzebuję tego ponieważ czasami nie wiem czemu resetuje graczom poziom.