Как запретить пользователю вступать еще раз ?

 
Посетитель
small user social cms
Медаль
Сообщений: 624
Как запретить пользователю вступать еще раз ? Друзья есть турнир в котором люди заходят и создают команду но проблема в том что каждый пользователь может принять участие во всех командах, а мне надо что бы если он вступил в команду, все закрыть ему кнопку и вместо этой кнопки написать что * вы уже в команде*, только после если он захочет поменять команду он сможет вступить, есть база куда при вступление игрока записывается user_id. Вот кнопка

Код PHP:
  1.  
  2. if ($tournament['status'] == tournament::STATUS_PENDING){
  3. if (cmsUser::isLogged()){
  4. if (!$is_user_in_tournament || cmsUser::isAdmin()){
  5. $this->addToolButton(array(
  6. 'class' => 'user_add',
  7. 'title' => LANG_TOURNAMENT_JOIN,
  8. 'href' => $this->href_to('join', $tournament['id'])
  9. ));
  10. }
  11. }
  12.  
  13. }
Но у меня есть запрет вступать повторно в эту же команду.
Редактировалось: 2 раз (Последний: 6 июня 2016 в 18:49)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
На странице вступления в команду, перед добавлением в БД, делайте запрос
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('cms_таблицы', 'user_id', cmsUser::get('id'));
Тут мы пытаемся получить список пользователей, которые вступили в группу, если запрос что то вернет, значить этот пользователь уже в команде, тогда можете вернуть false с текстом, что вы уже в команде
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Реклама
cms
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

На странице вступления в команду, перед добавлением в БД, делайте запрос
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('cms_таблицы', 'user_id', cmsUser::get('id'));
Тут мы пытаемся получить список пользователей, которые вступили в группу, если запрос что то вернет, значить этот пользователь уже в команде, тогда можете вернуть false с текстом, что вы уже в команде

То есть это вставляем сюда ?

Код PHP:
  1. <?php
  2. class actionTournamentJoin extends cmsAction {
  3. public function run($tournament_id){
  4. if (!$tournament_id) { cmsCore::error404(); }
  5. $tournament = $this->model->getTournament($tournament_id);
  6. if (!$tournament || $tournament['status'] != tournament::STATUS_PENDING) {
  7. cmsCore::error404(); }
  8. $user = cmsUser::getInstance();
  9. $is_user_in_tournament = $user->is_admin ? false : $is_max;
  10. if ($is_user_in_tournament){
  11. cmsCore::error404(); }
  12. $errors = false;
  13. $form = $this->getForm('join');
  14. $is_submitted = $this->request->has('submit');
  15. $team = $form->parse($this->request, $is_submitted);
  16. $user = cmsUser::getInstance();
  17. if ($is_submitted){
  18. $errors = $form->validate($this, $team);
  19. if (!$errors){
  20. $team['tournament_id'] = $tournament_id;
  21. $team['user_id'] = $user->id;
  22. $this->model->addTeam($team);
  23. $tournament = $this->model->getTournament($tournament_id);
  24. if ($tournament['users_count'] >= $tournament['min_users']){
  25. $this->model->setTournamentStatus($tournament_id, tournament::STATUS_MODERATION); }
  26. $this->redirectToAction('event', array($tournament_id)); }
  27. if ($errors){
  28. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error'); } }
  29. $template = cmsTemplate::getInstance();
  30. $template->render('form_join', array(
  31. 'form' => $form,
  32. 'errors' => $errors,
  33. 'team' => $team,
  34. 'tournament' => $tournament
  35. ));
  36. }
  37. }
А в шаблоне как прописать?
Редактировалось: 3 раз (Последний: 6 июня 2016 в 22:52)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Да.
В шаблон нечего не надо прописать, сделайте проверку, если пользователь уже вступил
Код PHP:
  1. if($is_add){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

Да.
В шаблон нечего не надо прописать, сделайте проверку, если пользователь уже вступил
Код PHP:
  1. if($is_add){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }

Нет не получается опять вступает вот щас код весь скину (
Спойлер
Спойлер
Как запретить пользователю вступать еще раз ?
Редактировалось: 1 раз (Последний: 6 июня 2016 в 23:31)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Все равно вступает (( 3 команды создал ко всем вступает ((
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Вот линк на сайт http://3x3azerbaijan.com/tournament/teams
Посетитель
small user social cms
Медаль
Сообщений: 128
Evanescence:

Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Ух-ты какая штука. А можно узнать, этот код не даст вступить в другие группы или в ту же самую, делая кнопку не активной?
Интерес один - http://kznmed.ru
Проверенный хостинг под Instant http://goo.gl/6W6WV
Монетизирую сайт тут http://goo.gl/vux68
Посетитель
small user social cms
Медаль
Сообщений: 624
ivanish:

Evanescence:

Мой код вы добавили к двум файлам а надо к одному join.php
Вот как должно быть:
Код PHP:
  1. $is_add = $this->model->filterEqual('tournament_id', $tournament_id)->getItemByField('team', 'user_id', cmsUser::get('id'));
  2. if($is_add){
  3. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  4. $this->redirectBack();
  5. }

Ух-ты какая штука. А можно узнать, этот код не даст вступить в другие группы или в ту же самую, делая кнопку не активной?

Вот у меня не дает вступать эту же самую, но я хочу что бы он не давал вступать и в другие группы, только если он выйдет то тогда может вступить, то есть он должен вступать не имеет значения куда только 1 раз
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
ivanish:
или в ту же самую, делая кнопку не активной?
Не дает вступить в команду, ID которую получаем по URL
Если автор поймет код выше, то может использовать и на странице, где есть кнопка Вступить в команду и по условию, вывести или скрыть кнопку.
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

ivanish:
или в ту же самую, делая кнопку не активной?
Не дает вступить в команду, ID которую получаем по URL
Если автор поймет код выше, то может использовать и на странице, где есть кнопка Вступить в команду и по условию, вывести или скрыть кнопку.

Я вот делаю как вы сказали но не получается ни как, если не сложно подскажите (((

Вот join.php как вы сказали сделал

Спойлер
И вот сама кнопка вступить


Спойлер
Редактировалось: 2 раз (Последний: 7 июня 2016 в 15:43)
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1152
Вроде правильно всё, а что именно не работает? пользователь может 2 раза вступить в команду?
Таблица в БД, которые хранить ID пользователей, которые вступили, точно называется team? поле называется user_id?
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
Медаль
Сообщений: 624
Evanescence:

Вроде правильно всё, а что именно не работает? пользователь может 2 раза вступить в команду?
Таблица в БД, которые хранить ID пользователей, которые вступили, точно называется team? поле называется user_id?

Пользователь не может 2 раза вступать в команду А это изначально было, пользователь может вступать в разные команды, то есть в команду А он вступил и в команду Б тоже он может вступить, а мне надо если в команду А он вступил то в Б не должен

id tournament_id user_id team_name
1 6 1 3x3 Azerbaijan
2 7 1 Streetball
3 8 2 tournament_teams
7 9 2 3x3 Azerbaijan

tournament_id ----- это id команд
Редактировалось: 3 раз (Последний: 7 июня 2016 в 16:16)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3508
Вам просто надо сделать проверку на заполненность поля cmsUser::get('tournament_id').
Код PHP:
  1. if(cmsUser::get('tournament_id')){
  2. cmsUser::addSessionMessage('Вы уже в команде', 'error');
  3. $this->redirectBack();
  4. }
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: