Перенаправление не позволит им обновиться - но что, если они снова нажмут на ссылку в своем электронном письме?
Вы должны проверить, активирован ли текущий пользователь или нет.
$sql = "SELECT id, conf FROM users WHERE email = '{$email}'";
$exec = mysql_query($sql) or die(mysql_error());
list( $id, $conf ) = mysql_fetch_row($exec);
if( $conf ) {
// Redirect them to their profile with a message saying "your account has already been activated"
header("Location: /profile?already_activated");
exit;
}
// your code
$confirm = mysql_query("UPDATE users
SET conf = 'TRUE'
WHERE id = '{$id}'");
В ответ на ваш комментарий:
Имейте в виду, это только добавит дополнительный запрос для пользователя, который еще не активирован. Если они активированы, происходит перенаправление, и на странице все еще выполняется только 1 запрос.
Чтобы немного оптимизировать это, вы можете выбрать идентификатор пользователя и статус подтверждения на основе адреса электронной почты. Затем, если их нужно активировать, вы можете активировать их по идентификатору пользователя, а не по электронной почте. Так как целочисленный ключ намного быстрее, объединенное время 2 запросов будет примерно таким же, как и 1 запрос, который вы обновляете на основе строкового столбца. Я обновил код, чтобы отразить это.
Кроме того, эта страница, вероятно, будет доступна не очень часто. Любая оптимизация будет действительно микро- и не очень полезной.
Кстати, я надеюсь, что вы используете mysql_real_escape_string
в письме, и что conf
является логическим значением true / false, а не строкой 'true' / 'false'.