[help]dle регистрация
6 replies143 viewsCurrently viewing: 1
· 05/19/2009, 12:10 PM
я попробовал сделать такой скрипт как у gwe толька для
дле чтоб регистрировала на сайте и в игре но когда регистрируюсь бьет ошибку
Код
Fatal error: Call to a member function connect() on a non-object in C:\xampplite\htdocs\engine\modules\register.php on line 127
вот сам скрипт
Раскрывающийся текст
Код
<?php
/*
=====================================================
Файл: register.php
-----------------------------------------------------
Назначение: (регистрация посетителя)
=====================================================
*/
if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
//Подгружаем класс с функциями фильтрации
require_once ENGINE_DIR.'/classes/parse.class.php';
//Создаем объект и устанавливаем переменные
$parse = new ParseFilter();
$parse->safe_mode = true;
$stopregistration = FALSE;
//Смотрим, содержится ли в переданных параметрах doaction
if (isset ($_REQUEST['doaction'])) $doaction = $_REQUEST['doaction']; else $doaction = "";
//Если в конфиге не стоит группа пользователей, ставим по умолчанию: 4 (посетители)
$config['reg_group'] = intval($config['reg_group']) ? intval($config['reg_group']) : 4;
//------------------------------------------------
//Функция проверки регстрации
//------------------------------------------------
function check_reg ($name, $email, $password1, $password2, $fullname="check", $land="check", $old="00", $skey="check", $one_rule=true, $two_rule=true, $sec_code=1, $sec_code_session=1) {
global $lang, $db, $db_g;
$stop = "";
if ( $sec_code != $sec_code_session OR !$sec_code_session) $stop .= $lang['reg_err_19']; //Проверка, соотв ли код безопасн, введенному
if ($password1 != $password2) $stop .= $lang['reg_err_1']; //Проверка на соотв паролей
if (strlen($password1) < 6) $stop .= $lang['reg_err_2']; //Проверка, если пассв меньше 6 символов
if (strlen($name) > 20) $stop .= $lang['reg_err_3']; //Проверка, если имя больше 20 символов
if (preg_match("/[\||\'|\<|\>|\"|\!|\$|\@|\&\~\*\+]/",$name)) $stop .= $lang['reg_err_4']; //Проверка, если в имени содержаться левые символы
if ((!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) or (empty($email))) $stop .= $lang['reg_err_6']; //Проверка, если введен не правильный ящик имейл
if ($name == "") $stop .= $lang['reg_err_7']; //Проверка, если имя пользователя пустое
if (!$one_rule) $stop .= $lang['reg_err_21']; //Проверка подтвержения правил
if (!$two_rule) $stop .= $lang['reg_err_22']; //Проверка подтвержения соглашения
//Проверка количества символов введных в форму
if (strlen($fullname) > 100) $stop .= $lang['reg_err_15'];
if (strlen($land) > 100) $stop .= $lang['reg_err_16'];
if (strlen($old) > 2) $stop .= $lang['reg_err_17'];
if (strlen($skey) > 26) $stop .= $lang['reg_err_14'];
if ($fullname=="") $stop .= $lang['reg_err_23'];
if ($land=="") $stop .= $lang['reg_err_24'];
if ($old=="") $stop .= $lang['reg_err_25'];
if ($skey=="") $stop .= $lang['reg_err_26'];
//Если поля формы заполнены верно, то
if ($stop == "")
{
//Установка кодировки
@setlocale(LC_CTYPE, array("ru_RU.CP1251", "ru_SU.CP1251", "ru_RU.KOI8-r", "ru_RU", "russian", "ru_SU", "ru"));
$replace_word = array ('e' => '[eеё]', 'r' => '[rг]', 't' => '[tт]', 'y' => '[yу]','u' => '[uи]','i' => '[i1l!]','o' => '[oо0]','p' => '[pр]','a' => '[aа]','s' => '[s5]','w' => 'w','q' => 'q','d' => 'd','f' => 'f','g' => '[gд]','h' => '[hн]','j' => 'j','k' => '[kк]','l' => '[l1i!]','z' => 'z','x' => '[xх%]','c' => '[cс]','v' => '[vuи]','b' => '[bвь]','n' => '[nпл]','m' => '[mм]','й' => '[йиu]','ц' => 'ц','у' => '[уy]','е' => '[еeё]','н' => '[нh]','г' => '[гr]','ш' => '[шwщ]','щ' => '[щwш]','з' => '[з3э]','х' => '[хx%]','ъ' => '[ъь]','ф' => 'ф','ы' => '(ы|ь[i1l!]?)','в' => '[вb]','а' => '[аa]','п' => '[пn]','р' => '[рp]','о' => '[оo0]','л' => '[лn]','д' => 'д','ж' => 'ж','э' => '[э3з]','я' => '[я]','ч' => '[ч4]','с' => '[сc]','м' => '[мm]','и' => '[иuй]','т' => '[тt]','ь' => '[ьb]','б' => '[б6]','ю' => '(ю|[!1il][oо0])','ё' => '[ёеe]','1' => '[1il!]','2' => '2','3' => '[3зэ]','4' => '[4ч]','5' => '[5s]','6' => '[6б]','7' => '7','8' => '8','9' => '9','0' => '[0оo]','_' => '_','#' => '#','%' => '[%x]','^' => '[^~]','(' => '[(]',')' => '[)]','=' => '=','.' => '[.]','-' => '-');
$name=strtolower($name);
$name=strtr($name, $replace_word);
//Проверка, есть ли в базе пользователь с таким именем и ящиком
$row = $db->super_query ("SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE email = '$email' OR LOWER(name) REGEXP '[[:<:]]{$name}[[:>:]]'");
if ($row['count']) $stop .= $lang['reg_err_8'];
}
return $stop;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//Выбираем всех пользователей из базы
$row = $db->super_query("SELECT COUNT(*) as count FROM " . USERPREFIX . "_users");
//Смотрим, разрешена ли регистрация
if ($config['allow_registration'] != "yes")
{
//Выдаем сообщение, если отключена регистрация
msgbox ($lang['all_info'], $lang['reg_err_9']);
$stopregistration = TRUE;
//Если максимальное количество пользователей уже зарегистрировано то запрещаем регистрацию
} elseif ($config['max_users'] > 0 AND $row['count'] > $config['max_users'] AND $row2['count'] > $config['max_users']) {
msgbox ($lang['all_info'], $lang['reg_err_10']);
$stopregistration = TRUE;
}
//Кнопка подтверждение регистрации нажата
if (isset($_POST['submit_reg'])) {
//Узнаем, включен ли подтверждение кода безопасности
if ($config['allow_sec_code'] == "yes") {
//Если да, то устанавливаем сессию для него
$sec_code = $_POST['sec_code'];
$sec_code_session = ($_SESSION['sec_code_session'] != '') ? $_SESSION['sec_code_session'] : false;
} else {
$sec_code = 1;
$sec_code_session = 1;
}
//Устанавливаем параметры для паролей, имени и ящика (добавить новые поля)
$password1 = $db->safesql($parse->process($_POST['password1']));
$password2 = $db->safesql($parse->process($_POST['password2']));
$name = $db->safesql($parse->process(htmlspecialchars(trim($_POST['name']))));
$email = $db->safesql($parse->process($_POST['email']));
$one_rule = $db->safesql($parse->process($_POST['one_rule']));
$two_rule = $db->safesql($parse->process($_POST['two_rule']));
$fullname = $db->safesql($parse->process($_POST['fullname'])); //Имя в форме
$land = $db->safesql($parse->process($_POST['land'])); //Страна
$old = $db->safesql($parse->process($_POST['old'])); // Возраст
$skey = $db->safesql($parse->process($_POST['skey'])); //SKEY
$skey = str_replace("-","",$skey); //Убираем дефисы из ключа
//Переменная для хранения ошибки при регистрации
$reg_error = check_reg ($name, $email, $password1, $password2, $fullname, $land, $old, $skey, $one_rule, $two_rule, $sec_code, $sec_code_session);
//=========================================================================
//Смотрим, существует ли пользователь в БД сервера игры
require_once ENGINE_DIR.'/data/lineagecf.php'; // подключение файла с параметрами для BD игрового сервера
//Подключаемся к БД сервера и смотрим, зарегистрирован ли пользователь там
if(!$db_g->connect( $la2config["loginserver"]["dbuser"], $la2config["loginserver"]["dbpass"], $la2config["loginserver"]["dbname"], $la2config["loginserver"]["dbhost"], 0)) {
$reg_error = $lang['reg_err_31'];
} else {
// Делаем запрос
$row2 = $db_g->super_query("SELECT COUNT(*) as count FROM accounts WHERE LOWER(login) REGEXP '[[:<:]]{$name}[[:>:]]'");
$db->connect(DBUSER, DBPASS, DBNAME, DBHOST); //Переключаемся на БД Сайта
if ($row2['count']) {
$reg_error = $lang['reg_err_8'];
}
}
//=========================================================================/**/
//------------------------------------------------
//Если нет ошибок, приступаем к регистрации
//------------------------------------------------
if (!$reg_error) {
//Если в конфиге включено подтверждение по ящику, высылаем линк
if ($config['registration_type']) {
include_once ENGINE_DIR.'/classes/mail.class.php';
$mail = new dle_mail ($config);
// Для дальнейшего перевода на класс PHPMailer()
//include_once ENGINE_DIR.'/inc/class.phpmailer.php'; //Подключаем класс для отправки почты
//$mail = new PHPMailer();
//Берем шаблон письма из базы
$row = $db->super_query("SELECT template FROM " . PREFIX . "_email where name='reg_mail' LIMIT 0,1");
$row['template'] = stripslashes($row['template']); //Удаляем экранирование символов из шаблона
//Составляем линк для подтверждения регистрации
$idlink = rawurlencode(base64_encode($name."||".$email."||".md5($password1)."||".md5($name.$email.$config['key'])));
//Подставляем в шаблон нужное имя, линк подтверждения и пароль
$row['template'] = str_replace("{%username%}",$name, $row['template']);
$row['template'] = str_replace("{%validationlink%}",$config['http_home_url']."index.php?do=register&doaction=validating&id=".$idlink, $row['template']);
$row['template'] = str_replace("{%password%}", $password1, $row['template']);
$mail->send ($email, $lang['reg_subj'], $row['template']); //Отправляем письмо
//Если проблемы с отправкой письма
if ($mail->send_error) msgbox ($lang['all_info'], $mail->smtp_msg);
else msgbox ($lang['reg_vhead'], $lang['reg_vtext']);
$stopregistration = TRUE;
} else {
//Если отключено, то генерируем линк в ссессии
$doaction = "validating";
$_REQUEST['id'] = rawurlencode(base64_encode($name."||".$email."||".md5($password1)."||".md5($name.$email.$config['key'])));
}
//Выводим ошибку если чтото не так
} else {msgbox ($lang['reg_err_11'], $reg_error);}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//------------------------------------------------
//Если пользователь не регистрировался, загружаем ему форму регистрации
//------------------------------------------------
if ($doaction != "validating" AND !$stopregistration) {
//Загружаем шаблоны регистрационной формы
$tpl->load_template('registration.tpl');
$tpl->set('[registration]',"");
$tpl->set('[/registration]',"");
$tpl->set_block("'\\[validation\\](.*?)\\[/validation\\]'si",""); //Скрываем блоки валидации в шаблоне чтоб не отображались
$path = parse_url($config['http_home_url']);
if ($config['allow_sec_code'] == "yes") {
$tpl->set('[sec_code]',"");
$tpl->set('[/sec_code]',"");
$tpl->set('{reg_code}',"<span id=\"dle-captcha\"><img src=\"".$path['path']."engine/modules/antibot.php\" alt=\"{$lang['sec_image']}\" border=\"0\" /><br /><a onclick=\"reload(); return false;\" href=\"#\">{$lang['reload_code']}</a></span>");
} else {
$tpl->set('{reg_code}',"");
$tpl->set_block("'\\[sec_code\\](.*?)\\[/sec_code\\]'si","");
}
//-----------------------------
//S-Key
//-----------------------------
// Символы, которые будут использоваться в ключе.
$chars="1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
// Количество символов.
$max=25;
// Определяем количество символов в $chars
$size=StrLen($chars)-1;
// Определяем пустую переменную, в которую и будем записывать символы.
$skey=null;
// Создаём Ключ.
while($max--)
$skey.=$chars[rand(0,$size)];
//Формируем ключ в удобном для чтении виде по парам
$part1 = substr($skey, 0, 5);
$part2 = substr($skey, 5, 5);
$part3 = substr($skey, 10, 5);
$part4 = substr($skey, 15, 5);
$part5 = substr($skey, 20, 5);
$skey = $part1.'-'.$part2.'-'.$part3.'-'.$part4.'-'.$part5;
//Устанавливаем переменную в шаблон
$tpl->set('{s-key}', $skey);
//-----------------------------
//Обработка данных формы
$tpl->copy_template = "<form method=\"post\" name=\"registration\" id=\"registration\" action=\"".$config['http_home_url']."index.php?do=register\">\n".$tpl->copy_template."
<input name=\"submit_reg\" type=\"hidden\" id=\"submit_reg\" value=\"submit_reg\" />
</form>";
$tpl->copy_template .= <<<HTML
<script language='JavaScript' type="text/javascript">
function reload () {
var rndval = new Date().getTime();
document.getElementById('dle-captcha').innerHTML = '<img src="{$path['path']}engine/modules/antibot.php?rndval=' + rndval + '" border="0" width="120" height="50"><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a>';
};
</script>
HTML;
$tpl->compile('content');
$tpl->clear();
}
//------------------------------------------------
//Страница валидации, если он нажал подтвердить регистрацию
//------------------------------------------------
if (isset($_POST['submit_val'])) {
//Данные из ПОСТ помещаем в переменные (Имя и пароль)
$user_arr = explode ("||", base64_decode(rawurldecode($_POST['id'])));
$user = trim($db->safesql($user_arr[0]));
$pass = md5($user_arr[2]);
$db->query("SELECT * FROM " . USERPREFIX . "_users where name = '$user' AND password='$pass'");
//Если пользователь в базе не найден, то пишем - доспуп запрещен, если находим то передаем переменной параметры из бызы
if (!$db->num_rows()) $stop .= "Access Denied"; else $row = $db->get_row();
$db->free();
//Если что-то не так, выдаем ошибку
if ($stop){ msgbox ($lang['reg_err_18'], $stop); }
else {
//$db->query("UPDATE " . USERPREFIX . "_users set fullname='$fullname', skey='$skey', land='$land', old='$old' where name='$user'");
msgbox ($lang['reg_ok'], $lang['reg_ok_1']);
$stopregistration = TRUE;
}
}
//Если пользователь прошел по ссылке подтверждения регистрации в письме
if ( ($doaction == "validating") AND (!$stopregistration) AND (!$_POST['submit_val']) ) {
$user_arr = explode ("||", base64_decode(rawurldecode($_REQUEST['id'])));
$regpassword = md5($user_arr[2]);
$regpassword2 = base64_encode(pack("H*", sha1(utf8_encode($password1))));
//$regpassword2 = base64_encode(pack("H*", sha1(utf8_encode($user_arr[2]))));
//$regpassword2 = $user_arr[2];
$name = trim($db->safesql(htmlspecialchars($parse->process($user_arr[0]))));
$email = trim($db->safesql($parse->process($user_arr[1])));
if (md5($name.$email.$config['key']) != $user_arr[3]) die ('ID not valid!');
$reg_error = check_reg($name, $email, $regpassword, $regpassword);
if ($reg_error != "") {
msgbox ($lang['reg_err_11'], $reg_error);
$stopregistration = TRUE;
} else {
if (($_REQUEST['step'] != 2) AND $config['registration_type']) {
$stopregistration = TRUE;
$lang['confirm_ok'] = str_replace ('{email}', $email, $lang['confirm_ok']);
$lang['confirm_ok'] = str_replace ('{login}', $name, $lang['confirm_ok']);
msgbox ($lang['all_info'], $lang['confirm_ok']. "<br /><br /><a href=\"".$config['http_home_url']."index.php?do=register&doaction=validating&step=2&id=".rawurlencode($_REQUEST['id'])."\">Продолжить регистрацию на сайте</a>");
} else {
$add_time = time()+($config['date_adjust']*60);
$_IP = $db->safesql($_SERVER['REMOTE_ADDR']);
if (intval($config['reg_group']) < 3) $config['reg_group'] = 4;
//РЕГИСТРАЦИЯ пользователя в БД сайта
$db->query("INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '".$config['reg_group']."', '', '', '', '', '".$_IP."')");
//РЕГИСТРАЦИЯ пользователя в БД сервера
require_once ENGINE_DIR.'/data/lineagecf.php'; // подключение файла с параметрами для BD игрового сервера
//Подключаемся к БД сервера и заносим регистрационные данные в таблицу аккаунтов
if(!$db_g->connect( $la2config["loginserver"]["dbuser"], $la2config["loginserver"]["dbpass"], $la2config["loginserver"]["dbname"], $la2config["loginserver"]["dbhost"], 0)) {
msgbox ($lang['reg_err_30'], $lang['reg_err_31']);
} else {
// Делаем запрос
$add_accaunt = "INSERT INTO `accounts`(login,password,lastactive,accesslevel,lastIP) VALUES ('$name','$regpassword2','0','0','".$_IP."')";
$db_g->query($add_accaunt);
$db->connect(DBUSER, DBPASS, DBNAME, DBHOST); //Переключаемся на БД Сайта
}
}
}
}
//Страница подтверждения регистрации
if ($doaction == "validating" AND !$stopregistration) {
$tpl->load_template('registration.tpl');
$tpl->set('[validation]',"");
$tpl->set('[/validation]',"");
$tpl->set_block("'\\[registration\\].*?\\[/registration\\]'si",""); //Блокирвать блок с формой регистрации
$tpl->copy_template = "<form method=\"post\" name=\"registration\" enctype=\"multipart/form-data\" action=\"".$PHP_SELF."\">\n".$tpl->copy_template."
<input name=\"submit_val\" type=\"hidden\" id=\"submit_val\" value=\"submit_val\">
<input name=\"do\" type=\"hidden\" id=\"do\" value=\"register\">
<input name=\"doaction\" type=\"hidden\" id=\"doaction\" value=\"validating\">
<input name=\"id\" type=\"hidden\" id=\"id\" value=\"{$_REQUEST['id']}\">
</form>";
$tpl->compile('content');
$tpl->clear();
}
?>
/*
=====================================================
Файл: register.php
-----------------------------------------------------
Назначение: (регистрация посетителя)
=====================================================
*/
if(!defined('DATALIFEENGINE'))
{
die("Hacking attempt!");
}
//Подгружаем класс с функциями фильтрации
require_once ENGINE_DIR.'/classes/parse.class.php';
//Создаем объект и устанавливаем переменные
$parse = new ParseFilter();
$parse->safe_mode = true;
$stopregistration = FALSE;
//Смотрим, содержится ли в переданных параметрах doaction
if (isset ($_REQUEST['doaction'])) $doaction = $_REQUEST['doaction']; else $doaction = "";
//Если в конфиге не стоит группа пользователей, ставим по умолчанию: 4 (посетители)
$config['reg_group'] = intval($config['reg_group']) ? intval($config['reg_group']) : 4;
//------------------------------------------------
//Функция проверки регстрации
//------------------------------------------------
function check_reg ($name, $email, $password1, $password2, $fullname="check", $land="check", $old="00", $skey="check", $one_rule=true, $two_rule=true, $sec_code=1, $sec_code_session=1) {
global $lang, $db, $db_g;
$stop = "";
if ( $sec_code != $sec_code_session OR !$sec_code_session) $stop .= $lang['reg_err_19']; //Проверка, соотв ли код безопасн, введенному
if ($password1 != $password2) $stop .= $lang['reg_err_1']; //Проверка на соотв паролей
if (strlen($password1) < 6) $stop .= $lang['reg_err_2']; //Проверка, если пассв меньше 6 символов
if (strlen($name) > 20) $stop .= $lang['reg_err_3']; //Проверка, если имя больше 20 символов
if (preg_match("/[\||\'|\<|\>|\"|\!|\$|\@|\&\~\*\+]/",$name)) $stop .= $lang['reg_err_4']; //Проверка, если в имени содержаться левые символы
if ((!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) or (empty($email))) $stop .= $lang['reg_err_6']; //Проверка, если введен не правильный ящик имейл
if ($name == "") $stop .= $lang['reg_err_7']; //Проверка, если имя пользователя пустое
if (!$one_rule) $stop .= $lang['reg_err_21']; //Проверка подтвержения правил
if (!$two_rule) $stop .= $lang['reg_err_22']; //Проверка подтвержения соглашения
//Проверка количества символов введных в форму
if (strlen($fullname) > 100) $stop .= $lang['reg_err_15'];
if (strlen($land) > 100) $stop .= $lang['reg_err_16'];
if (strlen($old) > 2) $stop .= $lang['reg_err_17'];
if (strlen($skey) > 26) $stop .= $lang['reg_err_14'];
if ($fullname=="") $stop .= $lang['reg_err_23'];
if ($land=="") $stop .= $lang['reg_err_24'];
if ($old=="") $stop .= $lang['reg_err_25'];
if ($skey=="") $stop .= $lang['reg_err_26'];
//Если поля формы заполнены верно, то
if ($stop == "")
{
//Установка кодировки
@setlocale(LC_CTYPE, array("ru_RU.CP1251", "ru_SU.CP1251", "ru_RU.KOI8-r", "ru_RU", "russian", "ru_SU", "ru"));
$replace_word = array ('e' => '[eеё]', 'r' => '[rг]', 't' => '[tт]', 'y' => '[yу]','u' => '[uи]','i' => '[i1l!]','o' => '[oо0]','p' => '[pр]','a' => '[aа]','s' => '[s5]','w' => 'w','q' => 'q','d' => 'd','f' => 'f','g' => '[gд]','h' => '[hн]','j' => 'j','k' => '[kк]','l' => '[l1i!]','z' => 'z','x' => '[xх%]','c' => '[cс]','v' => '[vuи]','b' => '[bвь]','n' => '[nпл]','m' => '[mм]','й' => '[йиu]','ц' => 'ц','у' => '[уy]','е' => '[еeё]','н' => '[нh]','г' => '[гr]','ш' => '[шwщ]','щ' => '[щwш]','з' => '[з3э]','х' => '[хx%]','ъ' => '[ъь]','ф' => 'ф','ы' => '(ы|ь[i1l!]?)','в' => '[вb]','а' => '[аa]','п' => '[пn]','р' => '[рp]','о' => '[оo0]','л' => '[лn]','д' => 'д','ж' => 'ж','э' => '[э3з]','я' => '[я]','ч' => '[ч4]','с' => '[сc]','м' => '[мm]','и' => '[иuй]','т' => '[тt]','ь' => '[ьb]','б' => '[б6]','ю' => '(ю|[!1il][oо0])','ё' => '[ёеe]','1' => '[1il!]','2' => '2','3' => '[3зэ]','4' => '[4ч]','5' => '[5s]','6' => '[6б]','7' => '7','8' => '8','9' => '9','0' => '[0оo]','_' => '_','#' => '#','%' => '[%x]','^' => '[^~]','(' => '[(]',')' => '[)]','=' => '=','.' => '[.]','-' => '-');
$name=strtolower($name);
$name=strtr($name, $replace_word);
//Проверка, есть ли в базе пользователь с таким именем и ящиком
$row = $db->super_query ("SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE email = '$email' OR LOWER(name) REGEXP '[[:<:]]{$name}[[:>:]]'");
if ($row['count']) $stop .= $lang['reg_err_8'];
}
return $stop;
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//Выбираем всех пользователей из базы
$row = $db->super_query("SELECT COUNT(*) as count FROM " . USERPREFIX . "_users");
//Смотрим, разрешена ли регистрация
if ($config['allow_registration'] != "yes")
{
//Выдаем сообщение, если отключена регистрация
msgbox ($lang['all_info'], $lang['reg_err_9']);
$stopregistration = TRUE;
//Если максимальное количество пользователей уже зарегистрировано то запрещаем регистрацию
} elseif ($config['max_users'] > 0 AND $row['count'] > $config['max_users'] AND $row2['count'] > $config['max_users']) {
msgbox ($lang['all_info'], $lang['reg_err_10']);
$stopregistration = TRUE;
}
//Кнопка подтверждение регистрации нажата
if (isset($_POST['submit_reg'])) {
//Узнаем, включен ли подтверждение кода безопасности
if ($config['allow_sec_code'] == "yes") {
//Если да, то устанавливаем сессию для него
$sec_code = $_POST['sec_code'];
$sec_code_session = ($_SESSION['sec_code_session'] != '') ? $_SESSION['sec_code_session'] : false;
} else {
$sec_code = 1;
$sec_code_session = 1;
}
//Устанавливаем параметры для паролей, имени и ящика (добавить новые поля)
$password1 = $db->safesql($parse->process($_POST['password1']));
$password2 = $db->safesql($parse->process($_POST['password2']));
$name = $db->safesql($parse->process(htmlspecialchars(trim($_POST['name']))));
$email = $db->safesql($parse->process($_POST['email']));
$one_rule = $db->safesql($parse->process($_POST['one_rule']));
$two_rule = $db->safesql($parse->process($_POST['two_rule']));
$fullname = $db->safesql($parse->process($_POST['fullname'])); //Имя в форме
$land = $db->safesql($parse->process($_POST['land'])); //Страна
$old = $db->safesql($parse->process($_POST['old'])); // Возраст
$skey = $db->safesql($parse->process($_POST['skey'])); //SKEY
$skey = str_replace("-","",$skey); //Убираем дефисы из ключа
//Переменная для хранения ошибки при регистрации
$reg_error = check_reg ($name, $email, $password1, $password2, $fullname, $land, $old, $skey, $one_rule, $two_rule, $sec_code, $sec_code_session);
//=========================================================================
//Смотрим, существует ли пользователь в БД сервера игры
require_once ENGINE_DIR.'/data/lineagecf.php'; // подключение файла с параметрами для BD игрового сервера
//Подключаемся к БД сервера и смотрим, зарегистрирован ли пользователь там
if(!$db_g->connect( $la2config["loginserver"]["dbuser"], $la2config["loginserver"]["dbpass"], $la2config["loginserver"]["dbname"], $la2config["loginserver"]["dbhost"], 0)) {
$reg_error = $lang['reg_err_31'];
} else {
// Делаем запрос
$row2 = $db_g->super_query("SELECT COUNT(*) as count FROM accounts WHERE LOWER(login) REGEXP '[[:<:]]{$name}[[:>:]]'");
$db->connect(DBUSER, DBPASS, DBNAME, DBHOST); //Переключаемся на БД Сайта
if ($row2['count']) {
$reg_error = $lang['reg_err_8'];
}
}
//=========================================================================/**/
//------------------------------------------------
//Если нет ошибок, приступаем к регистрации
//------------------------------------------------
if (!$reg_error) {
//Если в конфиге включено подтверждение по ящику, высылаем линк
if ($config['registration_type']) {
include_once ENGINE_DIR.'/classes/mail.class.php';
$mail = new dle_mail ($config);
// Для дальнейшего перевода на класс PHPMailer()
//include_once ENGINE_DIR.'/inc/class.phpmailer.php'; //Подключаем класс для отправки почты
//$mail = new PHPMailer();
//Берем шаблон письма из базы
$row = $db->super_query("SELECT template FROM " . PREFIX . "_email where name='reg_mail' LIMIT 0,1");
$row['template'] = stripslashes($row['template']); //Удаляем экранирование символов из шаблона
//Составляем линк для подтверждения регистрации
$idlink = rawurlencode(base64_encode($name."||".$email."||".md5($password1)."||".md5($name.$email.$config['key'])));
//Подставляем в шаблон нужное имя, линк подтверждения и пароль
$row['template'] = str_replace("{%username%}",$name, $row['template']);
$row['template'] = str_replace("{%validationlink%}",$config['http_home_url']."index.php?do=register&doaction=validating&id=".$idlink, $row['template']);
$row['template'] = str_replace("{%password%}", $password1, $row['template']);
$mail->send ($email, $lang['reg_subj'], $row['template']); //Отправляем письмо
//Если проблемы с отправкой письма
if ($mail->send_error) msgbox ($lang['all_info'], $mail->smtp_msg);
else msgbox ($lang['reg_vhead'], $lang['reg_vtext']);
$stopregistration = TRUE;
} else {
//Если отключено, то генерируем линк в ссессии
$doaction = "validating";
$_REQUEST['id'] = rawurlencode(base64_encode($name."||".$email."||".md5($password1)."||".md5($name.$email.$config['key'])));
}
//Выводим ошибку если чтото не так
} else {msgbox ($lang['reg_err_11'], $reg_error);}
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//------------------------------------------------
//Если пользователь не регистрировался, загружаем ему форму регистрации
//------------------------------------------------
if ($doaction != "validating" AND !$stopregistration) {
//Загружаем шаблоны регистрационной формы
$tpl->load_template('registration.tpl');
$tpl->set('[registration]',"");
$tpl->set('[/registration]',"");
$tpl->set_block("'\\[validation\\](.*?)\\[/validation\\]'si",""); //Скрываем блоки валидации в шаблоне чтоб не отображались
$path = parse_url($config['http_home_url']);
if ($config['allow_sec_code'] == "yes") {
$tpl->set('[sec_code]',"");
$tpl->set('[/sec_code]',"");
$tpl->set('{reg_code}',"<span id=\"dle-captcha\"><img src=\"".$path['path']."engine/modules/antibot.php\" alt=\"{$lang['sec_image']}\" border=\"0\" /><br /><a onclick=\"reload(); return false;\" href=\"#\">{$lang['reload_code']}</a></span>");
} else {
$tpl->set('{reg_code}',"");
$tpl->set_block("'\\[sec_code\\](.*?)\\[/sec_code\\]'si","");
}
//-----------------------------
//S-Key
//-----------------------------
// Символы, которые будут использоваться в ключе.
$chars="1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
// Количество символов.
$max=25;
// Определяем количество символов в $chars
$size=StrLen($chars)-1;
// Определяем пустую переменную, в которую и будем записывать символы.
$skey=null;
// Создаём Ключ.
while($max--)
$skey.=$chars[rand(0,$size)];
//Формируем ключ в удобном для чтении виде по парам
$part1 = substr($skey, 0, 5);
$part2 = substr($skey, 5, 5);
$part3 = substr($skey, 10, 5);
$part4 = substr($skey, 15, 5);
$part5 = substr($skey, 20, 5);
$skey = $part1.'-'.$part2.'-'.$part3.'-'.$part4.'-'.$part5;
//Устанавливаем переменную в шаблон
$tpl->set('{s-key}', $skey);
//-----------------------------
//Обработка данных формы
$tpl->copy_template = "<form method=\"post\" name=\"registration\" id=\"registration\" action=\"".$config['http_home_url']."index.php?do=register\">\n".$tpl->copy_template."
<input name=\"submit_reg\" type=\"hidden\" id=\"submit_reg\" value=\"submit_reg\" />
</form>";
$tpl->copy_template .= <<<HTML
<script language='JavaScript' type="text/javascript">
function reload () {
var rndval = new Date().getTime();
document.getElementById('dle-captcha').innerHTML = '<img src="{$path['path']}engine/modules/antibot.php?rndval=' + rndval + '" border="0" width="120" height="50"><br /><a onclick="reload(); return false;" href="#">{$lang['reload_code']}</a>';
};
</script>
HTML;
$tpl->compile('content');
$tpl->clear();
}
//------------------------------------------------
//Страница валидации, если он нажал подтвердить регистрацию
//------------------------------------------------
if (isset($_POST['submit_val'])) {
//Данные из ПОСТ помещаем в переменные (Имя и пароль)
$user_arr = explode ("||", base64_decode(rawurldecode($_POST['id'])));
$user = trim($db->safesql($user_arr[0]));
$pass = md5($user_arr[2]);
$db->query("SELECT * FROM " . USERPREFIX . "_users where name = '$user' AND password='$pass'");
//Если пользователь в базе не найден, то пишем - доспуп запрещен, если находим то передаем переменной параметры из бызы
if (!$db->num_rows()) $stop .= "Access Denied"; else $row = $db->get_row();
$db->free();
//Если что-то не так, выдаем ошибку
if ($stop){ msgbox ($lang['reg_err_18'], $stop); }
else {
//$db->query("UPDATE " . USERPREFIX . "_users set fullname='$fullname', skey='$skey', land='$land', old='$old' where name='$user'");
msgbox ($lang['reg_ok'], $lang['reg_ok_1']);
$stopregistration = TRUE;
}
}
//Если пользователь прошел по ссылке подтверждения регистрации в письме
if ( ($doaction == "validating") AND (!$stopregistration) AND (!$_POST['submit_val']) ) {
$user_arr = explode ("||", base64_decode(rawurldecode($_REQUEST['id'])));
$regpassword = md5($user_arr[2]);
$regpassword2 = base64_encode(pack("H*", sha1(utf8_encode($password1))));
//$regpassword2 = base64_encode(pack("H*", sha1(utf8_encode($user_arr[2]))));
//$regpassword2 = $user_arr[2];
$name = trim($db->safesql(htmlspecialchars($parse->process($user_arr[0]))));
$email = trim($db->safesql($parse->process($user_arr[1])));
if (md5($name.$email.$config['key']) != $user_arr[3]) die ('ID not valid!');
$reg_error = check_reg($name, $email, $regpassword, $regpassword);
if ($reg_error != "") {
msgbox ($lang['reg_err_11'], $reg_error);
$stopregistration = TRUE;
} else {
if (($_REQUEST['step'] != 2) AND $config['registration_type']) {
$stopregistration = TRUE;
$lang['confirm_ok'] = str_replace ('{email}', $email, $lang['confirm_ok']);
$lang['confirm_ok'] = str_replace ('{login}', $name, $lang['confirm_ok']);
msgbox ($lang['all_info'], $lang['confirm_ok']. "<br /><br /><a href=\"".$config['http_home_url']."index.php?do=register&doaction=validating&step=2&id=".rawurlencode($_REQUEST['id'])."\">Продолжить регистрацию на сайте</a>");
} else {
$add_time = time()+($config['date_adjust']*60);
$_IP = $db->safesql($_SERVER['REMOTE_ADDR']);
if (intval($config['reg_group']) < 3) $config['reg_group'] = 4;
//РЕГИСТРАЦИЯ пользователя в БД сайта
$db->query("INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '".$config['reg_group']."', '', '', '', '', '".$_IP."')");
//РЕГИСТРАЦИЯ пользователя в БД сервера
require_once ENGINE_DIR.'/data/lineagecf.php'; // подключение файла с параметрами для BD игрового сервера
//Подключаемся к БД сервера и заносим регистрационные данные в таблицу аккаунтов
if(!$db_g->connect( $la2config["loginserver"]["dbuser"], $la2config["loginserver"]["dbpass"], $la2config["loginserver"]["dbname"], $la2config["loginserver"]["dbhost"], 0)) {
msgbox ($lang['reg_err_30'], $lang['reg_err_31']);
} else {
// Делаем запрос
$add_accaunt = "INSERT INTO `accounts`(login,password,lastactive,accesslevel,lastIP) VALUES ('$name','$regpassword2','0','0','".$_IP."')";
$db_g->query($add_accaunt);
$db->connect(DBUSER, DBPASS, DBNAME, DBHOST); //Переключаемся на БД Сайта
}
}
}
}
//Страница подтверждения регистрации
if ($doaction == "validating" AND !$stopregistration) {
$tpl->load_template('registration.tpl');
$tpl->set('[validation]',"");
$tpl->set('[/validation]',"");
$tpl->set_block("'\\[registration\\].*?\\[/registration\\]'si",""); //Блокирвать блок с формой регистрации
$tpl->copy_template = "<form method=\"post\" name=\"registration\" enctype=\"multipart/form-data\" action=\"".$PHP_SELF."\">\n".$tpl->copy_template."
<input name=\"submit_val\" type=\"hidden\" id=\"submit_val\" value=\"submit_val\">
<input name=\"do\" type=\"hidden\" id=\"do\" value=\"register\">
<input name=\"doaction\" type=\"hidden\" id=\"doaction\" value=\"validating\">
<input name=\"id\" type=\"hidden\" id=\"id\" value=\"{$_REQUEST['id']}\">
</form>";
$tpl->compile('content');
$tpl->clear();
}
?>
В чом проблема?
0
· 05/19/2009, 09:22 PM
segala: я попробовал сделать такой скрипт как у gwe толька для
дле чтоб регистрировала на сайте и в игре но когда регистрируюсь бьет ошибкуКодFatal error: Call to a member function connect() on a non-object in C:\xampplite\htdocs\engine\modules\register.php on line 127
В чом проблема?
Обращение к переменной которая не объявлена классом...
смотри в файле engine/data/dbcofig.php есть ли там описанная переменная $db_g так как $db ($db = new db;)
0
· 05/20/2009, 10:08 AM
теперь следующую проблема когда нажимаю регистрация пишет
Цитата
Администратором было запрещено использовать данный логин для регистрации{descr}
, по причине: {descr}Администратором было запрещено использовать данный E-Mail для регистрации{descr}
, по причине: {descr}Администратором было запрещено использовать данный E-Mail для регистрации{descr}
0
Topic is closed for replies



