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

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


Milky Way

Рекомендуемые сообщения

Так как 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 года спустя...

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
Ссылка на комментарий
Поделиться на другие сайты

  • 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

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

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

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

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