- Серія контенту:
- Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка поштової служби з веб-інтерфейсом
- 1. Введення
- Малюнок 1.
- Створення нового облікового запису
- Зміна існуючого облікового запису
- Як вибрати обліковий запис користувача
- висновки
- Ресурси для скачування
Реальні веб-проекти на PHP і MySQL. Розробка поштової служби з веб-інтерфейсом
Серія контенту:
Цей контент є частиною # з серії # статей: Реальні веб-проекти на PHP і MySQL. Розробка поштової служби з веб-інтерфейсом
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Слідкуйте за виходом нових статей цієї серії.
Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка поштової служби з веб-інтерфейсом
Слідкуйте за виходом нових статей цієї серії.
1. Введення
У попередніх статтях багаторазово описувалися питання настройки і запуску в експлуатацію найрізноманітніших поштових служб, - таких як sendmail, postfix, exim, Communigate, qmail, що використовують в якості платформи найширший спектр сучасних Linux- і BSD-систем. В даний час, у міру розвитку Всесвітньої Павутини все частіше виникає питання про актуальність користуватися послугами електронної пошти, заснованої на веб.
В попередніх частинах циклу статей були розглянуті питання побудови поштової системи з веб-інтерфейсом, створення бази даних під навчальний проект і огляду загальної бібліотеки функцій для вирішення завдань обробки пошти. Крім того, ми розібрали головний керуючий сценарій, а також реалізацію входу і виходу користувачів системи. У четвертій статті будуть розглянуті питання реалізації механізмів створення користувачів системи і маніпулювання їх обліковими записами.
Перед початком роботи в системі користувач повинен налаштувати одну або кілька облікових записів електронної пошти. Після того, як буде здійснено натискання на кнопку Account Setup (початок настройки облікового запису) змінна action керуючого сценарію отримує значення account-setup і при цьому відбувається повторний виклик головного керуючого сценарію index.php. У браузері це виглядає наступним чином: рис. 1.
Малюнок 1.
Робота головного сценарію на етапі налаштування облікових записів
На цьому етапі роботи сценарію змінна action визначає іншу поведінку роботи сценарію. Тема створюється з відмінностями від інших режимів, але основні зміни при цьому знаходяться в тілі самої сторінки. В цьому випадку викликається функція display_account_setup ($ auth_user), код якої наводиться нижче по тексту:
function display_account_setup ($ auth_user) {// Виводить форму для визначення нового облікового запису display_account_form ($ auth_user); $ List = get_accounts ($ auth_user); $ Accounts = sizeof ($ list); // Показати всі збережені облікові записи foreach ($ list as $ key => $ account) {// Для кожного облікового запису вивести форму для подання // детальної інформації. // Зверніть увагу, що ми відправляємо паролі всіх облікових записів // в вигляді простого HTML-коду. Це не найкраща ідея. display_account_form ($ auth_user, $ account [ 'accountid'], $ account [ 'server'], $ account [ 'remoteuser'], $ account [ 'remotepassword'], $ account [ 'type'], $ account [ 'port ']); }}При виклику функція виводить порожню форму для додавання нового облікового запису, нижче якої йдуть редаговані форми, що містять дані всіх, хто має місце облікових записів даного користувача в системі. Саме функція display_account_form () виводить форму, яка показана на рис.1. Функція використовується двома способами: якщо її викликати без передачі параметрів, то відобразиться порожня форма, а при виклику з повним набором параметрів відображається існуюча обліковий запис. Код функції наведено нижче по тексту:
function display_account_form ($ auth_user, $ accountid = 0, $ server = '', $ remoteuser = '', $ remotepassword = '', $ type = 'IMAP', $ port = 143) {// Портом POP3 за замовчуванням є 110 , портом IMAP за замовчуванням - 143 // Виводить одну форму для параметрів облікового запису if ($ server) $ title = $ server; else $ title = 'Нова обліковий запис'; ?> <Center> <form method = post action = "index.php? Action = store-settings"> <table bgcolor = '# cccccc' cellpadding = 6 cellspacing = 0 border = 0> <tr> <th colspan = 2 bgcolor = '# ff6600'> <? php echo $ title;?> </ th> </ tr> <tr> <td> Ім'я сервера: </ td> <td> <input type = "text" name = " server "maxlength = 100 value = '<? php echo $ server;?>'> </ td> </ tr> <tr> <td> Номер порту: </ td> <td> <input type =" text " name = "port" maxlength = 5 value = '<? php echo $ port; ?> '> </ Td> </ tr> <tr> <td> Тип сервера: </ td> <? Php echo' <td> <select name = "type"> <option '; if ($ type == IMAP) echo 'selected'; echo '> IMAP <option'; if ($ type == POP3) echo 'selected'; echo '> POP3 </ select> </ td>'; ?> </ Tr> <tr> <td> Ім'я користувача: </ td> <td> <input type = "text" name = "remoteuser" value = '<? Php echo $ remoteuser; ?> '> </ Td> </ tr> <tr> <td> Пароль: </ td> <td> <input type = "password" name = "remotepassword" value =' <? Php echo $ remotepassword; ?> '> </ Td> </ tr> <input type = "hidden" name = "account" value = <? Php echo $ accountid; ? >> <tr> <? Php if ($ accountid> 0) {echo '<td align = center>'; display_form_button ( 'save-changes'); echo '</ td>'; echo '</ form>'; echo '<form action = "index.php? action = delete-account" method = "post">'; echo "<input type = \" hidden \ "name = \" account \ "value = $ accountid>"; echo '<td align = center>'; display_form_button ( 'delete-account'); echo '</ td>'; echo '</ form>'; echo '</ tr>'; } Else {echo '<td colspan = 2 align = "center">'; display_form_button ( 'save-changes'); echo '</ td> </ form>'; }?> </ Tr> </ table> </ center> <br /> <? Php}Для вилучення існуючих облікових записів застосовується функція function get_accounts ($ auth_user), код якої наводиться нижче:
function get_accounts ($ auth_user) {$ list = array (); if ($ conn = db_connect ()) {$ query = "select * from accounts where username = '$ auth_user'"; $ Result = $ conn-> query ($ query); if ($ result) {while ($ settings = $ result-> fetch_assoc ()) array_push ($ list, $ settings); } Else return false; } Return $ list; }Ця функція підключається до бази даних, з якої витягує всі облікові записи, існуючі для певного користувача, і повертає їх у сценарій у вигляді масиву.
Створення нового облікового запису
При заповненні користувачем форми для облікового запису і виконання збереження введених змін (шляхом натискання кнопки Save Changes) активізується дія події store-settings.
Функція store_account_settings ($ auth_user, $ settings) зберігає введені дані для нового облікового запису в базі даних. Її код приведений нижче по тексту:
function store_account_settings ($ auth_user, $ settings) {if (! filled_out ($ settings)) {echo 'Все поля повинні бути заповнені. Будь ласка, спробуйте. <br /> <br /> '; return false; } Else {if ($ settings [ 'account']> 0) $ query = "update accounts set server = '$ settings [server]', port = $ settings [port], type = '$ settings [type]', remoteuser = '$ settings [remoteuser]', remotepassword = '$ settings [remotepassword]' where accountid = $ settings [account] and username = '$ auth_user' "; else $ query = "insert into accounts values ( '$ auth_user', '$ settings [server]', $ settings [port], '$ settings [type]', '$ settings [remoteuser]', '$ settings [remotepassword ] ', NULL) "; if ($ conn-> db_connect ()) {$ result = $ conn-> query ($ query); if ($ query) return true; else return false; } Else {echo 'Неможливо зберегти зміни. <br /> <br /> <br /> <br /> <br /> <br />'; return false; }}}Основна робота цієї функції полягає в реалізації двох опцій - введення нового облікового запису та оновлення вже існуючої. Вона виконує збереження даних нового облікового запису та здійснює повернення до етапу виведення ділянки основної сторінки в головному сценарії index.php. Потім також виконується функція display_account_setup ($ auth_user) для виведення списку даних по облікового запису користувача.
Зміна існуючого облікового запису
Щоб видалити обліковий запис:
Щоб видалити обліковий запис користувача активується при натисканні на кнопку Delete Account, при цьому активується подія delete-account і викликається функція delete_account ($ auth_user, $ accountid):
function delete_account ($ auth_user, $ accountid) {// Видаляє одну обліковий запис даного користувача з бази даних $ query = "delete from accounts where accountid = '$ accountid' and username = '$ auth_user'"; if ($ conn = db_connect ()) {$ result = $ conn-> query ($ query); } Return $ result; }Видалення облікових записів необхідно виконувати до обробки заголовка, так як саме всередині нього надано вибрати обліковий запис для використання. Цей список повинен бути оновлений для коректного використання.
Після того, як ця функція закінчить свою роботу відбувається повернення до сценарію index.php, а саме у його розділу, пов'язаного з формуванням тіла сторінки.
Як вибрати обліковий запис користувача
Після настройки користувачем своїх облікових записів з'являється можливість підключення до сервера з використанням цих облікових записів і початку роботи з поштовими повідомленнями. Для читання пошти повинна бути активована обліковий запис шляхом її вибору з числа наявних. Поточний вибір зберігається у змінній сеансу $ selected_account. При цьому, якщо користувач зареєстрував в системі єдину обліковий запис, то вона буде автоматично обрана при вході в систему. Функція number_of_accounts ($ auth_user) служить якраз для виявлення випадків зв'язку з одним користувачем декількох облікових записів. Код цієї функції представлений нижче по тексту:
function number_of_accounts ($ auth_user) {// Отримує кількість облікових записів, які відносяться до даного // користувачеві $ query = "select count (*) from accounts where username = '$ auth_user'"; if ($ conn = db_connect ()) {$ result = $ conn-> query ($ query); if ($ result) {$ row = $ result-> fetch_array (); return $ row [0]; }} Return 0; }Функція get_account_list ($ auth_user) витягує тільки імена облікових записів. Якщо користувач зареєстрував кілька облікових записів, то буде потрібно використовувати тільки одну з них для початку роботи. В цьому випадку заголовки будуть містити список <select> з перерахуванням інших доступних облікових записів. При виборі будь-якої їх них буде автоматично відображено поштову скриньку з його вмістом. Код функції наведено нижче по тексту:
function get_account_list ($ auth_user) {// Отримує масив ідентифікаторів облікових записів, які відносяться до // даному користувачеві $ query = "select accountid from accounts where username = '$ auth_user'"; $ List = array (); if ($ conn = db_connect ()) {$ result = $ conn-> query ($ query); $ Num = $ result-> num_rows; for ($ i = 0; $ i <$ num; $ i ++) {$ row = $ result-> fetch_array (); array_push ($ list, $ row [0]); }} Return $ list; }Ця опція <select> генерується в рамках функції do_html_header ($ auth_user, $ title = '', $ selected_account). Код функції do_html_header ... наводиться нижче по тексту:
function do_html_header ($ auth_user, $ title = '', $ selected_account) {// Виводить HTML-заголовок, включаючи крутий логотип :) global $ table_width; // Виводить область заголовка?> <Html> <head> <title> <? Php echo $ title; ?> </ Title> <style> h1 {font-family: 'Comic Sans MS ", sans-serif; font-size: 32; font-weight: bold; color: black; margin-bottom: 0} b {font-family: 'Arial', sans-serif; font-size: 13; font-weight: bold; color: black} th {font-family: 'Comic Sans MS ", sans-serif; font-size: 18 font-weight: bold; color: black; } Body, li, td {font-family: Arial, Helvetica, sans-serif; font-size: 12; margin = 5px} a {color: # 000000} </ style> </ head> <body> <table width = <? php echo $ table_width; ?> Cellspacing = 0 cellpadding = 3 bgcolor = "# ff6600" border = 0> <tr bgcolor = "# ff6600"> <td bgcolor = "# ff6600" width = 103> <img src = "images / warm-mail. gif "width = 103 height = 45 alt =" "valign =" middle "/> </ td> <td bgcolor =" # ff6600 "width = <? php echo ($ table_width-110);? >> <h1> <? php echo $ title;?> </ h1> </ td> <? php // Включати кнопку вибору облікового запису, тільки якщо користувач має їх кілька if (number_of_accounts ($ auth_user)> 1) {echo '<form target = "index.php? action = open-mailbox" method = "post"> '; echo '<td bgcolor = "# ff6600" align = "right" valign = "middle">'; display_account_select ($ auth_user, $ selected_account); echo '</ td>'; echo '</ form>'; }?> </ Tr> </ table> <table width = <? Php echo $ table_width;?> Cellpadding = 0 cellspacing = 0 border = 0> <tr> <td> <? Php}Залежно від облікових записів поточного користувача функція display_account_select генерує HTML код, що виводить сам елемент <select>. Код функції наведено нижче по тексту:
function display_account_select ($ auth_user, $ selected_account) {// Виводить список, що випадає для вибору користувачем облікового запису $ list = get_account_list ($ auth_user); $ Accounts = sizeof ($ list); if ($ accounts> 1) {echo '<select onchange = window.location = this.options [selectedIndex] .value name = account>'; if ($ selected_account == '') echo '<option value = 0 selected> Виберіть обліковий запис </a>'; for ($ i = 0; $ i <$ accounts; $ i ++) {$ account = get_account_settings ($ auth_user, $ list [$ i]); echo "<option value = 'index.php? action = select-account & account =". $ list [$ i]. "'"; if ($ list [$ i] == $ selected_account) echo 'selected'; echo '>'. $ account [ 'server']. '</ option>'; } Echo '</ select>'; }}Функція display_account_select ($ auth_user, $ selected_account) витягує і відображає список доступних облікових записів. Крім цього, вона викликає при необхідності розглянуту раніше функцію get_account_list ($ auth_user). В результаті вибору однієї з опцій списку <select> активізується подія select_account.
висновки
У четвертій статті циклу, детально розглянуті питання загальної структури створюваної поштової системи з веб-інтерфейсом і порядку її функціонування. Наведено і описані фрагменти коду головного керуючого сценарію системи електронної пошти з веб-інтерфейсом, що відповідають за організацію входу і виходу з системи. Розглянуто функції виведення HTML-форми для додавання нових облікових записів користувачів, заголовка сторінки, що виводиться при налаштуванні облікового запису, функції, що відповідають за витяг наявних облікових записів з бази даних проекту, створити новий обліковий запис користувача, вибору з числа наявних і їх зміни.
Оглядово розглянуто логічний порядок роботи частин сценарію, показано для чого і як вони функціонують, що є джерелом ініціалізації тих чи інших подій в роботі. Наведено знімки екрану, що пояснюють роботу сценаріїв і окремих ділянок коду.
В наступній статті буде детально розглядатися реалізація механізму, що дозволяє переглядати вміст поштової скриньки і здійснювати читання поштових повідомлень і їх видалення при необхідності.
Ресурси для скачування
Схожі теми
Підпишіть мене на повідомлення до коментарів
Com/developerworks/ru/library/?Php?
Action = store-settings"> <table bgcolor = '# cccccc' cellpadding = 6 cellspacing = 0 border = 0> <tr> <th colspan = 2 bgcolor = '# ff6600'> <?
Php echo $ title;?
Gt; </ th> </ tr> <tr> <td> Ім'я сервера: </ td> <td> <input type = "text" name = " server "maxlength = 100 value = '<?
Php echo $ server;?
Gt;'> </ td> </ tr> <tr> <td> Номер порту: </ td> <td> <input type =" text " name = "port" maxlength = 5 value = '<?
Php echo $ port; ?
Gt; '> </ Td> </ tr> <tr> <td> Тип сервера: </ td> <?