Как реализовать скрипт активации.php?

Я пытаюсь создать скрипт, который проверяет (активирует) учетную запись пользователя из переменной, которая отправляется им в их регистрационном письме.

URL-адрес будет выглядеть

activate.php?confirm=h47H35gGdh7G6dh3j

и я $_GET["confirm"] проверю его по базе данных, но я не знаю, как отловить все ошибки, с которыми я могу столкнуться, например:

  • Пользователь уже активирован
  • неверный код активации
  • нет кода активации вообще и т.д.

Как я могу это сделать?


person Michael    schedule 29.08.2011    source источник
comment
Добавьте user_id к вашему URL.   -  person xdazz    schedule 29.08.2011
comment
@xdazz Я не согласен. Добавьте user_id в свою базу данных. Вы не хотите доверять какой-либо информации на стороне клиента.   -  person mjec    schedule 29.08.2011
comment
@mjec user_id находится в базе данных, вам нужен user_id, чтобы знать, какого пользователя вы хотите активировать.   -  person xdazz    schedule 29.08.2011
comment
@xdazz вот что я имею в виду. Ваш токен активации должен храниться в базе данных — я бы предложил использовать его с user_id, временем выдачи, сроком действия и флагом того, был ли он использован.   -  person mjec    schedule 29.08.2011


Ответы (2)


Чтобы обнаружить отсутствие кода активации:

if (!isset($_GET['confirm']) || empty($_GET['confirm'])) {
    die('Error: an activation code is required.');
}

Чтобы обнаружить уже активированного пользователя, выполните поиск в базе данных идентификатора пользователя для активации ($uid), затем проверьте в базе данных, не активирован ли уже пользователь. Если вы хотите избежать дополнительного поиска и не возражаете против запуска дополнительного обновления (и вы не обновляете что-то вроде времени активации), вы можете запустить обновление, а затем проверить, сколько строк было затронуто ($stmt->rowCount() в PDO). Если это ноль, но ошибки базы данных нет, просто пользователь уже был активирован, и вы можете выдать ошибку.

Код активации будет неверным, если вы получите пустой набор (нулевые строки) из базы данных при поиске кода подтверждения.

person mjec    schedule 29.08.2011
comment
Спасибо, я использовал это, чтобы проверить, есть ли код активации, однако он не проверяет, существует ли он в базе данных. На самом деле мне удалось решить это самостоятельно, вытащив код из базы данных и сравнив его со значением в массиве $_GET. В любом случае, спасибо. - person Michael; 01.09.2011

Мне удалось ответить на него самому.

В основном я вытащил значение из массива $_GET и использовал это значение, чтобы увидеть, существует ли оно в базе данных, если да, то я использовал другой оператор if, чтобы увидеть, был ли статус этого пользователя уже установлен на «активный», если да, он ничего не сделает, но если учетная запись не будет активной, он сделает ее активной и подтвердит это.

person Michael    schedule 01.09.2011