Перейти к содержанию

Milky Way

Проверенные
  • Постов

    70
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Сообщения, опубликованные Milky Way

  1. Так как RoRegister был потерян, а он был документирован для новичков в PHP, я написал примитивную регистрацию с небольшим функционалом


    <?php
    /**
    * Стартовое время
    */
    define("startTime", microtime(true));

    /**
    * Кодировка файла+соединения
    */
    define("charset", "UTF8");

    /**
    * Настройки
    */
    $config = array(
    // Шифровать пароли в MD5? true/false
    "md5" => false,

    // Откладка(показ ошибок MySQL), true/false
    "debug" => false,

    // Один аккаунт на сессию? true/false
    "singleBySession" => false,

    // Один аккаунт на почту? true/false
    "singleByEmail" => false,

    // Настройки базы данных
    "mysql" => array(
    // Сервер MySQL
    "hostname" => "127.0.0.1",

    // Порт сервера MySQL
    "port" => 3306,

    // Пользователь MySQL
    "username" => "ragnarok",

    // Пароль пользователя MySQL
    "password" => "ragnarok",

    // База данных MySQL
    "database" => "ragnarok"
    )
    );

    /**
    * Отключим показ ошибок
    */
    switch ( $config["debug"] )
    {
    case true:
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    break;

    default:
    error_reporting(0);
    ini_set("display_errors", 0);
    break;
    }

    /**
    * Запустим сессию если один на сессию
    */
    if ( $config["singleBySession"] && !session_id() )
    session_start();

    /**
    * Установим кодировку страницы.
    */
    header("Content-type:text/html;charset=" . charset);

    /**
    * Опишем функцию для работы с $_POST
    */
    function post($key, $default = "", $xss = true)
    {
    // Вернем пустую строку если ввода не было
    if ( !isset($_POST[$key]) )
    return $default;

    // Экранируем от XSS
    return ( $xss ) ? htmlspecialchars($_POST[$key]) : $_POST[$key];
    }

    /**
    * Ошибки
    */
    $errors = array(
    "login" => false, // Неправильный логин
    "password" => false, // Неправильный пароль
    "rePassword" => false, // Неправильный повтор пароля
    "email" => false, // Неправильная почта
    "reEmail" => false, // Неправильный повтор почты
    "sex" => false, // Неправильный пол
    "exists" => false, // Один аккаунт
    );

    /**
    * Функция регистрации
    */
    function registerAccount()
    {
    // Глоб. переменные
    global $config, $errors, $registered;

    // Проверим логин
    if ( !preg_match("/^[a-z0-9]{4,23}$/iu", post("login", "", false)) )
    $errors["login"] = true;

    // Проверим пароль
    if ( mb_strlen(post("password", "", false)) > 32 || mb_strlen(post("password", "", false)) < 4 )
    $errors["password"] = true;

    // Проверим сходство паролей
    if ( post("password", "", false) != post("rePassword", "", false) )
    $errors["rePassword"] = true;

    // Проверим почту
    if ( filter_var(post("email", "", false), FILTER_VALIDATE_EMAIL) === false )
    $errors["email"] = true;

    // Проверим сходство почт
    if ( post("email", "", false) != post("reEmail", "", false) )
    $errors["reEmail"] = true;

    // Проверим пол
    if ( post("sex", "", false) != "M" && post("sex", "", false) != "F" )
    $errors["sex"] = true;

    // Проверим, есть ли ошибки
    if ( !in_array(true, $errors) )
    {
    // Подключаемся к базе данных
    $mysqlHandle = mysql_connect($config["mysql"]["hostname"] . ":" . $config["mysql"]["port"], $config["mysql"]["username"], $config["mysql"]["password"]);

    // Получим последнию ошибку
    $lastError = mysql_error();

    // Проверим подключение
    if ( !empty($lastError) )
    {
    // Выводим ошибку если откладка
    if ( $config["debug"] )
    echo mysql_error();

    // Выходим
    exit;
    }

    // Пробуем выбрать базу данных
    if ( !mysql_select_db($config["mysql"]["database"], $mysqlHandle) )
    {
    // Выводим ошибку если откладка
    if ( $config["debug"] )
    echo "Не могу выбрать базу данных";

    // Выходим
    exit;
    }

    // Установим кодировку
    if ( !mysql_query("SET NAMES " . charset, $mysqlHandle) )
    {
    // Выводим ошибку если откладка
    if ( $config["debug"] )
    echo "Не могу установить кодировку";

    // Выходим
    exit;
    }

    // Проверим, есть ли такой аккаунт
    $mysqlQuery = "SELECT `account_id` FROM `login` WHERE `userid`=\"" . mysql_real_escape_string(post("login", "", false)) . "\"";

    // Добавим запрос если еще проверка по почте
    if ( $config["singleByEmail"] )
    $mysqlQuery .= " OR `email`=\"" . mysql_real_escape_string(post("email", "", false)) . "\"";

    // Выполняем
    $mysqlResult = mysql_query($mysqlQuery, $mysqlHandle);

    // Проверяем
    if ( mysql_num_rows($mysqlResult) > 0 )
    // Есть такой, ошибка
    $errors["exists"] = true;
    else
    {
    // Подготовим запрос
    $mysqlQuery = sprintf("INSERT INTO `login` (`userid`, `user_pass`, `sex`, `email`, `level`) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", %d)",
    mysql_real_escape_string(post("login", "", false)),
    mysql_real_escape_string(( $config["md5"] ) ? md5(post("password", "", false)) : post("password", "", false)),
    mysql_real_escape_string(post("sex", "", false)),
    mysql_real_escape_string(post("email", "", false)),
    0
    );

    // Делаем запрос
    $mysqlResult = mysql_query($mysqlQuery, $mysqlHandle);

    // Если один на сессию
    if ( $config["singleBySession"] )
    $_SESSION["registered"] = true;

    // Зарегистрировались
    $registered = true;

    // Разорвем соединение с базой
    mysql_close($mysqlHandle);
    }
    }
    }

    /**
    * Проверим, был ли запрос
    */
    if ( post("register", false) )
    {
    // Проверим, если один на сессию
    if ( $config["singleBySession"] && !isset($_SESSION["registered"]) )
    registerAccount();
    elseif ( !$config["singleBySession"] )
    registerAccount();
    }
    ?>
    <html>
    <head>
    <title>Регистрация игрового аккаунта</title>
    </head>
    <body>
    <div style="width:960px;margin:0px auto;">
    <?php if ( ( isset($registered) && $registered === true ) || ( $config["singleBySession"] && isset($_SESSION["registered"]) ) ): ?>
    <h3>Аккаунт зарегистрирован!</h3>
    <p>Теперь Вы можете войти в наш игровой мир, приятной игры!</p>
    <?php else: ?>
    <h3>Форма регистрации</h3>
    <p>Все поля обязательны для заполнения, если ввод поля будет неправильным - он будет обведен в красную рамку</p>

    <?php if ( $errors["exists"] && !$config["singleByEmail"] ): ?>
    <p style="color:#ff0000;">Такой аккаунт уже существует</p>
    <?php endif; ?>

    <?php if ( $errors["exists"] && $config["singleByEmail"] ): ?>
    <p style="color:#ff0000;">Такой аккаунт или почта уже существует</p>
    <?php endif; ?>

    <form action="" method="post">
    <p<?php if ( $errors["login"] ): ?> style="border:1px solid #ff0000;"<?php endif; ?>>Логин:<br /><input type="text" name="login" value="<?php echo post("login"); ?>" /></p>
    <p<?php if ( $errors["password"] || $errors["rePassword"] ): ?> style="border:1px solid #ff0000;"<?php endif; ?>>Пароль:<br /><input type="password" name="password" value="" /><br /><input type="password" name="rePassword" /></p>
    <p<?php if ( $errors["email"] || $errors["reEmail"] ): ?> style="border:1px solid #ff0000;"<?php endif; ?>>Почта:<br /><input type="text" name="email" value="<?php echo post("email"); ?>" /><br /><input type="text" name="reEmail" /></p>
    <p<?php if ( $errors["sex"] ): ?> style="border:1px solid #ff0000;"<?php endif; ?>>Пол:<br /><select name="sex"><option value="M" <?php if ( post("sex") == "M" ): ?>selected<?php endif; ?>>Мужской</option><option value="F" <?php if ( post("sex") == "F" ): ?>selected<?php endif; ?>>Женский</option></select></p>
    <p><input type="submit" name="register" value="Зарегистрироваться" /></p>
    </form>
    <?php endif; ?>
    <p style="margin:64px 0px 0px 0px;font-size:12pt;">Загрузка страницы: <?php echo round(microtime(true) - startTime, 3); ?> секунд</p>
    </div>
    </body>
    </html>
    <?php
    /**
    * Копирайт
    */
    if ( isset($_GET["copyright"]) )
    echo "Milky Way -> 631977082";

    С наступающим!

    • Upvote 3
  2. опять актуально, немного поменяли направление, машина есть все ок, жду энтузиастов.

    *спустя день*

    "Не актуально. Пришлось заплатить за инет, денег на машину нет, все плохо. Нужен спонсор

    good joke, тем кому нужно, давно отписались.

  3. Переменная для проверки на уже получения предмета.

    P.S. метки - быдлокод.

    Ктобы говорил, без обид но я помню с чего ты начинал ;)

    Хорошо что я перестал, в отличии от некоторых. И хватит быть в каждой бочке затычкой.

  4. Ради научного интереса начал писать свой эмулятор, серьезного развития не ждите, просто практика.

    Некоторые вещи перенес в свою афину :)

    SMS - Spark Map Server

    Скриншот #1

    settings.conf - главный .conf файл


    // Включить ли откладку в консоли?
    Debug: yes

    // Загрузим еще один конфиг .
    ImportFile: conf/databases.conf

    databases.conf - доп. .conf файл


    // Загружать предметы?
    LoadItemDb: yes

    // Загружать монстрев?
    LoadMobDb: yes

    // Оповестим что мы загружены .
    Message: conf/databases.conf загружен!

    // И специально тот файл, которого не сущесвует.
    ImportFile: conf/void.conf

    Как видно из скриншота, научил работать с item_db и mob_db полностью, а также прикрутил MySQL-коннект.

    Кто-нибудь страдал подобным делом?)

    • Upvote 1
×
×
  • Создать...
Яндекс.Метрика