Вечер в радость, кодеры. Понадобилось написать обработчик для 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'
);
}