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

Статус
В этой теме нельзя размещать новые ответы.

vladimircape

Постоялец
Регистрация
24 Мар 2009
Сообщения
96
Реакции
10
Сам начинающий, скачал скрипт, регистрация работает, но когда из мыла идешь по ссылке подтверждения, не подтверждает
код регистрации
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");
?>
 
Попробуйте добавить print_r($_SERVER); перед echo ""; и выложите результат, тогда будем решать проблему дальше...
 
KnowHow, и какой вам смысл от суперглобального массива $_SERVER? :))
2vladimircape, проверте, правильно ли в базу все записывается? И правильный ли код активации отправляется пользователю на емеил.
 
вот что выдает

вот с письма перехожу по ссылке
Для просмотра ссылки Войди или Зарегистрируйся

вот что выдает после 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 )
 
Какую выдаёт ошибку после перехода по ссылке?

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

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


никакой ошибки при переходе не дает только выполняется код и сообщение по условию Неверный код активации
 
Делали SELECT *, MD5(CONCAT(login,pass,'DAY')) AS code FROM users
где DAY - день года (0..365), когда было отправлено письмо для активации ?
 
результаты

вот что в ссылке
Для просмотра ссылки Войди или Зарегистрируйся
570c74594c659c625d9f726a143ce01c

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

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

и вывело всех пользователей, что в базе, не смотря что Дату я забивал 122 день (2 мая 2010)
 
Можете сделать дамп таблицы users?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху