Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> активация аккаунта через e-mail 
:(
    Опции темы
fakeman
  Дата 5.5.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Решил сделать активацию пользователя но не догоняю как это можно реализовать. Может кто подскажет как это можно сделать ? Код самой регистрации таков. 

Код

<?
@session_start();

  
  include "/home/localhost/www/phpsite/blocks/connect.php";

      $login=$_POST['login'];
      $pass1=$_POST['pass1'];
      $pass2=$_POST['pass2'];
      $regemail=$_POST['regemail'];
      $realname=$_POST['realname'];
     // $regyear=$_POST['regyeare'];
     // $regmonth=$_POST['regmonth'];
      //$regday=$_POST['regday'];
      $about=$_POST['about'];
      $country=$_POST['country'];
      $city=$_POST['city'];
      
      if (isset($login) && isset($pass1) && isset($pass2) && isset($regemail) && isset($realname) /*&& isset($regsex) && isset($regyear) && isset($regday) && isset($regmonth)*/ && isset($about) && isset($country) && isset($city) ) {
        if (!empty($login) && !empty($pass1) && !empty($pass2) && !empty($regemail) ) {


            $login=mysql_real_escape_string(htmlspecialchars($login));
            $sql=mysql_query("SELECT * FROM pref_auth WHERE LOWER(login)='".strtolower($login)."'");
            $string = $regemail;
            if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$string)) {
                if (!mysql_num_rows($sql)) {
                    if (strlen($pass1)>=6) {
                        $pass1=md5($pass1);
                        $pass2=md5($pass2);
                        if (strlen($login)>=2) {
                            if (preg_match('/^[a-z\d_]{4,28}$/i', $login)){
                                if ($pass1==$pass2) {
                                    //$bd = $regday.'.'.$regmonth.'.'.$regyear;
                                    //if (isset($regsex) == true);
                                        
                                    
                                    if(mysql_query("INSERT INTO pref_auth VALUES(NULL,'$login','$pass1', '$regemail', '$realname', '$about', '$country', '$city')") /*&& ("INSERT INTO `pref_auth` SET `date`= STR_TO_DATE($bd, '%d/%m/%Y')")*/  ) {
                                      $error="Вы успешно зарегистрированны";
                                      //header("Refresh:3;url=".$_SERVER['PHP_SELF']);
                                  }else{
                                       $error="Системная ошибка, не могу занести информацию в БД";
                                  }
                                }else {
                                    $error="Ошибка: Пароли не совпадают";
                                }
                            }else {
                                $error="Ошибка: Bboy/Bgirl Name должен быть написан транслитом";
                            }
                        }else {
                            $error="Ошибка: Минимальная длина Bboy/Bgirl Name 2 символа ";
                        }
                    }else {
                        $error="Ошибка: Минимальная длина пароля 6 символа";
                    }
                } else {
                    $error="Ошибка: Такой пользователь уже существует";
                }
            }
            else {
                $error="Ошибка: Задан не верный формат E-Mail (Пример: <b>[email protected])";
            }
        }else {
          $error="Ошибка: Обязательные поля нужно заполнить";
        }
     }
//далее идёт форма
?>

PM MAIL   Вверх
Shark
Дата 5.5.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



создаешь в таблице столбец activateый по умолчанию равен 0... далее... после того, как заполненные поля в форме обратобались пользователю на мыло отошли сслыку для подтверждения регистрации, функция mail(), после того как пользователь пройдет по указанной сслыке обнови столбец activate на 1 и все


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
SneG0K
Дата 6.5.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Неее.... Лучше создай таблицу active
id_user | hash

В первую колонку id юзера, во вторую хеш код, который отправил по мылу...
Потом в скрипте проверяй активирован ли пользователь...
PM WWW Skype   Вверх
SoWa
Дата 6.5.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Цитата(SneG0K @  6.5.2009,  09:10 Найти цитируемый пост)
Неее.... Лучше создай таблицу activeid_user | hashВ первую колонку id юзера, во вторую хеш код, который отправил по мылу...Потом в скрипте проверяй активирован ли пользователь...


А имхо, было бы еще лучше так:
Сперва данные летят в промежуточную таблицу со всеми полями, какие должны быть в главной , потом переход по ссылке с мыла, и по этой самой ссылке пусть пользователь добавляется в основную таблицу из промежуточной. А в промежуточной удалить эту строку.

Минусы- больше полей в промежуточной таблице. Перекидка данных из одной таблицы в другую.
Плюсы- Если грамотно чистить таблички, то никакого мозголомства с полями в главной таблице по типу "activated" и дополнительных условий не нужно.

Добавлено @ 09:48
Цитата(Shark @  5.5.2009,  19:01 Найти цитируемый пост)
после того как пользователь пройдет по указанной сслыке обнови столбец activate на 1 и все

Цитата(SneG0K @  6.5.2009,  09:10 Найти цитируемый пост)
Потом в скрипте проверяй активирован ли пользователь..


Ребят, это же неудобно ^_^

Это сообщение отредактировал(а) SoWa - 6.5.2009, 09:49


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
SneG0K
Дата 6.5.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(SoWa @  6.5.2009,  08:46 Найти цитируемый пост)
Минусы- больше полей в промежуточной таблице. Перекидка данных из одной таблицы в другую.
Плюсы- Если грамотно чистить таблички, то никакого мозголомства с полями в главной таблице по типу "activated" и дополнительных условий не нужно.

Зависит от степени извращенности умаsmile
Цитата(SoWa @  6.5.2009,  08:46 Найти цитируемый пост)
Ребят, это же неудобно ^_^

Мне нормально, я желаю все контроллировать...
PM WWW Skype   Вверх
SoWa
Дата 6.5.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



ИМХО лучше 1 раз под контролем занести данные в таблицу, и потом не писать дополнительные условия.
Цитата(SneG0K @  6.5.2009,  10:28 Найти цитируемый пост)
Зависит от степени извращенности ума

Я из Алгоритмов сюда пришел, у меня ум ух как извращен smile

Ладно, давай посмотрим, что автор скажет smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
SneG0K
Дата 6.5.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(SoWa @  6.5.2009,  08:46 Найти цитируемый пост)
Плюсы- Если грамотно чистить таблички, то никакого мозголомства с полями в главной таблице по типу "activated" и дополнительных условий не нужно.

Тогда нужно проверять эту самую таблицу, либо предупреждать пользователя о куче условий, из-за которых он не может войти, либо авторизировать по промежуточной таблице, с идентификатором "не активен"

Добавлено через 24 секунды
Цитата(SoWa @  6.5.2009,  10:01 Найти цитируемый пост)
Я из Алгоритмов сюда пришел, у меня ум ух как извращен smile

Извращенецsmile))  smile 
PM WWW Skype   Вверх
SoWa
Дата 6.5.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



Цитата(SneG0K @  6.5.2009,  11:17 Найти цитируемый пост)
Тогда нужно проверять эту самую таблицу, либо предупреждать пользователя о куче условий, из-за которых он не может войти, либо авторизировать по промежуточной таблице, с идентификатором "не активен"

Ну да, она-то как раз и желательна для обычных людей именно со столбцом "activated"(потому что мало кто делает поиск в таблице как я smile ) Но это при условии, что неактивированые пользователи тоже могут входить. Тогда тут как ни крути, что мой, что твой вариант- оба напичканы условиями, и оптиимзация сразу в голову не приходит. (Оптимизация на уменьшение числа условий и сложности кода)
А вот если пользователя, который еще не активировался- пускать нельзя, то тут имхо мой вариант приемлем. Поискать юзеря в основной таблице, не найти, и сказать ему, что "ты, дорогой мой, либо не зареган, либо не активирован(на это тоже можно условие)". 
Хотя это все может быть недружелюбным для клиента.
Философский вопрос smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
SneG0K
Дата 6.5.2009, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



SoWa, это действительно философский вопрос... "Посмотрим, что ответит автор" (С) SoWa
PM WWW Skype   Вверх
ksnk
Дата 6.5.2009, 22:36 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



fakeman, почти как у SneG0K, только поле activated переименовать в right. права у юзера будут - none=0, user=1, admin=2 и т.д., в меру извращенности. После активации это поле вполне может и пригодится в обычной жизни ;-)
Правда для активации нужно куда-то запихать еще и дату авторизации, чтобы элегантно почистить всех недозарегистрировавшихся юзеров через пару дней. В принципе, эту дату тоже можно приспособить в основную таблицу, с "основным" смыслом - "дата последней активности юзера". Но тут уже на любителя, иногда удобнее и в отдельную таблицу влепить. 
Еще куда-то нужно влепить некий хеш, по которому будем идентифицировать "пришельцев" из почтовых сообщений об активизации. Потенциально, это поле тоже можно использовать в жизни зарегистрированных юзеров, для поддержки, к примеру, какого-нибудь почтового-же интерфейса общения с юзерами - рассылка новостей, там или еще чего.

более конкретное mho - добавить поле right в основную таблицу, добавить таблицу `users_online` с полями {user, hash, date} в базу и работать с комбинацией этих таблиц... В качестве hash'а можно использовать какую-то простую функцию от Session_Id.

Ждем автора smile


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1021 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.