Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР): Частина 1. План побудови ДСР. Реалізація бази даних проекту

  1. Серія контенту:
  2. Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)
  3. Створення бази даних проекту
  4. Малюнок 1.
  5. Малюнок 2.
  6. Бібліотека функцій, що відповідають за виведення інформації
  7. висновки
  8. Ресурси для скачування

Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)

Серія контенту:

Цей контент є частиною # з серії # статей: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР)

Слідкуйте за виходом нових статей цієї серії.

Маючи працездатний сайт (Інтернет-магазин) з деяким числом передплатників (або користувачів) дуже корисно організувати з ними взаємодію у вигляді постійного контакту через систему розсилки інформаційних бюлетенів. Це може бути реклама вашої нової продукції або сповіщення про зниження цін на певні види товарів, - в будь-якому випадку, подібного роду зв'язок повинна бути і потрібно вміти технічно її реалізувати.

В рамках цього циклу статей буде описана реалізація системи інформаційних розсилок, причому для нашої навчальної системи здійснювати розсилку зможе тільки адміністратор проекту. Він буде створювати списки розсилки в автономному режимі, і завантажувати їх в систему в текстовому або HTML форматах. Таким чином, сам процес створення інформаційного наповнення розсилки ніяк не обмежує її автора у виборі використовуваного програмного забезпечення. При цьому, користувачі можуть підписуватися на будь-які списки, представлені на сайті, а також вибрати формат отримання самої інформації - текстовий або HTML. Таким образів, нами будуть порушені теми:

  1. завантаження безлічі файлів;
  2. вкладення довічних файлів в поштові повідомлення і їх кодування;
  3. створення поштових повідомлень у форматі HTML;
  4. управління паролями без участі в цьому процесі користувачів.

Для реалізації поставлених завдань необхідно спроектувати і створити базу даних.

Створення бази даних проекту

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; // Вивести панель заголовка?&gt; <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;? &gt;> <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?

Новости

Все товары для праздника оптом купить
Как сделать правильный выбор в работе, бизнесе и жизни, о котором никогда не придется жалеть. Мы хотим рассказать вам об удивительной и очень простой технике 7 вопросов, которые позволят оценить ситуацию

Пиротехника своими руками в домашних
Самые лучшие полезные самоделки рунета! Как сделать самому, мастер-классы, фото, чертежи, инструкции, книги, видео. Главная САМОДЕЛКИ Дизайнерские

Фольгированные шары с гелием
Для начала давайте разберемся и чего же выполнен фольгированный шар и почему он летает дольше?! Как вы помните, наши латексные шарики достаточно пористые, поэтому их приходится обрабатывать специальным

Как сделать красивую снежинку из бумаги
Красивые бумажные снежинки станут хорошим украшением дома на Новый год. Они создадут в квартире атмосферу белоснежной, зимней сказки. Да и просто занимаясь вырезанием из бумаги снежинок разнообразной

Надувные шарики с гелием с доставкой
На праздники часто бывают востребованы воздушные шарики, надутые гелием. Обычно, их покупают уже готовыми (надутыми) и привозят на праздник. Или, приглашают специалистов, которые приезжают и надувают

Как сделать из бумаги самолет
 1. Самолеты сделанный по первой и второй схеме являются самыми распространенными. Собирается такое оригами своими руками достаточно быстро, несмотря на это самолет летит достаточно далеко за счет свое

Аниматоры на детские праздники в Зеленограде
Уж сколько раз твердили миру…Что готовиться ко дню рождения нужно заранее, а не бегать в предпраздничный день угорелой кошкой. Нельзя впихнуть в 24 часа дела, рассчитанные на недели. К празднику нужно

2400 наименований пиротехники
В последние десятилетия наша страна может похвастаться появлением нескольких десятков отечественных производителей, специализирующихся на выпуске пиротехники. Если вы сомневаетесь, какой фейерверк заказать,