<MyRusakov.ru />

Создание движка на PHP и MySQL 2.0

Создание движка на PHP и MySQL 2.0

Видеокурс "Создание движка на PHP и MySQL 2.0" научит Вас создавать профессиональные движки для сайтов на PHP и MySQL с использованием ООП и паттерна MVC.

В курсе разобрана вся теория по структуре движка: как всё устроено, какие должны быть объекты, какая у них иерархия и как они взаимодействуют между собой.

В практической части будет создан движок с чистого листа. Будет создано ядро, все адаптеры, все вспомогательные классы, а также классы для работы с объектами базы данных. И чтобы курс был максимально полезным, будет создан движок для сайта MyRusakov.ru.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Код регистрации на сайте
01.07.2012 13:12:22 Код регистрации на сайте Сообщение #1
Default

Default

Эксперт

Эксперт

Дата регистрации:
12.06.2012 15:20:27

Сообщений: 102

Всем привет. написал код регистрации, все вроде бы не плохо, регистрирует, но хотелось бы узнать мнение опытных, послушать советы

<?php session_start();
// выставляем кодировку по умолчанию
mb_internal_encoding("UTF-8";
// включение всех ошибок
error_reporting(E_ALL);

// функция кр звезды
function zv($color = "red", $text = "*"{
echo "<font color = ".$color.">".$text."</font>";
}
// минимальная и максимальная длина вводимых данных
function maxSize($text, $text){
return (mb_strlen($text) >= 3 && mb_strlen($text) <= 15 );
}
// обработка данных
function clearText($test){
return mysql_real_escape_string(htmlspecialchars(trim($test)));
}
// создаем переменные для устранения ошибки NOTICE
$login = '';
$error = '';
$pass = '';
$clear_pass = '';
///////////////////////////////////////
// принимаем данные пришедшие из формы
////////////////////////////////////////
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset ($_POST['ok'])){
if(isset($_POST['login']) && maxSize($_POST['login'],$_POST['login']))
$login = clearText($_POST['login']);
else $error .= "Неверно указан логин.<br />";

if(isset($_POST['pass']) && maxSize($_POST['pass'],$_POST['pass'])){
$pass = clearText($_POST['pass']);
if(isset($_POST['clear_pass']) && maxSize($_POST['clear_pass'],$_POST['clear_pass']))
$clear_pass = clearText($_POST['clear_pass']);
if ($pass != $clear_pass)
$error .= "Пароли не совпадают.<br />";
}else{ $error .= "Неверно указан пароль.<br />";}

if (empty ($_POST['pravila'])) $error .= "Необходимо согласиться с правилами.<br />";
}
///////////////////////////////////////////////
// если буфер ошибок пуст то подключаемся к ДБ
///////////////////////////////////////////////
if (empty($error)){
include "config.php";
// делаем запрос к таблице и проверяем на существование такого ника в БД
$query = mysql_query ("SELECT COUNT(*) FROM users WHERE login = '$login'";
if (!$query) exit("Ведутся технические работы, поэтому корректное отображение страницы невозможно.";
$result = mysql_result ($query, 0);
if ($result > 0 ) $error .= "Логин \"".$login."\" занят.<br />";
}
////////////////////////////////////////////////
// если буфер ошибок пуст, то вносим данные в БД
////////////////////////////////////////////////
if (empty($error)){
$query = mysql_query ("INSERT INTO users(login,
pass,
reg_date)
VALUES('$login',
'$pass',
NOW())";
if (!$query) $error .= exit("Ведутся технические работы, поэтому корректное отображение страницы невозможно!";
}
////////////////////////////////////////////////////////////////////////////
// если буфер ошибок пуст, то делаем выборку id из ДБ записываем в сессию
////////////////////////////////////////////////////////////////////////////
if(empty($error)){
$query = mysql_query("SELECT id FROM users WHERE login = '$login'";
if (!$query) exit("Ведутся технические работы, поэтому корректное отображение страницы невозможно.";
$result_id = mysql_fetch_assoc($query);
if (!$result_id) exit("Ведутся технические работы, поэтому корректное отображение страницы невозможно.";
$id = $result_id['id'];
$_SESSION['$login'] = $login;
$_SESSION['pass'] = $pass;
$_SESSION['id'] = $id;
if (isset($_SESSION['$login']) && isset($_SESSION['pass']) && $_SESSION['id']){
// направляем на другую страницу
header ("Location:index.php";
}
}
echo "$error";


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Регистрация</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>
<?php
echo "<p>$error</p>";
?>
<form action = "reg.php" method = "POST">
<?php echo zv();?>Логин:<br />
<input type = "text" name = "login" maxlength="15" value="<?php echo $login;?>" /><br />
<?php echo zv();?>Пароль:<br />
<input type = "password" name = "pass" maxlength="15" value="<?php echo $pass;?>" /><br />
<?php echo zv();?>Повторите пароль:<br />
<input type = "password" name = "clear_pass" maxlength="15" value="<?php echo $clear_pass;?>" /><br />
<input name="pravila" type="checkbox" /> Я согласен с <a href = '#'>правилами</a>.<br />
<input type = "submit" name = "ok" value = "Регистрация" />
</form>
</body>
</html>
Профиль Ответить
01.07.2012 16:26:21 Код регистрации на сайте Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Если работает, то хорошо, хотя лучше использовать ООП, да и не смешивать HTML и PHP в одном файле. Это оправдано, если вся цель - это создать регистрацию + чуть-чуть материала на сайте. А если же это полноценный большой сайт, то лучше писать движок.
Профиль Ответить
01.07.2012 16:51:59 Код регистрации на сайте Сообщение #3
Default

Default

Эксперт

Эксперт

Дата регистрации:
12.06.2012 15:20:27

Сообщений: 102

ОПП? я только изучаю, и понятия не имею что такое "движок" и как он работает) я думал если работает код, то хорошо) сейчас я планирую писать что-то типа чата с личной страницей пользователя, сообщениями, добавления фото, аудио, видео альбома, рейтинг и прочее (вообщем ничего серьезного), что поможет более или менее освоить язык и взаимодействовать с mysql, а там уже по мере освоения можно будет переправлять код.
Что значит не смешивать HTML и PHP? например форму делать в одном файле, а обработчик в другом?
Профиль Ответить
01.07.2012 16:58:16 Код регистрации на сайте Сообщение #4
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Да, в разных файлах, но здесь и не получится, поскольку всё равно надо где-то и как-то выводить ошибки. Поэтому всё-таки нужен движок.
Профиль Ответить
01.07.2012 19:21:37 Код регистрации на сайте Сообщение #5
Default

Default

Эксперт

Эксперт

Дата регистрации:
12.06.2012 15:20:27

Сообщений: 102

А у вас есть статьи об этом? хотя бы иметь понятия, что это такое.
Профиль Ответить
01.07.2012 19:25:01 Код регистрации на сайте Сообщение #6
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

http://myrusakov.ru/php-create-engine.html
Профиль Ответить
07.07.2012 20:26:21 Код регистрации на сайте Сообщение #7
ac-40-6.0

ac-40-6.0

Эксперт

Эксперт

Дата регистрации:
29.06.2012 02:02:06

Сообщений: 88

Я не опытный, я только учусь, номне кажется что вот эти строчки:
$query = mysql_query("SELECT id FROM users WHERE login = '$login'";
$result_id = mysql_fetch_assoc($query);

можно заменить всего одной:
$result_id = mysql_insert_id($query);
сразу после запроса
$query = mysql_query ("INSERT INTO users(login, pass, reg_date) VALUES('$login', '$pass', NOW())";
Профиль Ответить
11.07.2012 18:16:17 Код регистрации на сайте Сообщение #8
Default

Default

Эксперт

Эксперт

Дата регистрации:
12.06.2012 15:20:27

Сообщений: 102

А если вы одновременно с кем-то регистрируетесь и он на какую-то тысячную секунду быстрее вас отправил данные, чтобы вставить? тогда получиться что вы вытащите его id
Профиль Ответить
11.07.2012 18:18:12 Код регистрации на сайте Сообщение #9
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Если Вы про сообщение выше, то нет. Он как раз делает всё правильно, поскольку там хранится идентификатор текущего соединения. И выводится последний id после INSERT текущего соединения. То есть если кто-то другой в этот момент добавится, то всё равно всё будет верно. А вот те, кто вытаскивает максимальный id рискуют на это нарваться.
Профиль Ответить
11.07.2012 18:20:59 Код регистрации на сайте Сообщение #10
Default

Default

Эксперт

Эксперт

Дата регистрации:
12.06.2012 15:20:27

Сообщений: 102

Вот я и читал за это, то что не безопасно иногда использовать эту функцию... теперь буду знать, а ac-40-6.0, спасибо
Профиль Ответить