Публикация на тему
компьютерного проектирования
Анотация
-
-
Автор
Михалькевич Александр Викторович
Наименование PHP базовый
Автор А.В.Михалькевич
Специальность компьютерного проектирования,
Анотация
-
Anotation in English
-
Ключевые слова php
Количество символов 8781
Для Windows - наилучшим решением является
OpenServer, т.к. уже содержит несколько версий PHP, базы данных и СУБД для баз данных, на выбор, а также два сервера Apache и Nginx
Git - система контроля версий
github.com - удаленный git-репозиторий
среда разработки - на выбор, это может быть PHPStorm, Netbeanse, Aton или Notepad++.
Макет главной страницы - это файл index.html, содержащий подключения стилей и js-скриптов.
Первоначальная структура макета:
media/css/style.css
/js
index.html
Данная структура моожет быть расширена использованием css-фрэймворка Bootstrap
media/css/style.css
/js
/bootstrap
index.html
Готовая структура bootstrap-шаблона доступна по ссылке
https://github.com/mikhalkevich/bootstrap4
1. Шаблон главной страницы, файл index.html переименовываем в index.php
2. В папку с проектом добавляем папку templates, содержащую файлы top.php, bottom.php
Структура проекта:
/media/css
/templates/top.php
/bottom.php
index.php
3. Содержимое файла index.php
require_once('templates/top.php'); //меняющаяся часть шаблона require_once('templates/bottom.php')
Файлы top.php и bottom.php содержат неизменную часть шаблона. Изначально, это в основном html-код.
В поекте создадим папку /config, с пока еще единственным файлом config.php. Листинг файла:
error_reporting(E_ALL & ~E_NOTICE); $dblocation = "localhost"; $dbname = "wwwwwwww"; $dbuser = "root"; $dbpasswd = ""; $link = mysqli_connect($dblocation, $dbuser, $dbpasswd, $dbname); if (!$link){ exit('Error connect database'); }
Подключение конфигурационного файла осуществляется в базовом шаблоне, в файле templates/top.php:
require_once('config/config.php')
Теперь, в любом исполняемом файле возможны запросы в базу данных через переменную подключения $link.
if(isset($_GET['url'])){ $url = $_GET['url']; }else{ $url = 'index'; } $query = "SELECT * FROM main_texts WHERE url = '$url'"; $tab = mysqli_query($link, $query); if(!$tab){ exit($query); } $arr = mysqli_fetch_array($tab);
Для реализации регистрации пользователей нам потребуется таблица users: id(AI), name(string), email(string), password(string), status(string), lastvisit(datetime), datereg(date)
PHP-файл, принимающий данные регистрационной формы со следующими post-данными: name, email, pass
require_once 'templates/top.php'; if (!empty($_POST)){ /** * Проверяем пароли */ $error = []; if ($_POST['pass'] != $_POST['pass-repeat']){ $error[] = 'Не совпадают пароли'; } /** * Проверяем есть ли такой пользователь в БД */ $query = "SELECT * FROM users WHERE email = '".$_POST['email']."'"; $usr = mysqli_query($link, $query); /** * Если пользователя нет, то отключаемся. Иначе, добавляем ошибку */ if(!$usr) { exit($query); } $check = @mysqli_fetch_array($usr); #print_r($check); if($check['id']) { $error[] = "Пользователь с таким именем уже существует"; } if (empty($error)){ $query = "INSERT INTO users VALUES (NULL, '{$_POST['name']}', '{$_POST['email']}', '{$_POST['pass']}', 'default', NOW(), NOW() )"; $result = mysqli_query($link, $query); if (!$result){ exit('Ошибка'); }else{ echo 'Пользователь добавлен'; } }else{ foreach ($error as $item) { echo $item . '
'; } } }
Авторизация пользователей осуществляется в отдельном файле login.php, который содержит авторизационную форму с полями email и pass, а также код, обрабатывающий форму:
require_once 'templates/top.php'; if (!empty($_POST)){ $query = "SELECT * FROM users WHERE email='{$_POST['email']}' AND password='{$_POST['pass']}' AND status='default' LIMIT 1"; $result = mysqli_query($link, $query); if (!$result){ echo 'Ошибка'; } $user = mysqli_fetch_array($result); if ($user['id']){ $_SESSION['user_id'] = $user['id']; $_SESSION['user_name'] = $user['name']; // перенаправление }else{ echo 'Не удалось войти'; } }
Использование сессионной переменной, файл top.php:
session_start(); require_once('config/config.php'); $profile_user = []; $query = "SELECT * FROM main_texts"; $tab = mysqli_query($link, $query); if (!$tab) { exit('error query'); } if ($_SESSION['user_id']) { $query = "SELECT * FROM profiles WHERE user_id = " . $_SESSION['user_id']; $usr = mysqli_query($link, $query); if (!$usr) { exit($query); } $profile_user = @mysqli_fetch_array($usr); }
После авторизации для пользователя создается сессионная переменная
$_SESSION['user_id']
Тогда проверка авторизации пользователя выглядит следующим образом:
if($_SESSION['user_id']){ // пользователь авторизован }else{ // пользователь не автоирзован }
Сохранение данных в таблицу articles с привязкой к текущему пользователю:
$query = "INSERT INTO `articles` (`id`, `title`, `slug`, `body`, `lang`, `user_id`, `putdate`) VALUES (Null, '{$_POST['title']}', '{$_POST['slug']}', '{$_POST['body']}', 'ru', '{$_SESSION['user_id']}', NOW())"; $result = mysqli_query($link, $query);
Вывод записей текущего пользователя по $_SESSION['user_id']
$query = "SELECT * FROM articles WHERE user_id = '".$_SESSION['user_id']."'"; $usr = mysqli_query($link, $query); if(!$usr) { exit($query); } $check = @mysqli_fetch_array($usr); #print_r($check);
Выход пользователя реализован в файле logout.php
session_start(); session_destroy(); header('location:index.php');