- Серія контенту:
- Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)
- Створення бази даних проекту
- Малюнок 1.
- Малюнок 2.
- Бібліотека функцій, що відповідають за виведення інформації
- висновки
- Ресурси для скачування
Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)
Серія контенту:
Цей контент є частиною # з серії # статей: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Слідкуйте за виходом нових статей цієї серії.
Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)
Слідкуйте за виходом нових статей цієї серії.
Маючи працездатний сайт (Інтернет-магазин) з деяким числом передплатників (або користувачів) дуже корисно організувати з ними взаємодію у вигляді постійного контакту через систему розсилки інформаційних бюлетенів. Це може бути реклама вашої нової продукції або сповіщення про зниження цін на певні види товарів, - в будь-якому випадку, подібного роду зв'язок повинна бути і потрібно вміти технічно її реалізувати.
В рамках цього циклу статей буде описана реалізація системи інформаційних розсилок, причому для нашої навчальної системи здійснювати розсилку зможе тільки адміністратор проекту. Він буде створювати списки розсилки в автономному режимі, і завантажувати їх в систему в текстовому або HTML форматах. Таким чином, сам процес створення інформаційного наповнення розсилки ніяк не обмежує її автора у виборі використовуваного програмного забезпечення. При цьому, користувачі можуть підписуватися на будь-які списки, представлені на сайті, а також вибрати формат отримання самої інформації - текстовий або HTML. Таким образів, нами будуть порушені теми:
- завантаження безлічі файлів;
- вкладення довічних файлів в поштові повідомлення і їх кодування;
- створення поштових повідомлень у форматі HTML;
- управління паролями без участі в цьому процесі користувачів.
Для реалізації поставлених завдань необхідно спроектувати і створити базу даних.
Створення бази даних проекту
SQL-код для реалізації потрібної структури бази представлений нижче по тексту:
create database mlm; use mlm; create table lists (listid int auto_increment not null primary key, listname char (20) not null, blurb varchar (255)); create table subscribers (email char (100) not null primary key, realname char (100) not null, mimetype char (1) not null, password char (40) not null, admin tinyint not null); # Зберігає співвідношення між передплатником і списком create table sub_lists (email char (100) not null, listid int not null); create table mail (mailid int auto_increment not null primary key, email char (100) not null, subject char (100) not null, listid int not null, status char (10) not null, sent datetime, modified timestamp); # Зберігає зображення, що відправляються в складі конкретного повідомлення create table images (mailid int not null, path char (100) not null, mimetype char (100) not null); grant select, insert, update, delete on mlm. * to mlm @ localhost identified by 'password'; insert into subscribers values ( 'admin @ localhost', 'admin', 'H', sha1 ( 'admin'), 1); insert into subscribers values ( '[email protected]', 'alexander,' H ', sha1 (' password '), 0);Традиційно виконати цей код можна як в PHPMyAdmin (див. Рис.1) так і в командному рядку.
Малюнок 1.
Таблиця lists містить поля ідентифікатора списку розсилки (listid) і його найменування (listname). Поле blurb містить опис самого списку розсилки.
Таблиця subscribers зберігає адреси електронної пошти (email) і реальні імена передплатників.
Слідкуйте, щоб кодування для бази даних співпадала з кодуванням при підключенні до неї з скриптів, інакше будуть проблеми при відображенні реальних імен російською мовою в відповідних сторінках сайту (магазину).
Таблиця sublists містить адреси електронної пошти з таблиці subscribers і ідентифікатори списків з таблиці lists.
Таблиця mail містить інформацію про кожного повідомленні електронної пошти, що відправляється в рамках роботи системи в цілому.
Таблиця images використовується для всіх зображень, пов'язаних з повідомленнями в HTML форматі. Можливість зберігати великі картинки на увазі їх місцезнаходження поза базою даних, але в загальній структурі веб-каталогу (див. Рис.2).
Малюнок 2.
Має великий сенс уважно ознайомитися з бібліотекою функцій, яка, загалом, відповідає за формування висновку інформації. У наступних статтях циклу звернення до цієї бібліотеки буде відбуватися багато разів і має сенс мати про неї уявлення заздалегідь. Код функцій, що входять в бібліотеку, добре прокоментований і його вивчення не повинно скласти особливих труднощів.
Бібліотека функцій, що відповідають за виведення інформації
<? Php // Налаштування на екран 600x800 $ table_width = '760'; function do_html_header ($ title = '') {// Виводить HTML-заголовок global $ table_width; // Вивести панель заголовка?> <Html> <head> <title> <? Php echo $ title?> </ Title> <style> h1 {font-family: Arial, Helvetica, sans-serif; font-size: 32; font-weight: bold; color: white; margin-bottom: 0} h2 {margin-bottom: 0} b {font-family: Arial, Helvetica, sans-serif; font-size: 14; font-weight: bold; color: black} th {font-family: Arial, Helvetica, sans-serif; font-size: 18 font-weight: bold; color: white; } Body, li, td, p {font-family: Arial, Helvetica, sans-serif; font-size: 14; margin = 5px} a {color: # 000000} </ style> </ head> <body> <table width = <? php echo $ table_width?> cellspacing = 0 cellpadding = 6 border = 0> <tr> <td bgcolor = "# 5B69A6" width = 73> <img src = "images / pyramid.gif" width = 73 height = 49 alt = "" valign = "middle" /> </ td> <td bgcolor = "# 5B69A6" width = <? php echo $ table_width-73;? >> <h1> <? php echo $ title?> </ h1> </ td> </ tr> </ table> <table width = <? php echo $ table_width ?> cellpadding = 0 cellspacing = 0 border = 0> <tr> <td> <? php} function do_html_footer () {// Виводить завершальні HTML-дескриптори global $ table_width; ?> </ Td> </ tr> </ table> <table width = <? Php echo $ table_width?> Cellspacing = 0 cellpadding = 6 border = 0> <tr> <td bgcolor = "# 5B69A6" align = " right "> <img src =" images / pyramid.gif "width = 73 height = 49 alt =" "valign =" middle "/> </ td> </ tr> </ table> </ body> </ html > <? php} // Виводить гнучкий список елементів і для кожного з них додаткові кнопки // дій. // $ title - заголовок // $ list - масив виведених елементів // - $ list [x] [0] - ідентифікатор елемента // - $ list [x] [1] - ім'я елемента // - $ list [ x] [2] - ім'я батьківського елемента (необов'язкове) // - $ list [x] [3] - ідентифікатор батьківського елемента (необов'язковий) // action1, action2 і action3 - до трьох додаткових дій, для яких // генеруються кнопки function display_items ($ title, $ list, $ action1 = '', $ action2 = '', $ action3 = '') {global $ table_width; echo "<table width = '$ table_width' cellspacing = '0' cellpadding =" 0 "border =" 0 ">"; // Підрахувати кількість дій $ actions = (($ action1! = '') + ($ Action2! = '') + ($ Action3! = '')); echo '<tr> <th colspan = \' '. (1 + $ actions). " 'Bgcolor =' # 5B69A6 '> $ title </ th> </ tr>"; // Підрахувати кількість елементів $ items = sizeof ($ list); if ($ items == 0) echo '<tr> <td colspan = "'. (1 + $ actions). '" align = "center"> Ні елементів для відображення </ td> </ tr>'; else {// Вивести кожен рядок for ($ i = 0; $ items; $ i ++) {if ($ i% 2) // перемикання кольору фону $ bgcolor = " '#ffffff'"; else $ bgcolor = " '#ccccff'"; echo "<tr> <td bgcolor = $ bgcolor width = '". ($ table_width - ($ actions * 149)).' \ '>'; echo $ list [$ i] [1]; if ($ list [$ i] [2]) echo '-'. $ list [$ i] [2]; echo '</ td>'; // Створити кнопки для подання максимум трьох дій в рядку for ($ j = 1; $ j <= 3; $ j ++) {$ var = 'action'. $ J; if ($$ var) {echo "<td bgcolor = $ bgcolor width = '149'>"; // Кнопки view / preview (показати / попередній перегляд) // представляють собою спеціальний випадок, // оскільки вони вказують на деякий файл if ($$ var == 'preview-html' || $$ var == 'view-html '|| $$ var ==' preview-text '|| $$ var ==' view-text ') display_preview_button ($ list [$ i] [3], $ list [$ i] [0], $$ var); else display_button ($$ var, '& id ='. $ list [$ i] [0]); echo '</ td>'; }} Echo "</ tr> \ n"; } Echo '</ table>'; }} // відображає детальну інформацію про список розсилки function display_information ($ listid) {if (! $ Listid) return false; $ Info = load_list_info ($ listid); if ($ info) {echo '<h2>'. pretty ($ info [listname]). '</ h2>'; echo '<p>'. pretty ($ info [blurb]); echo '</ p> <p> Кількість передплатників:'. $ Info [subscribers]; echo '</ p> <p> Кількість повідомлень в архіві:'. $ Info [archive]. '</ P>'; }} // Виводить форму для збору даних про новий обліковий запис або зміни // даних про існуючий обліковий запис function display_account_form ($ email = '', $ realname = '', $ mimetype = '') {if ($ realname) $ title = $ realname; else $ title = 'Нова обліковий запис'; ?> <Center> <form method = post action = "index.php? Action = store-account"> <table bgcolor = '# cccccc' cellpadding = 6 cellspacing = 0 border = 0> <tr> <th colspan = 2 bgcolor = '# 5B69A6'> <? php echo $ title?> </ th> </ tr> <tr> <td> Реальне ім'я: </ td> <td> <input type = "text" name = "realname "maxlength = 100 value = '<? php echo $ realname?>'> </ td> </ tr> <tr> <td> Адреса електронної пошти: </ td> <td> <input type =" text "name = "email" maxlength = 100 value = '<? php echo $ email?>'> </ td> </ tr> <tr> <td> Необхідний формат повідомлень: </ td> <? php echo '<td> <select name = "mimetype"> <option '; if ($ mimetype == 'T') echo 'selected'; echo '> Тільки текст <option'; if ($ mimetype == 'H') echo 'selected'; echo '> HTML </ select> </ td>'; ?> </ Tr> <? Php // Пароль потрібно, тільки якщо користувач не увійшов в систему під своїм // обліковим записом if (! Isset ($ _ SESSION [ 'admin_user']) &&! Isset ($ _ SESSION [ 'normal_user' ])) echo "<tr> <td> Пароль: </ td> <td> <input type = \" password \ "name = \" new_password \ "maxlength = 16 value = ''> </ td> </ tr> "; ?> <Tr> <td colspan = 2 align = "center"> <? Php display_form_button ( 'save-changes'); ?> </ Td> </ form> </ tr> </ table> </ center> <br /> <? Php}Загальний вигляд форми для введення адреси і пароля представлений на рис. 2.
function display_login_form ($ action) {// Виводить форму для запиту адреси електронної пошти та пароля?> <center> <form method = "post" action = "index.php? action = <? php echo $ action?>"> < table bgcolor = '# cccccc' border = 0 cellpadding = 6 cellspacing = 0> <tr> <th colspan = 2 bgcolor = '# 5B69A6'> Вхід в систему </ th> </ tr> <tr> <td> Адреса електронної пошти: </ td> <td> <input type = "text" name = "email"> </ td> </ tr> <tr> <td> Пароль: </ td> <td> <input type = "password" name = "password"> </ td> </ tr> <tr> <td colspan = 2 align = "center"> <? php display_form_button ( 'log-in'); ?> </ Td> </ tr> <tr> </ table> </ form> </ center> <? Php} function display_form_button ($ button) {// Виводить на формі одну з кнопок echo "<center> < input type = 'image' src = 'images /".$ button. ". gif' border = 0"; echo 'width = 149 height = 43'; echo "alt = '" .format_action ($ button). "' /> </a> </ center>"; } Function display_button ($ button, $ extra_parameters = '') {// Виводить одну зі стандартних кнопок у вигляді посилання $ url = "index.php? Action = $ button"; if ($ extra_parameters) $ url. = $ extra_parameters; echo "<center> <a href ='$url'>"; echo "<img src = 'images / $ button.gif' border = 0"; echo 'width = 149 height = 43'; echo "alt = '" .format_action ($ button). "' /> </a> </ center>"; } Function display_preview_button ($ list, $ mail, $ button) {if ($ button == 'view-html' || $ button == 'preview-html') echo "<center> <a href = 'archive / $ list / $ mail / index.html 'target =' _new '> <img src =' images / $ button.gif 'width = 149 height = 43 border = 0 alt =' ".format_action ($ button)." '/ > </a> </ center> \ n "; else echo "<center> <a href ='archive/$list/$mail/text.txt' target ='_new'> <img src = 'images / $ button.gif' width = 149 height = 43 border = 0 alt = 'format_action ($ button)' /> </a> </ center> \ n "; } Function display_toolbar ($ button, $ extra_parameters = '') {// Виводить панель інструментів. // До трьох рядків і до п'яти кнопок в кожному рядку. // Це випадкові парметри і залежать від розмірів // малюнків і ширини екрану. global $ table_width; echo "<table width = $ table_width cellpadding = 0 cellspacing = 0 border = 0>"; for ($ i = 0; $ i <3; $ i ++) {if ($ button [($ i * 5)]) {echo '<tr>'; echo '<td bgcolor = "#cccccc">'; for ($ j = 0; $ j <5; $ j ++) {echo '<td bgcolor = "#cccccc">'; if ($ button [($ i * 5 + $ j)]) display_button ($ button [$ i * 5 + $ j], $ extra_parameters); else display_spacer (); echo '</ td>'; } Echo '</ tr>'; }} Echo '</ table>'; } Function display_mail_form ($ email, $ listid = 0) {// Виводить html-форму для завантаження нового повідомлення global $ table_width; $ List = get_all_lists (); $ Lists = sizeof ($ list); ?> <Table cellpadding = '4' cellspacing = '0' border = "0" width = '<? Php echo $ table_width?>'> <Form enctype = 'multipart / form-data' action = 'upload.php' method = 'post'> <tr> <td bgcolor = "# cccccc"> Список: </ td> <td bgcolor = "# cccccc"> <select name = "list"> <? php for ($ i = 0 ; $ i <$ lists; $ i ++) {echo '<option value ='. $ list [$ i] [0]; if ($ listid == $ list [$ i] [0]) echo 'selected'; echo '>'. $ list [$ i] [1]. "</ option> \ n"; }?> </ Select> </ td> </ tr> <tr> <td bgcolor = "# cccccc"> Тема: </ td> <td bgcolor = "# cccccc"> <input type = "text" name = "subject" value = "<? php echo $ subject?>" size = 60> </ td> </ tr> <tr> <td bgcolor = "# cccccc"> Текстова версія: </ td> <td bgcolor = "# cccccc"> <input type = "file" name = 'userfile [0]' size = 60> </ td> </ tr> <tr> <td bgcolor = "# cccccc"> HTML-версія: < / td> <td bgcolor = "# cccccc"> <input type = "file" name = 'userfile [1]' size = 60> </ td> </ tr> <tr> <td bgcolor = "# cccccc" colspan = "2"> Зображення: (не обов'язкові) <? php $ max_images = 10; for ($ i = 0; $ i <10; $ i ++) {echo "<tr> <td bgcolor = '# cccccc'> Зображення". ($ I + 1). ' </ Td> '; echo "<td bgcolor = '# cccccc'>"; echo "<input type = \" file \ "name = 'userfile [". ($ i + 2). "]' size = '60 '> </ td> </ tr>"; }?> <Tr> <td colspan = '2' bgcolor = "# cccccc" align = 'center'> <input type = "hidden" name = "max_images" value = <? Php echo $ max_images? >> <input type = "hidden" name = "listid" value = <? php echo $ listid? >> <? php display_form_button ( 'upload-files'); ?> </ Td> </ form> </ tr> </ table> <? Php}висновки
У статті описана вступна частина для навчального проекту диспетчера списків розсилки, логіка роботи майбутньої системи і її компонентів. Наведено код для створення бази даних проекту. Детально роз'яснюється його структура та призначення таблиць.
Показана основна частина коду бібліотеки функцій, що відповідає за виведення інформації в проекті. Код добре прокоментований і рекомендований для ознайомлення з метою подальшого звернення до нього в статтях циклу.
Ресурси для скачування
Схожі теми
- Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР). Частина 1 .
- Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР). Частина 2 .
Підпишіть мене на повідомлення до коментарів
Com/developerworks/ru/library/?Php // Налаштування на екран 600x800 $ table_width = '760'; function do_html_header ($ title = '') {// Виводить HTML-заголовок global $ table_width; // Вивести панель заголовка?
Gt; <Html> <head> <title> <?
Php echo $ title?
Php echo $ table_width?
Gif" width = 73 height = 49 alt = "" valign = "middle" /> </ td> <td bgcolor = "# 5B69A6" width = <?
Php echo $ table_width-73;?
Gt;> <h1> <?
Php echo $ title?