Specif 245 Опубликовано 29 декабря, 2014 (изменено) Всем доброго времени суток, хочу поделиться с вами сбором номеров с вашего сайта на CMS Stress Web 13 без каких либо дополнительный скриптов, все делается просто на базовом функционале обвязки. Надеюсь его будут использовать лишь для ознакомительный целей, не в коем случае не для спама. Прошу прощения если тема создал не в том разделе (Другие не доступны). Что нам понадобиться? Stress Web 13 (Null, лицензионный, без разницы). Руки, монитор, клавиатура, мышь. Для начала вам нужно скопировать данный php файл register.php в каталог application тем самым заменить старый: /** * STRESS WEB * @author S.T.R.E.S.S. * @copyright 2008 - 2012 STRESS WEB * @version 13 * @web http://stressweb.ru */ if ( !defined("STRESSWEB") ) die( "Access denied..." ); if ( !$l2cfg["reg_enable"] ) { $tpl->SetResult( "content", "{$lang["reg_err_0"]}" ); } else { $_do = ( isset($_REQUEST["do"]) and $_REQUEST["do"] == "activate" and $l2cfg["reg_activate"] ) ? "activate":"reg"; /************************** * Account Activation **************************/ if ( $_do == "activate" and $l2cfg["reg_activate"] ) { $hash = ( isset($_REQUEST["hash"]) ) ? urldecode( $_REQUEST["hash"] ):""; if ( empty($hash) ) { $_do = 'reg'; } else { $hash = explode( '|', base64_decode($hash) ); if ( count($hash) != 6 or md5($hash[0].$hash[1].$hash[2].$hash[3].$hash[4].$l2cfg['salt']) != $hash[5] ) { $tpl->SetResult( 'content', "incorrect hash" ); } elseif ( $sid != $hash[3] ) { $tpl->SetResult( 'content', "incorrect server id" ); } else { $db->ldb( $lid ); if ( $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT login FROM accounts WHERE login='".$ldb[$lid]->safe($hash[0])."' LIMIT 1")) ) { $tpl->SetResult( "content", "Аккаунт уже существует" ); } else { $ldb[$lid]->SuperQuery( $qList[$vls]["insAccount"], array("login" => $hash[0], "pass" => $controller->PassEncode($hash[1], $l2cfg["ls"][$lid]["encode"]), "l2email" => $hash[2], "phone" => $hash[3]) ); if ( $ldb[$lid]->affected() > 0 ) { $tpl->SetResult( "content", "{$lang["validate_err_1"]}" ); $db->gdb( $sid ); $ref_query = $gdb[$sid]->query( "SELECT `account_name`,`{$qList[$vList[$l2cfg["gs"][$sid]["version"]]]["fields"]["charID"]}` AS charID FROM `characters` WHERE `char_name`='{$hash[4]}'" ); if ( $gdb[$sid]->num_rows($ref_query) > 0 ) { $ref_data = $gdb[$sid]->fetch( $ref_query ); $gdb[$sid]->query( "INSERT INTO `stress_referal` SET `account_referer`='".$ldb[$lid]->safe($hash[0])."',`account_name`='{$ref_data['account_name']}',`charId`='{$ref_data['charID']}',`char_name`='{$hash[4]}'" ); if ( $gdb[$sid]->affected() > 0 ) { $tpl->ShowError( $lang["message"], "Вы участвуете в программе 'Пригласи друга'", false ); } else { $tpl->ShowError( $lang["message"], "'Пригласи друга': ошибка базы данных" ); } } } else { $tpl->SetResult( "content", "{$lang["err_db"]}" ); } } } } } /************************** * Account Registration **************************/ if ( $_do == "reg" ) { if ( isset($_POST["register"]) ) { $captcha = null; if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'sw' ) { $_l2code_post = strtoupper( $db->safe($_POST["l2sec_code"]) ); $_l2code_sess = $controller->sess_get( 'seccode' ); $controller->sess_unset( 'seccode' ); if ( !$_l2code_sess or $_l2code_post != $_l2code_sess ) { $captcha = true; } } if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'recaptcha' ) { $challenge = ( isset($_POST['recaptcha_challenge_field']) ) ? $_POST['recaptcha_challenge_field']:null; $response = ( isset($_POST['recaptcha_response_field']) ) ? $_POST['recaptcha_response_field']:null; if ( $challenge == null or strlen($challenge) == 0 or $response == null or strlen($response) == 0 ) { $captcha = true; } else { $resp = $controller->reCaptchaResponse( $_SERVER['REMOTE_ADDR'], $challenge, $response, $l2cfg['captcha']['privatekey'] ); if ( $resp['flag'] == 'false' or $resp['msg'] != 'success' ) { $captcha = true; } } } $_l2friend = ( isset($_POST['l2friend']) ) ? $db->safe( htmlspecialchars(strip_tags(trim($_POST['l2friend']))) ):false; $_l2login = $db->safe( htmlspecialchars(strip_tags(trim($_POST["l2account"]))) ); if ( isset($_POST['l2prefix']) ) $_l2login = $db->safe( $_POST['l2prefix'] ).$_l2login; $_l2pass1 = $db->safe( $_POST["l2password1"] ); $_l2pass2 = $db->safe( $_POST["l2password2"] ); $_l2email = $db->safe( $_POST["l2email"] ); $_phone = $db->safe( $_POST["phone"] ); if ( empty($_l2login) or empty($_l2pass1) or empty($_l2pass2) or empty($_l2email) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_1"] ); } elseif ( $captcha ) { $tpl->ShowError( $lang["error"], $lang["err_code"] ); } elseif ( $_l2pass1 != $_l2pass2 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_2"] ); } elseif ( strlen($_l2login) < 4 or strlen($_l2login) > 14 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_3_1"] ); } elseif ( strlen($_l2pass1) < 6 or strlen($_l2pass1) > 16 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_3_2"] ); } elseif ( preg_match("/[\||'|\<|\>|\[|\]|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\{\+]/", $_l2login) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_4"] ); } elseif ( !filter_var($_l2email, FILTER_VALIDATE_EMAIL) ) { $tpl->ShowError( $lang["error"], $lang["err_mail"] ); } else { $db->ldb( $lid ); if ( $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT * FROM accounts WHERE login='{$_l2login}' LIMIT 1")) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_6"] ); } elseif ( !$l2cfg["reg_multi"] and $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT * FROM accounts WHERE l2email='{$_l2email}' LIMIT 1")) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_7"] ); } else { $_login = strtolower( $_l2login ); $_pass = $controller->PassEncode( $ldb[$lid]->safe($_l2pass1), $l2cfg["ls"][$lid]["encode"] ); if ( !$l2cfg["reg_activate"] ) { $ldb[$lid]->SuperQuery( $qList[$vls]["insAccount"], array("login" => $_login, "pass" => $_pass, "l2email" => $_l2email, "phone" => $_phone) ); if ( $ldb[$lid]->affected() == 1 ) { $tpl->ShowError( $lang["message"], $lang["reg_err_8"], false ); $tpl->LoadView( "email_register_ok" ); $tpl->Set( 'login', $_login ); $tpl->Set( 'password', $_l2pass1 ); $tpl->Set( 'host', HTTP_HOME_URL ); $tpl->Build( "mail_message" ); $mail_message = $tpl->GetResult( "mail_message" ); $mail = new Email( $l2cfg ); $mail->send( $_l2email, 'Регистрация аккаунта', $mail_message ); $db->gdb( $sid ); $ref_query = $gdb[$sid]->query( "SELECT `account_name`,`{$qList[$vList[$l2cfg["gs"][$sid]["version"]]]["fields"]["charID"]}` AS charID FROM `characters` WHERE `char_name`='{$_l2friend}'" ); if ( $gdb[$sid]->num_rows($ref_query) > 0 ) { $ref_data = $gdb[$sid]->fetch( $ref_query ); $gdb[$sid]->query( "INSERT INTO `stress_referal` SET `account_referer`='{$_l2login}',`account_name`='{$ref_data['account_name']}',`charId`='{$ref_data['charID']}',`char_name`='{$_l2friend}'" ); if ( $gdb[$sid]->affected() > 0 ) { $tpl->ShowError( $lang["message"], "Вы участвуете в программе 'Пригласи друга'", false ); } else { $tpl->ShowError( $lang["message"], "'Пригласи друга': ошибка базы данных" ); } } } else $tpl->ShowError( $lang["error"], $lang["err_db"] ); } else { $hash = urlencode( base64_encode($_login.'|'.$_l2pass1.'|'.$_l2email.'|'.$sid.'|'.$_l2friend.'|'.md5($_login.$_l2pass1.$_l2email.$sid.$_l2friend.$l2cfg['salt'])) ); $tpl->LoadView( "email_register" ); $tpl->Set( 'login', $_login ); $tpl->Set( 'password', $_l2pass1 ); $tpl->Set( 'host', HTTP_HOME_URL ); $tpl->Set( 'link', HTTP_HOME_URL."/index.php?f=register&do=activate&sid={$sid}&hash={$hash}" ); $tpl->Build( "mail_message" ); $mail_message = $tpl->GetResult( "mail_message" ); $mail = new Email( $l2cfg ); $mail->send( $_l2email, $lang["reg_err_11"], $mail_message ); if ( $mail->send_error ) { $tpl->ShowError( $lang["error"], $mail->smtp_msg ); } else { $tpl->ShowError( $lang["message"], $lang["reg_err_9"], false ); } } } } } $tpl->LoadView( "register" ); if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'sw' ) { $tpl->template = '//'.$tpl->template; $tpl->Block( 'captcha' ); $tpl->Set( 'l2sec_code', " " ); } else $tpl->Block( 'captcha', false ); if ( $l2cfg['captcha']['reg'] and $l2cfg['captcha']['reg_type'] == 'recaptcha' ) { $tpl->Set( 'code', ' var RecaptchaOptions = { theme : 'white' }; Как вы успели заметить (Кто не просто скопировал как балбес, а попытался разобраться мы добавили $_phone = $db->safe( $_POST["phone"] ); ) Далее нам понадобиться файл l2j: Рассмотрим на примере l2jopen.php "insAccount" => " INSERT INTO `accounts` (`login`,`password`,`access_level`,`l2email`,`phone`) VALUES ('{login}','{pass}','0','{l2email}','{phone}')", К стандартному insAccount мы добавляем `phone` - Зачем почему думаю не стоит пояснять? Можно скопировать и заменить в своем l2j. Далее самое интересное переходим в templates\default находим там наш файл register.tpl открываем его и в удобное для нас место добавляем: <tr> <td class="tdlp"><span class="tit">Номер телефона: </span><span class="des"><font color="ff0000">укажите номер телефона</font></span> <div class="lp_fields_cap" id="login_input_cap"> <input style="text-align:left;" type="text" name="phone" maxlength="20" class="input" placeholder="+7(123)4445566"> </div> </td> </tr> Финиш: Не забываем в таблице accounts добавить колонку phone с максимальный размером записи в неё 20. `phone` varchar(20) Проверяем регистрацию, если значение не null при указывание номера телефона, то все работает! Что мы получили в итоге? При регистрации мы не обязываем игрока указывать номер телефона, если он его не укажет мы получим пустое значение null в столбце phone, если игрок указывает номер телефона при регистрации мы его увидим в столбце phone. В итоге мы получили некую маленькую модификацию в свой стресс веб без вмешательства лишних скриптов. Изменено 29 декабря, 2014 пользователем Specif 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Specif 245 Опубликовано 29 декабря, 2014 Для любителей стандарта: \templates\default\register.tpl <tr> <td class="tdLeft">Телефон:<br><span class="description">Укажите номер телефона</span></td> <td class="tdRight"><input type="text" name="phone" maxlength="20" class="input"></td> </tr> 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Desquire 451 Опубликовано 29 декабря, 2014 Только потом не кричите что вам слили бд и св дырявый. Не увидел проверки на валидность номера телефона.... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
3DSdesing 90 Опубликовано 29 декабря, 2014 Только потом не кричите что вам слили бд и св дырявый. Не увидел проверки на валидность номера телефона.... штука то хорошая , но если бы приходила ещё СМС с кодом подтверждения , и был выбор телефон или эмаил , вот этобылабы бомбэ ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Desquire 451 Опубликовано 29 декабря, 2014 штука то хорошая , но если бы приходила ещё СМС с кодом подтверждения , и был выбор телефон или эмаил , вот этобылабы бомбэ ) Типо такого ? http://forummaxi.ru/topic/59242-%D0%B2%D1%8B%D0%B4%D0%B0%D1%87%D0%B0-%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%B0-%D0%BF%D0%BE-%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%83-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B0/ 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Specif 245 Опубликовано 29 декабря, 2014 Только потом не кричите что вам слили бд и св дырявый. Не увидел проверки на валидность номера телефона.... Не кто не заставляет вас брать готовый register.php, вы можете только заменить строку. Так же где вы увидели угрозу SQL инъекции? Да добавлен пункт, работы бд, но он не как не дает подменить пользователя. Окей, сделали инъекцию, получили пусть путь к логину и паролю к АЦ Stress Web, а путь? Что касательно проверки, можно добавить разными путями, если вы её не увидели значит вы что-то понимаете? Так вставьте проверку для себе сами. штука то хорошая , но если бы приходила ещё СМС с кодом подтверждения , и был выбор телефон или эмаил , вот этобылабы бомбэ ) К сожалению это уже отдельный скрипт. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Desquire 451 Опубликовано 29 декабря, 2014 (изменено) Не кто не заставляет вас брать готовый register.php, вы можете только заменить строку. Так же где вы увидели угрозу SQL инъекции? Да добавлен пункт, работы бд, но он не как не дает подменить пользователя. Окей, сделали инъекцию, получили пусть путь к логину и паролю к АЦ Stress Web, а путь? Что касательно проверки, можно добавить разными путями, если вы её не увидели значит вы что-то понимаете? Так вставьте проверку для себе сами. Для начала узнай что такое SQL инъекции... Вы не просто добавили "пункт, работы бд". вы создали уязвимость. Поясню : вы не проверяете входящие данные в поле телефон. В это поле я могу засунуть свой запрос, который допустим создает акк с доступом к гмке, ну или просто банально удаляет все аки из таблицы. Я бы пояснил как сделать проверку, не я не ковырялся в св и не знаю как в нем сгенерировать ошибку... ( туго разбираюсь в чужом коде ). Если ты все это сделал, напиши мне в скайп, попробуем прикрыть дырку. Изменено 29 декабря, 2014 пользователем zGrandy Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Specif 245 Опубликовано 29 декабря, 2014 Для начала узнай что такое SQL инъекции... Вы не просто добавили "пункт, работы бд". вы создали уязвимость. Поясню : вы не проверяете входящие данные в поле телефон. В это поле я могу засунуть свой запрос, который допустим создает акк с доступом к гмке, ну или просто банально удаляет все аки из таблицы. Я бы пояснил как сделать проверку, не я не ковырялся в св и не знаю как в нем сгенерировать ошибку... ( туго разбираюсь в чужом коде ). Если ты все это сделал, напиши мне в скайп, попробуем прикрыть дырку. Я готов предоставить тест, если вы не сделаете SQL инъекцию, как вы будете искать своё оправдание? "insAccount" => " INSERT INTO `accounts` (`login`,`password`,`access_level`,`l2email`,`phone`) VALUES ('{login}','{pass}','0','{l2email}','{phone}')", Вам приснилось место для инъекции в данном коде? Измените данный SQL запрос, под место в регистрации. Из вне с access_level 100. Зы: Давно не видел сборок которые хранят админку в БД к примеру access_level 100, это ловели наверное либо GovnoSoft? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Desquire 451 Опубликовано 29 декабря, 2014 Я готов предоставить тест, если вы не сделаете SQL инъекцию, как вы будете искать своё оправдание? "insAccount" => " INSERT INTO `accounts` (`login`,`password`,`access_level`,`l2email`,`phone`) VALUES ('{login}','{pass}','0','{l2email}','{phone}')", Вам приснилось место для инъекции в данном коде? Измените данный SQL запрос, под место в регистрации. Из вне с access_level 100. Зы: Давно не видел сборок которые хранят админку в БД к примеру access_level 100, это ловели наверное либо GovnoSoft? при регистрации вводим номер телефона такой: 0501231223'); DELETE FROM `accounts` where login!='azazaz';-- попробуй у себя ввести Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Specif 245 Опубликовано 29 декабря, 2014 при регистрации вводим номер телефона такой: 0501231223'); DELETE FROM `accounts` where login!='azazaz';-- попробуй у себя ввести Null. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ExstazI 99 Опубликовано 8 декабря, 2015 (изменено) Для любителей стандарта: \templates\default\register.tpl <tr> <td class="tdLeft">Телефон:<br><span class="description">Укажите номер телефона</span></td> <td class="tdRight"><input type="text" name="phone" maxlength="20" class="input"></td> </tr> а где ссылка на файлик? Изменено 8 декабря, 2015 пользователем ExstazI Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
StiV 12 Опубликовано 1 апреля, 2016 Всем доброго времени суток, хочу поделиться с вами сбором номеров с вашего сайта на CMS Stress Web 13 без каких либо дополнительный скриптов, все делается просто на базовом функционале обвязки. Надеюсь его будут использовать лишь для ознакомительный целей, не в коем случае не для спама. Прошу прощения если тема создал не в том разделе (Другие не доступны). Что нам понадобиться? Stress Web 13 (Null, лицензионный, без разницы). Руки, монитор, клавиатура, мышь. Для начала вам нужно скопировать данный php файл register.php в каталог application тем самым заменить старый: /** * STRESS WEB * @author S.T.R.E.S.S. * @copyright 2008 - 2012 STRESS WEB * @version 13 * @web http://stressweb.ru */ if ( !defined("STRESSWEB") ) die( "Access denied..." ); if ( !$l2cfg["reg_enable"] ) { $tpl->SetResult( "content", "{$lang["reg_err_0"]}" ); } else { $_do = ( isset($_REQUEST["do"]) and $_REQUEST["do"] == "activate" and $l2cfg["reg_activate"] ) ? "activate":"reg"; /************************** * Account Activation **************************/ if ( $_do == "activate" and $l2cfg["reg_activate"] ) { $hash = ( isset($_REQUEST["hash"]) ) ? urldecode( $_REQUEST["hash"] ):""; if ( empty($hash) ) { $_do = 'reg'; } else { $hash = explode( '|', base64_decode($hash) ); if ( count($hash) != 6 or md5($hash[0].$hash[1].$hash[2].$hash[3].$hash[4].$l2cfg['salt']) != $hash[5] ) { $tpl->SetResult( 'content', "incorrect hash" ); } elseif ( $sid != $hash[3] ) { $tpl->SetResult( 'content', "incorrect server id" ); } else { $db->ldb( $lid ); if ( $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT login FROM accounts WHERE login='".$ldb[$lid]->safe($hash[0])."' LIMIT 1")) ) { $tpl->SetResult( "content", "Аккаунт уже существует" ); } else { $ldb[$lid]->SuperQuery( $qList[$vls]["insAccount"], array("login" => $hash[0], "pass" => $controller->PassEncode($hash[1], $l2cfg["ls"][$lid]["encode"]), "l2email" => $hash[2], "phone" => $hash[3]) ); if ( $ldb[$lid]->affected() > 0 ) { $tpl->SetResult( "content", "{$lang["validate_err_1"]}" ); $db->gdb( $sid ); $ref_query = $gdb[$sid]->query( "SELECT `account_name`,`{$qList[$vList[$l2cfg["gs"][$sid]["version"]]]["fields"]["charID"]}` AS charID FROM `characters` WHERE `char_name`='{$hash[4]}'" ); if ( $gdb[$sid]->num_rows($ref_query) > 0 ) { $ref_data = $gdb[$sid]->fetch( $ref_query ); $gdb[$sid]->query( "INSERT INTO `stress_referal` SET `account_referer`='".$ldb[$lid]->safe($hash[0])."',`account_name`='{$ref_data['account_name']}',`charId`='{$ref_data['charID']}',`char_name`='{$hash[4]}'" ); if ( $gdb[$sid]->affected() > 0 ) { $tpl->ShowError( $lang["message"], "Вы участвуете в программе 'Пригласи друга'", false ); } else { $tpl->ShowError( $lang["message"], "'Пригласи друга': ошибка базы данных" ); } } } else { $tpl->SetResult( "content", "{$lang["err_db"]}" ); } } } } } /************************** * Account Registration **************************/ if ( $_do == "reg" ) { if ( isset($_POST["register"]) ) { $captcha = null; if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'sw' ) { $_l2code_post = strtoupper( $db->safe($_POST["l2sec_code"]) ); $_l2code_sess = $controller->sess_get( 'seccode' ); $controller->sess_unset( 'seccode' ); if ( !$_l2code_sess or $_l2code_post != $_l2code_sess ) { $captcha = true; } } if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'recaptcha' ) { $challenge = ( isset($_POST['recaptcha_challenge_field']) ) ? $_POST['recaptcha_challenge_field']:null; $response = ( isset($_POST['recaptcha_response_field']) ) ? $_POST['recaptcha_response_field']:null; if ( $challenge == null or strlen($challenge) == 0 or $response == null or strlen($response) == 0 ) { $captcha = true; } else { $resp = $controller->reCaptchaResponse( $_SERVER['REMOTE_ADDR'], $challenge, $response, $l2cfg['captcha']['privatekey'] ); if ( $resp['flag'] == 'false' or $resp['msg'] != 'success' ) { $captcha = true; } } } $_l2friend = ( isset($_POST['l2friend']) ) ? $db->safe( htmlspecialchars(strip_tags(trim($_POST['l2friend']))) ):false; $_l2login = $db->safe( htmlspecialchars(strip_tags(trim($_POST["l2account"]))) ); if ( isset($_POST['l2prefix']) ) $_l2login = $db->safe( $_POST['l2prefix'] ).$_l2login; $_l2pass1 = $db->safe( $_POST["l2password1"] ); $_l2pass2 = $db->safe( $_POST["l2password2"] ); $_l2email = $db->safe( $_POST["l2email"] ); $_phone = $db->safe( $_POST["phone"] ); if ( empty($_l2login) or empty($_l2pass1) or empty($_l2pass2) or empty($_l2email) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_1"] ); } elseif ( $captcha ) { $tpl->ShowError( $lang["error"], $lang["err_code"] ); } elseif ( $_l2pass1 != $_l2pass2 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_2"] ); } elseif ( strlen($_l2login) < 4 or strlen($_l2login) > 14 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_3_1"] ); } elseif ( strlen($_l2pass1) < 6 or strlen($_l2pass1) > 16 ) { $tpl->ShowError( $lang["error"], $lang["reg_err_3_2"] ); } elseif ( preg_match("/[\||'|\<|\>|\[|\]|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\{\+]/", $_l2login) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_4"] ); } elseif ( !filter_var($_l2email, FILTER_VALIDATE_EMAIL) ) { $tpl->ShowError( $lang["error"], $lang["err_mail"] ); } else { $db->ldb( $lid ); if ( $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT * FROM accounts WHERE login='{$_l2login}' LIMIT 1")) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_6"] ); } elseif ( !$l2cfg["reg_multi"] and $ldb[$lid]->num_rows($ldb[$lid]->query("SELECT * FROM accounts WHERE l2email='{$_l2email}' LIMIT 1")) ) { $tpl->ShowError( $lang["error"], $lang["reg_err_7"] ); } else { $_login = strtolower( $_l2login ); $_pass = $controller->PassEncode( $ldb[$lid]->safe($_l2pass1), $l2cfg["ls"][$lid]["encode"] ); if ( !$l2cfg["reg_activate"] ) { $ldb[$lid]->SuperQuery( $qList[$vls]["insAccount"], array("login" => $_login, "pass" => $_pass, "l2email" => $_l2email, "phone" => $_phone) ); if ( $ldb[$lid]->affected() == 1 ) { $tpl->ShowError( $lang["message"], $lang["reg_err_8"], false ); $tpl->LoadView( "email_register_ok" ); $tpl->Set( 'login', $_login ); $tpl->Set( 'password', $_l2pass1 ); $tpl->Set( 'host', HTTP_HOME_URL ); $tpl->Build( "mail_message" ); $mail_message = $tpl->GetResult( "mail_message" ); $mail = new Email( $l2cfg ); $mail->send( $_l2email, 'Регистрация аккаунта', $mail_message ); $db->gdb( $sid ); $ref_query = $gdb[$sid]->query( "SELECT `account_name`,`{$qList[$vList[$l2cfg["gs"][$sid]["version"]]]["fields"]["charID"]}` AS charID FROM `characters` WHERE `char_name`='{$_l2friend}'" ); if ( $gdb[$sid]->num_rows($ref_query) > 0 ) { $ref_data = $gdb[$sid]->fetch( $ref_query ); $gdb[$sid]->query( "INSERT INTO `stress_referal` SET `account_referer`='{$_l2login}',`account_name`='{$ref_data['account_name']}',`charId`='{$ref_data['charID']}',`char_name`='{$_l2friend}'" ); if ( $gdb[$sid]->affected() > 0 ) { $tpl->ShowError( $lang["message"], "Вы участвуете в программе 'Пригласи друга'", false ); } else { $tpl->ShowError( $lang["message"], "'Пригласи друга': ошибка базы данных" ); } } } else $tpl->ShowError( $lang["error"], $lang["err_db"] ); } else { $hash = urlencode( base64_encode($_login.'|'.$_l2pass1.'|'.$_l2email.'|'.$sid.'|'.$_l2friend.'|'.md5($_login.$_l2pass1.$_l2email.$sid.$_l2friend.$l2cfg['salt'])) ); $tpl->LoadView( "email_register" ); $tpl->Set( 'login', $_login ); $tpl->Set( 'password', $_l2pass1 ); $tpl->Set( 'host', HTTP_HOME_URL ); $tpl->Set( 'link', HTTP_HOME_URL."/index.php?f=register&do=activate&sid={$sid}&hash={$hash}" ); $tpl->Build( "mail_message" ); $mail_message = $tpl->GetResult( "mail_message" ); $mail = new Email( $l2cfg ); $mail->send( $_l2email, $lang["reg_err_11"], $mail_message ); if ( $mail->send_error ) { $tpl->ShowError( $lang["error"], $mail->smtp_msg ); } else { $tpl->ShowError( $lang["message"], $lang["reg_err_9"], false ); } } } } } $tpl->LoadView( "register" ); if ( $l2cfg["captcha"]["reg"] and $l2cfg['captcha']['reg_type'] == 'sw' ) { $tpl->template = '//'.$tpl->template; $tpl->Block( 'captcha' ); $tpl->Set( 'l2sec_code', " " ); } else $tpl->Block( 'captcha', false ); if ( $l2cfg['captcha']['reg'] and $l2cfg['captcha']['reg_type'] == 'recaptcha' ) { $tpl->Set( 'code', ' var RecaptchaOptions = { theme : 'white' }; Как вы успели заметить (Кто не просто скопировал как балбес, а попытался разобраться мы добавили $_phone = $db->safe( $_POST["phone"] ); ) Далее нам понадобиться файл l2j: Рассмотрим на примере l2jopen.php "insAccount" => " INSERT INTO `accounts` (`login`,`password`,`access_level`,`l2email`,`phone`) VALUES ('{login}','{pass}','0','{l2email}','{phone}')", К стандартному insAccount мы добавляем `phone` - Зачем почему думаю не стоит пояснять? Можно скопировать и заменить в своем l2j. Далее самое интересное переходим в templates\default находим там наш файл register.tpl открываем его и в удобное для нас место добавляем: <tr> <td class="tdlp"><span class="tit">Номер телефона: </span><span class="des"><font color="ff0000">укажите номер телефона</font></span> <div class="lp_fields_cap" id="login_input_cap"> <input style="text-align:left;" type="text" name="phone" maxlength="20" class="input" placeholder="+7(123)4445566"> </div> </td> </tr> Финиш: Не забываем в таблице accounts добавить колонку phone с максимальный размером записи в неё 20. `phone` varchar(20) Проверяем регистрацию, если значение не null при указывание номера телефона, то все работает! Что мы получили в итоге? При регистрации мы не обязываем игрока указывать номер телефона, если он его не укажет мы получим пустое значение null в столбце phone, если игрок указывает номер телефона при регистрации мы его увидим в столбце phone. В итоге мы получили некую маленькую модификацию в свой стресс веб без вмешательства лишних скриптов. Всё сделал по мануалу, но в БД сервера в поле с номером телефона, вместо самого номера пишется: {phone} Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
StiV 12 Опубликовано 5 апреля, 2016 Проблема осталась прежней. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты