Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Подтверждение по email


Автор: R.M. 10.9.2005, 03:20
Вроде всё просто
Юзер заполняет форму, форма приходит ему на мыло вместе с ссылкой на подтверждение
Юзер щёлкает по ссылке подтверждения и всё ок.

Принцип на скока я понял:
1) в базе создаётся строка с генерируемым именем (типа он ожидает регистрацию)
2) Ссылка на неё приходит вместе с формой
3) если юзер заходит по ней строка удаляется
При входе идёт проверка на существование такой строки если она есть пишем "вы не подтвердили" заявку, если нету то всё ок

Правильно ли я мыслю?

Автор: -=Ustas=- 10.9.2005, 04:54
Можно делать по-разному. Можно, например делать добавочное поле в таблице юзеров типа - activate, значения у которого будут соотвественно yes и no. И просто проверять эти значения.

Автор: R.M. 10.9.2005, 07:30
-=Ustas=-

А на что тогда делать ссылку?

Автор: -=Ustas=- 10.9.2005, 08:47
Выводишь какой-нить отдельный блок в структуре программы, где принимаешь эту ссылку, ссылка должна быть сформирована, чтоб в ней было значение этого блока и id-ишник юзера. И всё. Потом проверяешь в БД, в поле activate, если допустим там значение No, то меняешь его Yes и сообщаешь пользователю, что его учетная запись была активирована, если же там уже стоит Yes (может юзера втыкает переходить по этому линку smile), то выводим ему сообщение, что его запись уже активирована, и типа нефиг баловаться с этой ссылкой. Элементарно, Ватсон! smile

Автор: R.M. 10.9.2005, 09:13
-=Ustas=-

Т.е. мне надо rand'ом сгенерировать число например и добавить вначало или в конец id юзера и сделать из этава ссылку или как?

Автор: Mal Hack 10.9.2005, 16:06
1. Сохраняем в БД - код подтверждения. И время. Таймаут - обязателен. К примеру - сутки.
2. ОТправляем код на почту, можно и ссылкой.
3. При клике на ссылку или вводе кода в специальной форме идет проверка этого кода, сохраненного в п.1.
4. Есть есть, замечательно, делаем что надо, к примеру регим окончательно пользователя, нет - значит нет.

Автор: R.M. 11.9.2005, 00:13
Непонимаю как сделать чтобы скрипт узнал с каким кодом пришол юзер (без формы), если ссылка например lalala.php?code=rhf893274j8932 то как узнать что это юзер с полем code = rhf893274j8932

Автор: Mal Hack 11.9.2005, 09:24
Куксикус а что $_GET['code'] уже не катит?

Автор: -=Ustas=- 11.9.2005, 13:26
Делаешь ссылку к примеру такой: lalalal.php?code=rhf893274j8932&id=635, где id - это id-ишник юзера в базе (ты должен вылавливать его перед отправкой письма), код этот помещаешь допустим в поле activate_code в таблице юзеров. При получении этой строки, выбираешь инфу юзера по его id-ишнику, сверяеш код, и если он совпадает, то активируешь юзера.

Автор: R.M. 11.9.2005, 16:10
Mal Hack, -=Ustas=-

буду пробывать

Автор: R.M. 12.9.2005, 11:29
Вот мне ещё чтото не справица, сделал я так что при подтверждении в поле code код заменяется на слово confirmed и неполучается мне отличить неверность кода от confirmed

Код

$select = "SELECT * FROM confirm WHERE id = '".$id."' AND code = '".$code."' ORDER BY id DESC LIMIT 0, 1";
$qselect = mysql_query($select);
$row = mysql_fetch_array($qselect);

if ($code == $row['code'])
{
$upd = "UPDATE confirm SET code = 'confirmed' WHERE id = '".$id."' AND code = '".$code."'";
$qupd = mysql_query($upd);
echo "Заявка активирована";
}
elseif ($row['code'] = "confirmed")
{
echo "Вы уже активировали заявку";
}
elseif ($code != $row[code=php] && $row['code'] != "confirmed")
{
echo "Неверный код";
}

Автор: -=Ustas=- 12.9.2005, 11:40
А синтаксис и логику соблюдать не пробовал?! Попробуй так:
Код

$select = "SELECT
               *
           FROM
               confirm
           WHERE
               id = '".$_GET['id']."'
           AND
               code = '".$_GET['code']."'
           ORDER BY
               id
           DESC
           LIMIT 0, 1";
$qselect = mysql_query($select);
$row     = mysql_fetch_array($qselect);

if ($row['code'] == $_GET['code']) {
    $upd = "UPDATE
                confirm
            SET
                code = 'confirmed'
            WHERE
                id = '".$_GET['id']."'
            AND
                code = '".$_GET['code']."'";
    if (mysql_query($upd)) {
        echo "Заявка активирована";
    }
} else if ($row['code'] == "confirmed") {
    echo "Вы уже активировали заявку";
} else if ($row['code'] != $_GET['code'] && $row['code'] != "confirmed") {
    echo "Неверный код";
}

Автор: DRUG_ADDICT 18.12.2007, 09:27
Да да да... вот я тоже самое делаю что R.M., тока зайдя сюда я уже все что написано выше сделал и ссылку сгенерировал и в хеш её превратил и код генерируется, чтоб потом его в форме подтверждения регистрации писать...  и это все сделал... 

Юзер зарегистрировался 15 ($dara_reg) числа, ЕМУ дается 3 дня чтобы он подтвердил регистрацию, то есть конечная дата это 18 число ($end_data): 

Код

$data_bd = $row[2]; //Берем дату регистрации с базы имеет вид как - 15.12.07

$data = explode(":",$data_bd); //вытаскиваем день а именно число "15"

$end_data = $data[0] + 3; // получаем конечную дату "18"

$time = time(); // получаем настоящую дату в виде "временной метки"

$time_f = date("d.m.Y",$time); // преобразуем временную метку в "наш" формат времени или хз как он называется... в виде 31.12.07

$time_d1 = explode(":",$time_d); // берем снова число настоящего времени оно будет "X" - ну или пусть -"31"


В итоги у нас есть: 15 - начало регистрации, 18 - собсно конец и X или 31 - это время которое щас ну допустим было бы оно щас smile)) вообщем хочу подметить кто не понял 31 число может быть АБСОЛЮТНО ЛЮБЫМ числом от 1 до 31 вот так ;)

Как все составить с помощью конструкции if ( ){ } else { } ?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)