[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регистрация php
Diunex
Всем здравствуйте. Собственно я еще большой новичек в php по этому строго не судите, и тапками не кидайте.
Хотел бы узнать, как написать php регистрацию с подтверждением по email.
Есть сервер онлайн игры, есть база, ну и все прочее.
Есть стандартная регистрация, но там только капча.
Хотелось бы, сделать что бы было подтверждение по email почте.
Может кто помочь мне с этим вопросом? На сколько сложно это все?



Спустя 14 минут, 28 секунд (20.10.2011 - 10:31) Игорь_Vasinsky написал(а):
да не.. не так уж сложно.

Для начала после регистрации - не надо юзера писать в БД (т.е. мне удобней добавить ещё столбец в таблу `active` - после регистрации до активации = 0),
Нужно сформировать ссылку допустим - для активации у тя есть страница: activation.php

Берёшь login и mail юзера, проводишь их через sha1, например


$login = "ivan";
$email = "ivashka@mail.ru";
sha1($login.$email);


Получаешь - такой бред: 68387d3e0d64019067e249ce28b1f03db081c37e

Теперь нужно сформировать линк

http://your_site.ru/activation.php?user=ivan&code=68387d3e0d64019067e249ce28b1f03db081c37e


И отправляешь его на мыло юзеру.

Логины в БД должны быть уникальны (если нет - то можешь привязывать к чему нить другому)

Юзер переходит по ссылке на activation.php

Ты его принимаешь и проверяешь

Теперь те надо обработать URL с которым он зашёл

http://your_site.ru/activation.php?user=ivan&code=68387d3e0d64019067e249ce28b1f03db081c37e


Прочитал $_GET['user']
Нашёл его в БД с `active` = 0 (на всяк случай)
Проверил в БД мыло, достал его.
Собраль хеш

$hash = sha1($login.$email);

Сравнил в $_GET['code'] из URL

Если совпало - то в БД этому юзеру `active` = 1

Спустя 10 минут, 26 секунд (20.10.2011 - 10:42) Игорь_Vasinsky написал(а):
Вообще - безопасней будет считать email от юзера и его использовать

Дать юзеру 24 часа на активацию а БД чистить (раз в сутки например), проверять время регистрации и сравнивать с текущем временем, если разница более 24 часов - удалять запись.

Спустя 45 минут, 25 секунд (20.10.2011 - 11:27) Diunex написал(а):

<?php
if(isset($_GET['param'])&&($_GET['param']!=='')){
// Соединение с MYSQL сервером.
include_once('config.php');
$conn=mysql_connect($DBHost,$DBUser,$DBPassword);
$db = mysql_select_db($DBName,$conn) or die("Ошибка соединения.");

$param= mysql_real_escape_string($_GET['param']);


$query = "SELECT * FROM usertemp WHERE (`skey` = '$param')";
$rresult = mysql_query($query) or die("Ошибка выполнения запроса. Что-то пошло не так...");
$ar=mysql_fetch_row($rresult);
if(($ar[0]>0)&($ar[21]==0)){
$query = "call adduser('$ar[1]', '$ar[2]', '$ar[3]', '$ar[4]', '$ar[5]', '$ar[7]', '$ar[7]', '$ar[8]', '$ar[9]', '$ar[10]', '$ar[11]', '$ar[12]', '$ar[13]', '$ar[14]', '$ar[15]', '$ar[16]', '$ar[17]')";
$rresult = mysql_query($query) or die("Ошибка выполнения запроса. Что-то пошло не так...".mysql_error());
$query = "UPDATE usertemp SET `active`=1 WHERE (`skey` = '$param') ";
$rresult = mysql_query($query) or die("Ошибка выполнения запроса. Что-то пошло не так...".mysql_error());

if($giveGold){
$getID = 'select * from users where name="'.$ar[1].'"';
$doGetID = mysql_query($getID);
$player = mysql_fetch_array($doGetID);
$giveTo = $player['ID'];
$giveGold = 'call usecash('.$giveTo.',1,0,1,0,'.$Gold.',1,@error)';
$doGiveGold = mysql_query($giveGold) or die ("Ошибка. Голды не дали!".mysql_error());
};
//Регистрация окончена. Вывод данных на экран.
$html .= "<b>Регистрация завершена.</b><br><br><b>Логин:</b> $ar[1]<br>";
if($giveGold){
$html .= $Gold." Голда будет зачислено в течении 15 минут.<br>Приятной игры!";
}
}
else if($ar[21]==1){
$html .= "Данный аккаунт уже был активирован!<br>Приятной игры!";
}
}
;
$html_head='<html>
<head>
<title>Perfect World :: регистрация</title>
<style type="text/css">
label {
color: #333333;
width: 10em;
float: left;
text-align: right;
margin-right: 0.5em;
display: block;
font-family: Arial, Helvetica, sans-serif;
font-size: 10pt;
font-weight: bold;
}
.submit input{margin-left: 4.5em;}
input{color: #781351;background: #fee3ad;border: 1px solid #781351}
.submit input{color: #000;background: #ffa20f;border: 2px outset #d7b9c9}
fieldset{border: 1px solid #781351;width: 20em}
legend{color: #fff;border: none;padding: 2px 6px}
.style1 {
color: #000000;
font-weight: bold;
font-size: 18px;
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<div align="center" style="width:100%;height:95%;">
<fieldset>
<legend class="style1">Регистрация нового аккаунта</legend>
'
;
$html_end ='</fieldset>
</body>
</html>'
;
echo $html_head.$html.$html_end;
?>


как то так?

Спустя 4 минуты, 42 секунды (20.10.2011 - 11:32) Игорь_Vasinsky написал(а):
ну у тебя то работает? мне лично влом выяснять как твои функции работают и что массивы содержат... biggrin.gif

Спустя 3 минуты, 31 секунда (20.10.2011 - 11:35) imbalance_hero написал(а):
Diunex
Зачем в переменной хранить html ? Ты должен программный код разделять с html-представлением. Что-то поднобно можно почитать тут: irbis-team.com

Спустя 1 час, 11 минут, 27 секунд (20.10.2011 - 12:47) Гость_сергей написал(а):
народ подскажите пожалуйта, что делать: сделал форму загрузки на сервер фото, форма работает передаёт данные обработчику, а тот не может записать их на сервер??? почему не знаю.

<?
//user defined variables
$abpath = "/serg.38dmb.ru/dop/image"; //Absolute path to where images are uploaded. No trailing slash
$sizelim = "yes"; //Do you want size limit, yes or no
$size = "500000"; //What do you want size limited to be if there is one

//all image types to upload
$cert1 = "image/jpg"; //Jpeg type 1
$cert2 = "image/jpeg"; //Jpeg type 2
$cert3 = "image/gif"; //Gif type

$log = "";
$random1 = rand(1, 99999999);

//begin upload

//checks if file exists
if ($img1_name == "") {
$log .= "No file selected for upload 1<br>";
}
if ($img1_name != "") {
//checks if file exists
if (file_exists("$abpath/$img1_name"))
{
$log .= "File 1 already existed<br>";
}
else
{

//checks if files to big
if ($sizelim == "yes") {
if ($img1_size > $size) {
$log .= "Файл слишком большой<br>";
}
}

//Checks if file is an image
if (($img1_type == $cert1) or ($img1_type == $cert2) or ($img1_type == $cert3)) {
if (($img1_type == $cert1) or ($img1_type == $cert2)) {
$img1_name = $random1 . ".jpeg";
}
if ($img1_type == $cert3) {
$img1_name = $random1 . ".gif";
}
@copy($img1, "$abpath/$img1_name") or $log .= "Что-то я туплю....бля-бля-бля.<br>";
if (file_exists("$abpath/$img1_name")) {
$log .= "Файл загружен<br>";
}
}
else {
$log .= "Файл не является картинкой<br>";
}
}
}

?>
<html>
<head>
<title>Отчёт по загрузке</title>
</head>
<body>
<p>Log:<br>
<?

echo "$log";

?>
</p>
<body>
<html>

Спустя 1 минута, 56 секунд (20.10.2011 - 12:49) Игорь_Vasinsky написал(а):
Цитата
@copy($img1, "$abpath/$img1_name") or $log .= "Что-то я туплю....бля-бля-бля.<br>";


собаку то убери - он те и скажет. может с путями намудрил.

Спустя 19 часов, 58 минут, 23 секунды (21.10.2011 - 08:47) Эли4ка написал(а):
Игорь_Vasinsky
отличная реализауия скрипта..а вот можно узнать-чем отличается шифрование sha1 от md5 ??

Спустя 2 часа, 2 минуты, 26 секунд (21.10.2011 - 10:50) Игорь_Vasinsky написал(а):
Эли4ка
честно говоря.. не вникал.. вроде шифрование сильнее чтоли..
как все md5 на sha1 начали менять... и я с этой толпой biggrin.gif

Спустя 26 минут, 35 секунд (21.10.2011 - 11:16) Эли4ка написал(а):
спасибо..

Спустя 2 минуты, 38 секунд (21.10.2011 - 11:19) Игорь_Vasinsky написал(а):
Цитата
Secure Hash Algorithm 1 — алгоритм криптографического хеширования. Описан в RFC 3174. Для входного сообщения произвольной длины (максимум 264 − 1 бит, что равно 2 эксабайта) алгоритм генерирует 160-битное хеш-значение, называемое также дайджестом сообщения. Используется во многих криптографических приложениях и протоколах. Также рекомендован в качестве основного для государственных учреждений в США. Принципы, положенные в основу SHA-1, аналогичны тем, которые использовались Рональдом Ривестом при проектировании MD4.

SHA-1 реализует хеш-функцию, построенную на идее функции сжатия. Входами функции сжатия являются блок сообщения длиной 512 бит и выход предыдущего блока сообщения. Выход представляет собой значение всех хеш-блоков до этого момента. Иными словами хеш блока Mi равен hi = f(Mi,hi − 1). Хеш-значением всего сообщения является выход последнего блока.


Цитата
MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины и последующей проверки их подлинности. Является улучшенной в плане безопасности версией MD4.[1] Описан в RFC 1321.[2]

Схема работы алгоритма MD5
На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Спустя 16 минут, 45 секунд (21.10.2011 - 11:36) Эли4ка написал(а):
ой спасибо..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.