Код подтверждения пользователя при регистрации

Тема в разделе "PHP", создана пользователем vladimircape, 2 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vladimircape

    vladimircape Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    98
    Симпатии:
    9
    Сам начинающий, скачал скрипт, регистрация работает, но когда из мыла идешь по ссылке подтверждения, не подтверждает
    код регистрации
    PHP:
    <? 
    include (
    "header.php");
    include(
    "country.php");
    include(
    "securimage/securimage.php");
    session_start();

    //// Переменные ------------ 
     
    //константы, для регулярки
    //p.s. нет я не блондинка, константы пишуться КАПСОМ, так принято :)
    define('REGXP__SITY_WORD',"/^[А-Яа-яA-Za-z ]{4,15}$/");
    define('REGXP__ENG_WORD',"/^[A-Za-z0-9]{4,15}$/");
    define('REGXP__NUM_OR_SELECT',"/^[0-9]{1,4}$/");
    define('REGXP__RUS_AND_ENG_WORD',"/^[А-Яа-яA-Za-z]{4,15}$/");
    define('REGXP__EMAIL',"/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i");

    $countries['start_value'] = "- Выберите страну -";
    //cписок месяцев
    $months = array("Января""Февраля""Марта""Апреля""Майя""Июня""Июля""Августа""Сентября""Октября""Ноября""Декабря");
    //-> Стартовое значение поля
    $months['start_value'] = "- Месяца -";
    //SELECT * FROM user WHERE MD5(CONCAT(login,password))='<usermd5>'
    //Создаем карту проверки формы. (содержание)
    $fields_map = array();
    $fields_map['r_login'] = REGXP__ENG_WORD;
    $fields_map['r_pass'] = REGXP__ENG_WORD;
    $fields_map['r_pass_test'] = REGXP__ENG_WORD;
    $fields_map['r_email'] = REGXP__EMAIL;
    $fields_map['r_name'] = REGXP__RUS_AND_ENG_WORD;
    $fields_map['r_fam'] = REGXP__RUS_AND_ENG_WORD;
    $fields_map['r_country'] = REGXP__NUM_OR_SELECT;
    $fields_map['r_city'] = REGXP__SITY_WORD;
    $fields_map['r_birthdayd'] = REGXP__NUM_OR_SELECT;
    $fields_map['r_birthdaym'] = REGXP__NUM_OR_SELECT;
    $fields_map['r_birthdayy'] = REGXP__NUM_OR_SELECT;
    $fields_map['r_antispam'] = REGXP__ENG_WORD;
    $fields_map['r_rules'] = REGXP__NUM_OR_SELECT;

    //Создаем карту проверки формы. (логика)
    //_POST значени проверять не надо! Они уже проверены будут к тому моменту.
    $fields_logic_map = array();
    $fields_logic_map['r_pass'] = $_POST['r_pass_test'];
    $fields_logic_map['r_pass_test'] = $_POST['r_pass'];
    $img = new Securimage();
    $fields_logic_map['r_antispam'] = $img->getCode();
    $fields_logic_map['r_rules'] = 1;

    $unique_fields['r_login'] = "login";
    $unique_fields['r_email'] = "email";
    //// Функции ------------  

    //Фукция для распечатывания Элементов массива.
    //Аргументы: Массив, Шаблон (формат тут - http://ru.php.net/manual/ru/function.sprintf.php)
    function draw_element($array$temple) {     
    $return NULL;
    if (isset(
    $array['start_value'])) { $return .= sprintf(str_replace("%d","%s"$temple), '---'$array['start_value']); unset($array['start_value']); }
    if (isset(
    $array['numeric']) && is_numeric($array['numeric'][0]) && is_numeric($array['numeric'][1])) {
      for (
    $n=$array['numeric'][0];$n<=$array['numeric'][1];$n++) {
        
    $return .= sprintf($temple$n$n);
      }
    } else {
      foreach (
    $array as $key => $value) {
        
    $return .= sprintf($temple$key$value);
      }
    }
    if (
    $return != NULL) { return $return; }
    }

    //Адская фунция прямиком из ада :) Для проверки значений.
    //Аргументы: (array)$vars_map - по типу "переменная=>регулярка", (array)$date - массив значений DATE (можно скормить POST или GET), (array)$vars_logic - необязательный парамерт для логики
    //Возращает: True если все переменные "хорошие" или список "хороших" переменных, плохие отметаються.
    function form_check($map$date$logic = array(), $unique = array()) {
    $done_array = array();
    $error_array = array();

    foreach (
    $map as $field => $regxp) {
    $error "null";
    if (isset(
    $date[$field]) && preg_match($regxp$date[$field])) {
      if ((isset(
    $logic[$field]) && $date[$field] == $logic[$field]) || !isset($logic[$field])) {
         if ((isset(
    $unique[$field]) && сheck_field_by_mysql($unique[$field], $date[$field]) == false) || !isset($unique[$field])) {
             
    $done_array[] = $field;
         } else { 
             
    $error "unique";  
         }
      } else { 
          
    $error "logic"
      }
    } else { 
     
    $error "filter"
    }
    if (
    $error != "null") {
    //далее пока никуда не возвращаем, но если надо то мы готовы :)
    $error_array[$error][] = $field;
    }
    }

    if ((
    $count=count($done_array)) == count($map) && $count != 0) {
    return 
    true;
    } else {
    return 
    $done_array;
    }
    }

    function 
    сheck_field_by_mysql($name$value) {
    if (
    mysql_num_rows(mysql_query("select $name from users where $name='".strtolower(mysql_escape_string($value))."'"))>0) {
    return 
    true;
    } else {
    return 
    false;
    }
    }

    //// Основной код ------------  
    //массив для определения какие поля с заполнены правильно.
    if (is_array(($done_array=form_check($fields_map$_POST$fields_logic_map$unique_fields))) == true) {
    ?>
    <td width="2px"><img src="image/spacer.gif" width="2px" height=1></td><td valign="top" width="100%" style=" margin:0; padding:0 4 10 4px; "><div style="margin:0; padding:0; "><img src="image/spacer.gif" width="300px" height=1></div>
    <table width="100%"  border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td align="left" valign="top" style="background-color:#000000; border:1px solid #6E2500; padding:1px; ">
    <table width="100%" style="height:100%; border:1px solid #2E2E2E;  " border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td valign="top">
    <div style="padding-left:10px; padding-top:5px; padding-bottom:10px; padding-right:0px">
    <center><font class="option" color="#FFFFFF"><b>Регистрация в интернет казино <? echo $con[4]; ?></b></font></center>


    <TABLE class=regform cellSpacing=0 cellPadding=3 align=center border=0>
       <TBODY>
        <TR>
        <TD colSpan=3><center> 
         
         <?    
          if (count($done_array)>0) { 
            echo "<br><br><FONT class=option1 color=FFFFFF>Некоторые поля были заполненны с ошибками! <br><br>Поле Логин и e-mail адрес должны иметь уникальные значения.<br><br>";
          } else {
            echo "<br><br><FONT class=option1 color=FFFFFF>Все поля обязательны для заполнения!</FONT><br><br></center>";
          }
         ?>
        </TD></TR>
        <FORM name=form action=reg.php method=post>
        <TR>
        <TD align=right>Логин:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_login",$done_array)?"<INPUT type=hidden name=r_login value=".$_POST['r_login'].">".$_POST['r_login']."":"<INPUT name=r_login style=\"border: 1px solid rgb(0,0,0)\">";?></TD>
        <TD>&nbsp;&nbsp;&nbsp;&nbsp;</TD></TR>
        <TR>
        <TD align=right>Введите пароль:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_pass",$done_array)?"<INPUT type=hidden name=r_pass value=".$_POST['r_pass'].">- cкрыт -":"<INPUT name=r_pass type=password style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD></TD></TR>
        <TD align=right>Повторите пароль:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_pass_test",$done_array)?"<INPUT type=hidden name=r_pass_test value=".$_POST['r_pass_test'].">- cкрыт -":"<INPUT name=r_pass_test type=password style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD></TD></TR>
        <TR>
        <TD align=right>E-mail:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_email",$done_array)?"<INPUT type=hidden name=r_email value=".$_POST['r_email'].">".$_POST['r_email']."":"<INPUT name=r_email style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD>&nbsp;</TD></TR>
        <TR>
        <TD align=right>Имя:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_name",$done_array)?"<INPUT type=hidden name=r_name value=".$_POST['r_name'].">".$_POST['r_name']."":"<INPUT name=r_name style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD></TD></TR>
        <TR>
        <TD align=right>Фамилия:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_fam",$done_array)?"<INPUT type=hidden name=r_fam value=".$_POST['r_fam'].">".$_POST['r_fam']."":"<INPUT name=r_fam style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD></TD></TR>
        <TR>
        <TD align=right>Страна:&nbsp;&nbsp;</TD>
        <TD>
         <?=in_array("r_country",$done_array)?"<INPUT type=hidden name=r_country value=".$_POST['r_country'].">".$countries[$_POST['r_country']]."":"<select name=r_country style=\" border: 1px solid black\">".draw_element($countries"<option value=\"%d\">%s</option>")."</select>"?>
        </TD>
        <TR>
        <TD align=right>Город:&nbsp;&nbsp;</TD>
        <TD><?=in_array("r_city",$done_array)?"<INPUT type=hidden name=r_city value=\"".$_POST['r_city']."\">".$_POST['r_city']."":"<INPUT name=r_city style=\" border: 1px solid rgb(0,0,0)\">"?></TD>
        <TD></TD></TR>
        <TR>
        <TD align=right>Дата рождения:&nbsp;&nbsp;</TD>
        <TD>

        <?=in_array("r_birthdayd",$done_array)?"<INPUT type=hidden name=r_birthdayd value=".$_POST['r_birthdayd'].">".$_POST['r_birthdayd']."":"<select name=r_birthdayd>
        "
    .draw_element(array('start_value'=>'---','numeric'=>array(1,31)), "<option value=\"%d\">%s</option>")."</select>"?>
        
        <?=in_array("r_birthdaym",$done_array)?"<INPUT type=hidden name=r_birthdaym value=".$_POST['r_birthdaym'].">".$months[$_POST['r_birthdaym']]."":"<select name=r_birthdaym>
          "
    .draw_element($months"<option value=\"%d\">%s</option>")."
        </select>"
    ?>

        <?=in_array("r_birthdayy",$done_array)?"<INPUT type=hidden name=r_birthdayy value=".$_POST['r_birthdayy'].">".$_POST['r_birthdayy']."":"<select name=r_birthdayy>
         "
    .draw_element(array('start_value'=>'-года-','numeric'=>array((date('Y')-70),(date('Y')-18))), "<option value=\"%d\">%s</option>")."</select>"?>
        </TD>
        <TD></TD>
        </TR>

      
        <TR>
        <TD align=right>Код с картинки:&nbsp;&nbsp;</TD>
        <TD>
        <img src="/securimage/securimage_show.php?sid=<?php echo md5(uniqid(time())); ?>" id="image" align="absmiddle" />
        <br><INPUT name=r_antispam size=25 type=text value="" onfocus="if(this.value=='Введите слово с картинки'){this.value=''};" onblur="if(this.value==''){this.value='Введите слово с картинки'};"> <a href="#" onclick="document.getElementById('image').src = '/securimage/securimage_show.php?sid=' + Math.random(); return false">Другое</a>


    </TD></TD></TR>
        <TR>
        <TD colSpan=3 align=center><?=in_array("r_rules",$done_array)?"<INPUT type=hidden name=r_rules value=".$_POST['r_rules']."><INPUT type=checkbox checked disabled>":"<INPUT type=\"checkbox\" value=\"1\" name=r_rules>"?> С правилами ознакомлен и согласен</TD></TR>
        <TR>
        <TD colSpan=3 align=center><INPUT type=submit value="Сохранить" name=submit></TD></TR>
        <TR>
        <TD colSpan=3>&nbsp;</TD></TR>
        <TR>
        <TD colSpan=3>
        <TD>&nbsp;</TD></TR></FORM></TBODY></TABLE></FORM>

    </div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>



    <?
    } else {
    include ("setup_virtual.php");
    include ("setup.php");
    //тута можно юзать уже пост вары ($_POST['var']) напрямую, но только те конечно которые были в форме! :)
    //Другие не проверяються.
    $pus=$HTTP_COOKIE_VARS["par"];
    if (preg_match(REGXP__RUS_AND_ENG_WORD, $pus)) {
    $rowru=mysql_fetch_array(mysql_query("select * from users where login='$pus'"));
    if ($pus==$rowru[1])
    {
    $partner_sql = "INSERT INTO partner VALUES('$pus','".$_POST['r_login']."','$date','0.00')";
    mysql_query($partner_sql, $full_base);
    mysql_query($partner_sql, $fun_base);
    }
    }

    mysql_query("INSERT INTO users VALUES(NULL,'".$_POST['r_login']."','".$_POST['r_pass']."','0.50','0.00','0.00','".$_POST['r_email']."','".$_POST['r_name']."','".$_POST['r_fam']."',
    '$date', '0.00', ".$_POST['r_country'].", '".$_POST['r_city']."', 0, '".$_POST['r_birthdayy']."-".$_POST['r_birthdaym']."-".$_POST['r_birthdayd']."')", $full_base);

    mysql_query("INSERT INTO users VALUES(NULL,'".$_POST['r_login']."','".$_POST['r_pass']."','1000','0.00','0.00','".$_POST['r_email']."','".$_POST['r_name']."','".$_POST['r_fam']."',
    '$date','0.00', ".$_POST['r_country'].", '".$_POST['r_city']."', 0, '".$_POST['r_birthdayy']."-".$_POST['r_birthdaym']."-".$_POST['r_birthdayd']."')", $fun_base);

    include("mail/reg.php");
    mail($_POST['r_email'], $reg_reg_mail_subject, $reg_reg_mail, "Content-Type: text/plain; charset=Windows-1251\nFrom: $con[2]\n");
    $con=mysql_fetch_array(mysql_query("select * from seting"));
    if ($con['regmail']=="yes"){
    include("mail/newreg.php");
    mail($con['adm_email'], $reg_reg_mail_subject, $reg_reg_mail, "Content-Type: text/plain; charset=Windows-1251\nFrom: ".$con['adm_email']."\n");
    }
    unset($pus);
    session_destroy();
    ?>
    <td width="2px"><img src="image/spacer.gif" width="2px" height=1></td><td valign="top" width="100%" style=" margin:0; padding:0 4 10 4px; "><div style="margin:0; padding:0; "><img src="image/spacer.gif" width="300px" height=1></div>
    <table width="100%"  border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td align="left" valign="top" style="background-color:#000000; border:1px solid #6E2500; padding:1px; ">

        <table width="100%" style="height:100%; border:1px solid #2E2E2E;  " border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td valign="top">
    <div style="padding-left:10px; padding-top:5px; padding-bottom:10px; padding-right:10px">
          <center><font class="option" color="#FFFFFF"><b>Вы зарегистрированы в интернет казино <? echo $con[4]; ?></b></font></center><br>

    <font class="content">

    Для начала игры вам необходимо подтвердить свой e-mail адрес. Данные для подтверждения, а так же вся Ваша информация отправленны на e-mail который Вы ввели при регистрации.
    <br><br>
     ВНИМАНИЕ! Некоторые почтовые системы могут помещать письма с сайта в папку "Спам" или "Сомнительные". Если Вы не получили письмо о регистрации, проверьте - нет ли его в папке со СПАМом.
    <br><br>
    С уважение администрация интернет-казино <? echo $con[4]; ?>

    </font></div>
            </td>
          </tr>
        </table>


        </td>
      </tr>
    </table>
    <?
    }
    include ("footer.php");
    ?>
    код активации
    PHP:
    <?
    include (
    "header.php");
    include (
    "setup.php");
    include (
    "setup_virtual.php");
    ?>


    <td width="2px"><img src="image/spacer.gif" width="2px" height=1></td><td valign="top" width="100%" style=" margin:0; padding:0 4 10 4px; "><div style="margin:0; padding:0; "><img src="image/spacer.gif" width="300px" height=1></div>
    <table width="100%"  border="0" cellpadding="0" cellspacing="0">
    <tr>
    <td align="left" valign="top" style="background-color:#000000; border:1px solid #6E2500; padding:1px; ">
    <table width="100%" style="height:100%; border:1px solid #2E2E2E;  " border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td valign="top">
    <div style="padding-left:10px; padding-top:5px; padding-bottom:10px; padding-right:0px">
    <center><font class="option" color="#FFFFFF"><b>Активация аккаунта в интернет казино <? echo $con[4]; ?></b></font></center>
    <br><br>
    <center>
    <?
    echo "";
    if (isset($_GET['code']) && preg_match('/^[A-Fa-f0-9]{32}$/',$_GET['code'])) {
    $user_sql_query = mysql_query("SELECT id FROM users WHERE check_mail = '0' and MD5(CONCAT(login,pass,'".date("z")."'))= '".$_GET['code']."' limit 0, 1", $full_base);
    if (mysql_num_rows($user_sql_query) == 1) {
    $user_array=mysql_fetch_array($user_sql_query);
    mysql_query("UPDATE users SET check_mail=1 WHERE id = '".$user_array['id']."'", $full_base);
    mysql_query("UPDATE users SET check_mail=1 WHERE id = '".$user_array['id']."'", $fun_base);
    echo "<font class=option color=#FFFFFF>Аккаунт успешно активирован!</font>";
    } else {
    echo "<font class=option color=#FFFFFF>Неверный код, или аккаунт уже был активирован!</font>";
    }
    } else {
    echo "<font class=option color=#FFFFFF>Не правильно переданный параметр!</font>";
    }
    ?>
    </center>
    </div>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>

    <?
    include ("footer.php");
    ?>
     
  2. KnowHow

    KnowHow Создатель

    Регистр.:
    3 апр 2010
    Сообщения:
    22
    Симпатии:
    5
    Попробуйте добавить print_r($_SERVER); перед echo ""; и выложите результат, тогда будем решать проблему дальше...
     
  3. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    KnowHow, и какой вам смысл от суперглобального массива $_SERVER? :))
    2vladimircape, проверте, правильно ли в базу все записывается? И правильный ли код активации отправляется пользователю на емеил.
     
  4. KnowHow

    KnowHow Создатель

    Регистр.:
    3 апр 2010
    Сообщения:
    22
    Симпатии:
    5
    Например, чтобы увидеть с какими параметрами вызывается скрипт.
     
  5. vladimircape

    vladimircape Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    98
    Симпатии:
    9
    вот что выдает

    вот с письма перехожу по ссылке
    http://**********.com/activate.php?code=570c74594c659c625d9f726a143ce01c

    вот что выдает после print_r($_SERVER). Название сайта я звездочками убрал :)

    Array ( [UNIQUE_ID] => S93ny06fcHoAADpX6tQAAAAn [GEOIP_ADDR] => 109.126.155.39 [HTTP_USER_AGENT] => Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.01 [HTTP_HOST] => ************.com [HTTP_ACCEPT] => text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 [HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.9,en;q=0.8 [HTTP_ACCEPT_CHARSET] => iso-8859-1, utf-8, utf-16, *;q=0.1 [HTTP_ACCEPT_ENCODING] => deflate, gzip, x-gzip, identity, *;q=0 [HTTP_CONNECTION] => Keep-Alive, TE [HTTP_TE] => deflate, gzip, chunked, identity, trailers [PATH] => /usr/local/bin:/usr/bin:/bin [SERVER_SIGNATURE] =>
    Apache/2 Server at *************.com Port 80
    [SERVER_SOFTWARE] => Apache/2 [SERVER_NAME] => ************.com [SERVER_ADDR] => 78.159.112.122 [SERVER_PORT] => 80 [REMOTE_ADDR] => 109.126.155.39 [DOCUMENT_ROOT] => /home/*********/domains/**********.com/public_html [SERVER_ADMIN] => webmaster@***********.com [SCRIPT_FILENAME] => /home/*********/domains/************.com/public_html/activate.php [REMOTE_PORT] => 1510 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => code=570c74594c659c625d9f726a143ce01c [REQUEST_URI] => /activate.php?code=570c74594c659c625d9f726a143ce01c [SCRIPT_NAME] => /activate.php [PHP_SELF] => /activate.php [REQUEST_TIME] => 1272833995 [argv] => Array ( [0] => code=570c74594c659c625d9f726a143ce01c ) [argc] => 1 )
     
  6. KnowHow

    KnowHow Создатель

    Регистр.:
    3 апр 2010
    Сообщения:
    22
    Симпатии:
    5
    Какую выдаёт ошибку после перехода по ссылке?

    Желательно увидеть "mail/newreg.php"...

    Ещё можете сделать запрос в phpMyAdmin, чтобы сравнить данные в БД с кодом в ссылке:
    SELECT *, MD5(CONCAT(login,pass,'DAY')) AS code FROM users
    -- где DAY - день года (0..365), когда было отправлено письмо для активации
     
  7. vladimircape

    vladimircape Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    98
    Симпатии:
    9
    <?
    $reg_reg_mail_subject="РЕГИСТРАЦИЯ ";

    $reg_reg_mail="Здравствуйте, ".$_POST['r_login'].",
    Данное письмо содержит информацию для доступа к вашему счету:

    Логин : ".$_POST['r_login']."
    Пароль : ".$_POST['r_pass']."


    Для завершения регистрации пройдите по ссылке ниже:
    Подтвердить e-mail адрес : ".$con[3]."/activate.php?code=".md5($_POST['r_login'].$_POST['r_pass'].date("z"))."


    никакой ошибки при переходе не дает только выполняется код и сообщение по условию Неверный код активации
     
  8. KnowHow

    KnowHow Создатель

    Регистр.:
    3 апр 2010
    Сообщения:
    22
    Симпатии:
    5
    Делали SELECT *, MD5(CONCAT(login,pass,'DAY')) AS code FROM users
    где DAY - день года (0..365), когда было отправлено письмо для активации ?
     
  9. vladimircape

    vladimircape Постоялец

    Регистр.:
    24 мар 2009
    Сообщения:
    98
    Симпатии:
    9
    результаты

    вот что в ссылке
    http://********.com/activate.php?code=
    570c74594c659c625d9f726a143ce01c

    а вот что запрос дал
    3363333964656261643733343531616534383133396337386164313264643366

    формат разный???:nezn:

    и вывело всех пользователей, что в базе, не смотря что Дату я забивал 122 день (2 мая 2010)
     
  10. KnowHow

    KnowHow Создатель

    Регистр.:
    3 апр 2010
    Сообщения:
    22
    Симпатии:
    5
    Можете сделать дамп таблицы users?
     
Статус темы:
Закрыта.