<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

Создание движка на MVC. Создаем авторизацию.

Создание движка на MVC. Создаем авторизацию.

Всем привет, и мы продолжаем создавать наш движок на MVC, и сегодня мы создадим авторизацию.

Наши единички вывелись, все хорошо.

Откроем index.php логина в папке view.

<h1>Login</h1>

<form action="login/run" method="post">
  <label>Login</label><input type="text" name="login"><br>
  <label>Password</label><input type="text" name="password"><br>
  <label></label><input type="submit">
</form>

Action задан на метод run. Перейдем в контроллер login.php и добавим его

public function run() {
  $this->model->run();
}

В модели логина уберем вывод единичек. Создадим метод run().

public function run() {
  $sth = $this->db->prepare("SELECT id FROM users WHERE login = :login AND password = MD5(:password)");
  $sth->execute(array(
   ':login' => $_POST['login'],
   ':password' => $_POST['password']
  ));

  $data = $sth->fetchAll();
  $count = $sth = rowCount();
  if($count > 0) {
   Session::init();
   Session::set('loggedIn', true);
   header('Location: ../dashboard');
  } else {
   header('Location: ../login');
  }
}

Здесь мы используем PDO, и я опять же хочу напомнить, кто его не знает, смотрите на сайте статьи по этой теме.

Теперь в нашей базе mvc нам нужно создать таблицу users с 3 полями: id, login, password.

login и password будут типом varchar, login длиной 25, password длиной 32 символа, там будет хэш.

id будет primary key и autoincrement.

Добавим тестового пользователя с логином jesse и паролем - хэшированным логином.

В конструкторе модели логина вызовем родительский конструктор.

public function __construct() {   parent::__construct(); }

Сейчас создадим новый файл dashboard.php в папке controllers, куда скопируем все из контроллера login кроме метода run.

class Dashboard extends Controller {
  // ...
  public function index() {
   $this-view->render('dashboard/index');
  }
}

В папке views создадим папку dashboard, где создадим файл index.php с таким содержанием.

Dashboard... Login in only...

В папке libs создадим файл Session.php

class Session {
  public static function init() {
   @session_start();
  }

  public static function set($key, $value) {
   $_SESSION[$key] = $value;
  }

  public static function get($key) {
   if(isset($_SESSION[$key]))
   return $_SESSION[$key];
  }

  public static function destroy() {
   // unset($_SESSION);
   session_destroy();
  }
}

Добавьте подключение этого файла в index.php после подключения базы данных.

require 'libs/Session.php';

Вызовем в конструкторе класса Dashboard метод init() класса Session.

public function __construct() {
  parent::__construct();
  Session::init();
  $logged = Session::get('loggedIn');
  if($logged == false) {
   Session::destroy();
   header('Location: ../login');
   exit();
  }
}

Также создадим метод logout() в классе dashboard.

public function logout() {
  Session::destroy();
  header('Location: ../login');
  exit();
}

Теперь перейдем в header.php и создадим там ссылку на выход в меню.

<?php if(Session::get('loggedIn') == true):?>
  <a href="<?php echo URL; ?>dashboard/logout">Logout</a>
<?php else: ?>
  <a href="<?php echo URL; ?>login">Login</a>
<?php endif; ?>

Теперь добавим вызов метода init() перед блоком с id=header

<?php Session::init(); ?>

Все что осталось, определить константы в файле database.php.

define('DB_TYPE', 'mysql');
define('DB_HOST', 'localhost');
define('DB_NAME', 'mvc');
define('DB_USER', 'root');
define('DB_PASS', '');

Теперь перейдите в файл Database.php и там измените подключение, подставив вместо значений константы, которые мы только что определили.

Итак, могу вас поздравить, мы только что сделали авторизацию. Спасибо за внимание и удачи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (12):

dima9595 dima9595 07.08.2014 23:53:17

Михаил, отредактируйте код пожалуйста, а то в одну строчку всё...

Ответить

php_programmer php_programmer 07.08.2014 23:58:46

Всё исправлено!

Ответить

ScarEngineer ScarEngineer 08.08.2014 17:39:01

Можете написать статью про добавление комментариев на сайт через аякс?

Ответить

php_programmer php_programmer 09.08.2014 00:01:46

А что в этом сложного? Просто отправляйте запросы через JavaScript на сервер, где добавляйте комментарий. Если не понятно, то напишу.

Ответить

php_programmer php_programmer 09.08.2014 23:19:01

Завтра будет

Ответить

Sujimoshi Sujimoshi 12.08.2014 02:49:34

Сложного вроде бы ничего, вопрос только, куда пихать сам JavaScript, насколько я понял то во View (хотя это вроде как работа с сервером, так что это задача модели и контроллера), и подключать в хедер. Может статью не про коментарии, а просто доработать форму входа, сделать проверку логина на аяксе.

Ответить

Sujimoshi Sujimoshi 12.08.2014 16:42:26

Ну и конечно хотелось бы наглядно посмотреть, как к этому всему прикручивать шаблонизатор и .tpl файлы, как я понимаю шаблонизатор должен быть частью модели, или как отдельная библиотека

Ответить

dignity dignity 02.12.2014 09:07:12

"$this-view->render('dashboard/index');" замените на "$this->view->render('dashboard/index');"... Также замените "$count = $sth = rowCount();" на "$count = $sth->rowCount();".

Ответить

vaxa vaxa 05.12.2014 20:16:34

Михаил а как сделать чтобы после авторизации .закрытия и открытия браузера(снова) авторизация пользователя сохранялась если можн ото подробный код .Спасибо

Ответить

kisenko.yura kisenko.yura 01.04.2015 14:11:45

Михаил, подскажите из-за чего данная ошибка вылетает после авторизации: Это главный контроллерЭто вид Fatal error: Call to a member function prepare() on null in C:\OpenServer\domains\mvc\models\login_model.php on line 7 Все делал как Вы описывали!

Ответить

Ljubin Ljubin 06.09.2015 19:26:32

Хотелось бы, чтобы последний абзац выглядел так - ...Теперь перейдите в файл Database.php и там измените подключение к БД в конструкторе, подставив вместо имеющихся значений, константы которые мы только что определили. Вот так - public function __construct() { parent::__construct(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); } Ибо сходу c кавычками и точечками, можна "дупля не отбить".))

Ответить

cheponya cheponya 26.10.2015 14:34:35

Warning: Missing argument 2 for Session::get(), called in H:\home\pdo.learn\www\controllers\dashboard.php on line 9 and defined in H:\home\pdo.learn\www\libs\session.php on line 9 постоянно висит А при logout'е орет что заголовок уже отправлен Warning: Cannot modify header information - headers already sent by (output started at H:\home\pdo.learn\www\libs\session.php:9) in H:\home\pdo.learn\www\controllers\dashboard.php on line 18

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.