Підготовка бази даних
Підготовка структур бази даних складається зі створення бази даних (команда create database userdb), вибору бази даних (команда use userdb), створення таблиці users із полями id, uname та upwd), а також внесення рядка даних у таблицю (команда insert into). Приклад виконання наведених команд зображено на рисунку 3.3.
C:\xampp\mysql\bin>mysql -u root -p Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Vour MySQL connection id is 2
Server version: 5.0.51b-community-log MySQL Community Edition (GPL)
Type 'help;' or ’\h' for help. Type '\c' to clear the buffer.
mysql> create database userdb;
Query OK, 1 row affected (0.05 sec)
mysql> use userdb;
Database changed
mysql> create table users (id integer auto_increment, uname varchar(20), upwd ua rchar(20), primary key (id));
Query OK, O rows affected (0.01 sec)
mysql>insert into users(uname,upwd) values ('userl',‘ pwd1');
Query OK, 1 row affected (0.03 sec)
mysql> select * from users;
| id | uname | upwd |
| 1 | userl | pwd1 |
1 row in set (0.0O sec)
mysql>
Рисунок 3.3. Протокол команд підготовки бази даних
Реалізація контролера проекту
Як відзначалось вище, контролер виконує функцію управління ходом обробки запиту від користувача. В прикладі необхідно реалізувати два метода класу контролера: виведення форми уведення ім‘я користувача та його паролю, а також вікна результату аутентифікації. Програмний код контролера показано на рисунку 3.4. Клас контролера містить два відповідних методи: index() та login_result(). Перший метод викликає подання login для виведення форми. Другий метод більш складний: відбувається завантаження об‘єкта взаємодії з базою даних та об‘єкта моделі usermodel. Після цього викликається у об‘єкті моделі метод login, який порівнює передані у якості параметрів дані про користувача з вмістом бази даних. Якщо порівняння виконано успішно, формується масив $data для передачі у подання та викликається обробка подання afterloginOK. Інакше – у масив $data записується поточний час і ім‘я користувача.
<? php if (!defined(•BASEPATH')) exit('No direct script access allowed’)
class User extends CI_Controller {
function__construct()
{
parent:: construct();
}
function index()
{
$this->load->view('login');
}
function login_result()
{
$this->load->database();
$this->load->model('usernodel');
if ($this->usernodel->login($this->input->post("name"), $this->input->post("pwd")))
{
$data[’unane']=$this->input->post("nane");
$this->load->view('afterloginOK',$data);
}
else
{
$data['unane']=$this->input->post("nane"); $data['dt']=date('H:i:s');
$this->load->view ('afterloginBAD',$data);
}
}
}
Рисунок 3.4. Програмний код контролера User
Створення моделі проекту
Моделі традиційно відповідають за взаємодію із базою даних, тому відповідний клас прикладу містить функцію порівняння даних про користувача із вмістом бази даних. Слід зауважити, що CodeIgniter виконує під‘єднання автоматично під час завантаження об‘єкта database, тому код класу моделі містить лише команди доступу до таблиць бази даних (див. рисунку 3.5).
<?php
class Usernodel extends CI_Model {
function__construct()
{
// Call the Model constructor parent::construct();
}
function login($unane, $upud)
{
$sql - "SELECT count(*) cnt FROM users WHERE unane - ? AND upwd - ? ";
$q - $this->db->query($sql, array($unane, $upud));
$row - $q->row();
return ($row->cnt > 0);
}
}
Рисунок 3.5. Реалізація класу моделі проекту
Зазначимо, що оскільки CodeIgniter є об‘єктно-орієнтованою бібліотекою, то результати, що повертаються з бази даних, мають вигляд об‘єктів класу запиту (у прикладі: $row->cnt ), де члени класу відповідають полям, визначеним у запиті select.
Створення подання даних
Проект містить 3 форми: уведення даних про користувача, успішної та неуспішної аутентифікації користувача. Код відповідних файлів містить HTML-шаблон та фрагменту PHP. Вміст відповідних файлів наведено на рисунках 3.6-3.8.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<titlе>АутентиФікація</titlе>
<style>
*{font-family:Arial}
p{nargin:5px 0 0 0}
</style>
</head>
<body>
<h3>АутентиФікація</h3>
<forn action="/index.php/user/login_result" method="post">
<p> Ім'я: </p><p> <input type="text" name="name" value=""> </p>
<p> Пароль:</p><p> <input type="password" name="pud" value=""> </p>
<p><input type="submit" value="Перевірити"/>
</form>
</body>
</html>
Рисунок 3.6. HTML-шаблон та візуальна форма сторінки уведення даних про користувача
<!DOCTVPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<titlе> </titlе>
<style>
*{font-family: Arial}
p{margin:5px 0 0 0}
</style>
</head>
<body>
<h3>АутентиФікація успішна</h3>
<p> Користувач: <?=$uname?> </p>
</body>
</html>