Задание 28.
28.php:
<?php
session_start();
require_once('db_login.php');
$user = $_SERVER["PHP_AUTH_USER"];
$password = $_SERVER["PHP_AUTH_PW"];
if (empty($_SESSION['user_id'])) {
//если переменные существуют
if (isset($user) && isset($password)) {
//Подключаемся к базе данных
$connection = mysql_connect($db_host, $user, $password);
if (!$connection) {
die ("Невозможно подключиться к базе данных: " . mysql_error());
}
//Выбираем нужную базу
$db_select = mysql_select_db($db_database);
if (!$db_select) {
die ("Невозможно выбрать БД: " . mysql_error());
}
if (get_magic_quotes_gpc()) {
$user = stripslashes($user);
$password = stripslashes($password);
}
$user = mysql_real_escape_string($user);
$password = mysql_real_escape_string($password);
//Получаем данные пользователя
$query = "SELECT * FROM users WHERE username='" . $user . "' AND password='" . md5($password) . "' LIMIT 1";
$result = mysql_query($query);
$result_row = mysql_fetch_array($result, MYSQL_BOTH);
//Проверяем результат выполнения mysql_fetch_row()
if ($result_row == FALSE) {
//Если не получили данные пользователя - просим перелогиниться
header('WWW-Authenticate: Basic realm="Member Area"');
} else {
//Иначе выводим сообщение
echo "Подключение осуществлено<br/><br/>";
echo "Имя: $result_row[1]<br/>";
echo "Фамилия: $result_row[2]<br/>";
echo "Имя пользователя: $result_row[3]<br/>";
echo "Хэш-значение пароля: $result_row[4]<br/>";
$_SESSION['user_id'] = $result_row['user_id'];
$_SESSION['username'] = $result_row['username'];
}
} else {
//иначе диалог аутентификации
header('WWW-Authenticate: Basic realm="Member Area"');
}
} else {
echo "Вы посетили страницу под логином " . $_SESSION['username'] . "<br/>";
}
echo "<form action='28.1.php'><input type='submit' value='Прервать сессию'></form><br/>";
?>
28.1.php:
<?php
//подключаем файл 28.1
require_once('28.php');
//уничтожаем сессию
session_destroy();
//выводим переменную
echo "Переменная " . $_SESSION['username'] . " еще доступна.<br/>";
//уничтожаем переменную
unset ($_SESSION['username']);
//проверяем, что переменная уничтожена
if (is_null($_SESSION['username'])) {
echo "Переменные сеанса теперь недоступны.";
}
?>
Задание 29.
<?php
class Controller {
private $error;
private $result;
function __construct() {
$this->error = false;
$this->result = false;
}
function processData() {
$this->userRequest();
if ($this->error)
View::displayError($this->error);
else
if ($this->result)
View::displayResults($this->result);
else
View::displayDefault();
}
function userRequest() {
// данные отправлены
if (isset($_POST['send'])) {
$this->validate();
if (!$this->error) {
// основные вычисления
$model = new Model();
$model->calculate($_POST['passw']);
$result = $model->getData();
// проверка на ошибки в самой модели
if (!is_array($result))
$this->error = $result;
else
$this->result = $result;
}
}
}
function validate() {
if (empty($_POST['passw']))
$this->error = 'Не введено слово!';
else
if (strlen(strval($_POST['passw'])) < 3)
$this->error = 'Слишком слабый пароль!';
}
}
class View {
static function displayDefault() {
echo "<form method='POST' action=''>";
echo "<p>Введите пароль: ";
echo "<input type='text' name='passw' value=''> ";
echo "<input type='submit' name='send' value='Отправить'>";
echo "</form>";
}
static function displayError($error) {
echo "<p><b>Ошибка:</b> {$error}";
View::displayDefault();
}
static function displayResults($results) {
echo "<p><b>Результаты:</b>";
echo "<p>Ваш пароль <b>".$results[0]."</b> по защищенности <i>".$results[1]."</i>";
echo "<p><a href='".$_SERVER['REQUEST_URI']."'>Проанализировать ещё пароль</a>";
}
}
class Model {
private $data;
function __construct() {
$this->data = false;
}
function calculate($passw) {
$this->data[] = $passw;
$len = strlen($passw);
if ($len == 3)
$this->data[] = 'Слишком слабый пароль';
else
if (($len > 3) && ($len < 6))
$this->data[] = 'Достаточно защищенный пароль';
else
$this->data[] = 'Хорошо защищенный пароль';
}
function getData() {
if ($this->data)
return $this->data;
else
return 'Анализ не произведен!';
}
}
$controller = new Controller();
$controller->processData();
?>
Задание 30.
<?php
//Выводим строку, обработанную функцией htmlentities()
echo "Вы искали " . htmlentities($_GET['query']);
?>
Задание 31.
<?php
//Задаем класс Product
class Product {
public $name;
public $price;
public $description;
function Product() {
$this->name = "Shirt";
$this->price = 1500;
$this->description = array(
"size" => array("S", "M", "L", "XL"),
"color" => array("Red", "Green", "Blue")
);
}
}
//создаем объект $item класса Product
$item = new Product();
//Выводим поля объекта $item
echo "<br/>".$item->name;
echo "<br/>".$item->price;
echo "<br/>".$item->description['size'][1];
echo "<br/>".$item->description['color'][1];
//Кодируем объект $item в json
$sameItem = json_encode($item);
//Декодируем из json`a в массив $sameItem
$sameItem = json_decode($sameItem, TRUE);
//Выводим элементы массива $sameItem
echo "<br/>".$sameItem['name'];
echo "<br/>".$sameItem['price'];
echo "<br/>".$sameItem['description']['size'][1];
echo "<br/>".$sameItem['description']['color'][1];
?>
db_login.php
<?php
$db_host = "localhost";
$db_database = "client";
$db_username = "mikalash";
$db_password = "mysecretword";
?>
client.sql
-- phpMyAdmin SQL Dump
-- version 3.5.4
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1:3306
-- Время создания: Дек 11 2012 г., 21:18
-- Версия сервера: 5.5.28-log
-- Версия PHP: 5.4.9
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;zz
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `client`
--
-- --------------------------------------------------------
--
-- Структура таблицы `authors`
--
CREATE TABLE IF NOT EXISTS `authors` (
`author_id` int(11) NOT NULL AUTO_INCREMENT,
`title_id` int(11) NOT NULL,
`author` varchar(125) DEFAULT NULL,
PRIMARY KEY (`author_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура таблицы `books`
--
CREATE TABLE IF NOT EXISTS `books` (
`title_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(150) DEFAULT NULL,
`pages` int(11) DEFAULT NULL,
PRIMARY KEY (`title_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
`username` varchar(45) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`user_id`, `first_name`, `last_name`, `username`, `password`) VALUES
(1, 'Михаил', 'Калашников', 'mikalash', '6fb63889e3759de527c6bc4922f416b2');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;