Milky Way

Простая регистрация

6 сообщений в этой теме

Так как 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";

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

3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

+ на обоих сообщений,очень помогло спс.

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не за что :-)

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\reg.php:1) in Z:\home\localhost\www\reg.php on line 72

заголовки...

и в базе пусто, хоть и написано что регистрация успешно завершена...

Изменено пользователем maxmum
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\reg.php:1) in Z:\home\localhost\www\reg.php on line 72

заголовки...

и в базе пусто, хоть и написано что регистрация успешно завершена...

у меня тоже в базе пусто не смотря на то что говорит регистрация завершена успешно правда без верхней ошибки Оо
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас