Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

Запрет повторного голосования

Здравствуйте. Сделал голосовалку и появилась необходимость запретить повторное голосование. Решил через id пользователя. Для этого создал таблицу и в ней два поля user_id и poll_id. То есть при заходе в голосование ищем в таблице все id текущего голосования, берем id текущего пользователя и если есть совпадения - в данном голосовании уже был этот пользователь, то запрещаем ему голосовать здесь, если id пользователя не совпадает ни с одним id голосования, то даем ему проголосовать и записываем в таблицу id голосования и id пользователя. Скажите пожалуйста я правильно мыслю ? Или нагородил фигни ? И эта таблица ведь должна быть связана с таблицами user и poll ?


Ответ

Вроде получилось, вот код контроллера:
public function actionPoll($id, $user_id, $poll_id) { $single = Poll::getOne($id); $getdata = PollUser::getData($user_id, $poll_id);
$u = Yii::$app->user->id;
if ($u != $getdata->user_id && $id != $getdata->poll_id) {
if ($single->load(Yii::$app->request->post())) {
if ($single->count1) { $single->updateCounters(['count1' => 1]); } if ($single->count2) { $single->updateCounters(['count2' => 1]); } if ($single->count3) { $single->updateCounters(['count3' => 1]); }
Yii::$app->db->createCommand("INSERT INTO poll_user (user_id, poll_id) VALUES ($u, $id)")->execute();
return $this->redirect("/site/poll/?id=$single->id&user_id=$u&poll_id=$single->id"); } } else { return $this->render('pollonlyresult', ['single' => $single, 'getdata' => $getdata]); } return $this->render('poll', ['single' => $single, 'getdata' => $getdata]); }
Берем голосование. Берем данные из проверочной таблицы. Получаем id залогиненого юзера - проверяем на совпадения в проверочной таблице - если нет совпадений, то голосуем и записываем текущего юзера и голосование в таблицу. Редиректим на страницу с результатами. Если же есть совпадения, то сразу редиректим на страницу с результатами. Вроде бы так, большое спасибо всем кто ответил.

Комментариев нет:

Отправить комментарий