AllDecay
@AllDecay
Вечно отдыхающий.

Как спрятать строку в бд от рандома?

Вечер в радость, кодеры. Понадобилось написать обработчик для Callback VK с раздачей ключей Steam подписчикам. Набросал примерный код - работает, но лазейку для абузеров нужно прикрыть сразу.
Выдал ключ -> добавил в бд id пользователя рядом с его ключом и отметил как-то эту строку (дабы больше она не выпадала в order by rand).
Но с добавлением id пользователя к ключу возникла проблема. Собственно, сам запрос:
$dbh->query("UPDATE `keys` SET `owner` = ".$user_id." WHERE `key` = ".$row['key']);


Так вот, как спрятать уже выданные ключи от рандома SQL и что делать с неработающим запросом?
Могу показать фулл код и структуру бд.

А вот, пока что, все условия проверок на данный момент:
if ($ismember==0) {
	$request_params = array( 
	'message' => "Чтобы получить ключ, необходимо подписаться на example.com/toster", 
	'user_id' => $user_id, 
	'access_token' => $token, 
	'v' => '5.0' 
	);
} elseif($ismember==1 && $message=='Хочу ключ') {
	$qwe = $dbh->query("SELECT * FROM `keys` WHERE 1 ORDER BY RAND() LIMIT 1");
	$row = $qwe->fetch();
	$dbh->query("UPDATE `keys` SET `owner` = ".$user_id." WHERE `key` = ".$row['key']);
	$request_params = array( 
	'message' => 'Держи ключ, друг: '.$row['key'], 
	'user_id' => $user_id, 
	'access_token' => $token, 
	'v' => '5.0' 
	);
} else {
	$request_params = array( 
	'message' => 'Чтобы получить ключ, напиши мне "Хочу ключ"', 
	'user_id' => $user_id, 
	'access_token' => $token, 
	'v' => '5.0' 
	);
}
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
rim89
@rim89
программист-велосипедист
добавил в бд id пользователя рядом с его ключом

сделать колонку какую нить - key_Activate (tinyINT), что ключ отдан - 1, не отдан - 0.
И потом
SELECT ... FROM ... WHERE key_Activate = 0 ORDER BY RAND() LIMIT 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы