Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dipomny_proekt МОЯ.doc
Скачиваний:
25
Добавлен:
22.02.2016
Размер:
2.15 Mб
Скачать

3.2 Приклад застосування CodeIgniter для задачі аутентифікації користувача

Розглянемо приклад аутентифікації користувача з використанням його ім‘я та паролю, які зберігаються у базі даних. Узагальнений алгоритм розробки даної програми полягає у наступному.

1. Підготовка бази даних: створення таблиці, занесення даних, налаштування конфігурації проекту.

2. Реалізація контролеру проекту з функціями виведення форми уведення даних про користувача та виведення результату аутентифікації.

3. Створення моделі з функцією перевірки імені/паролю користувача.

4. Створення подання сторінки форми уведення даних про користувача та сторінки результату аутентифікації.

Підготовка бази даних

Підготовка структур бази даних складається зі створення бази даних (команда 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>

Рисунок 3.7. HTML-шаблон та візуальна форма сторінки успішної аутентифікації (файл afterloginOK.php)

На рисунку 3.7 міститься фрагмент мовою PHP <?=$uname?>, яка вказує, що необхідно вставити значення змінної $uname, яка була передана з контролера ($data[„uname‟]).

<!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>

<р>Користувач: <?=$uname?> </р>

<р>Дата/час спроби: <?=$dt?> </р>

</body>

</html>

Рисунок 3.8. HTML-шаблон та візуальна форма сторінки неуспішної аутентифікації (файл afterloginBAD.php)

Аналогічно файлу afterloginOK.php на рисунку 3.8 проілюстровано HTML-шаблон із фрагментами PHP виведення змінних з іменем користувача та поточного часу, значення яких встановлено у контролері додатку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]