Система “Рада дня”. Частина 1, PHP, Програмування, статті

NAS, Webscript.ru

Основна ідея такої системи полягає в тому, що є можливість “зготовіть”поради про запас. Тобто зовсім не обов’язково щодня витрачати час напоповнення бази інформації. Код дозволяє показувати користувачам тількиті поради, які вже “вийшли у світ”.

При реалізації використані: PHP v3.14 і mySQL v3.21.29.

Для реалізації цієї ідеї нам необхідна тільки одна таблиця, якамістить наступні поля:

Поле

Тип

Опис

startdate date Дата “виходу у світ”
title varchar(50) Назва
text text Текст ради

Проіндексувати цю таблицю краще всього по полю startdate,так як все вибірки будуть відбуватися саме по цьому полю. Індексуваннядозволяє оптимізувати роботу бази даних при вибірках по індексномуполю.

Дана таблиця створюється наступними інструкціями SQL:

CONNECT; # з'єднання з mysql на localhostUSE TEST; # вибір бази даних# Далі створення таблиці в базі TEST
CREATE TABLE tipoad (
startdate date DEFAULT '0000-00-00' NOT NULL,
title varchar(50) NOT NULL,
text text NOT NULL,
KEY startdate (startdate),
UNIQUE startdate_2 (startdate)
);

Команди ці можна ввести в утиліті mysql.exe, що входить до складу дистрибутиваmySQL, але я рекомендую використовувати для адміністрування бази mySQL пакет
phpMyAdmin, Якийдозволяє управляти базами з вікна браузера в зручній формі.

Для того, щоб почати працювати з таблицею з PHP необхідно встановитиз’єднання з базою. Робиться це за допомогою функції mysql_connect(string
[hostname] [:port] , string [username] , string [password] ). Всіпараметри є необов’язковими. Зазвичай, значення параметра hostnameвказує на “localhost”, а ім’я користувача та пароль видаються адміністраторомсервера. Крім того адміністратор може виділити вам окрему базу. Їїназва нам знадобитися, так як наступним кроком ми повинні вибрати цюбазу для роботи командою mysql_select_db(string database_name,
int [link_identifier]). Функція mysql_connect()в разі успішного з’єднання повертає ціле число, яке єідентифікатором з’єднання. Саме його можна підставити у функцію mysql_select_db()в якості параметра link_identifier. Якщо вивикористовуєте лише одну базу на одному хості, то вам, абсолютно не обов’язкововикористовувати цей параметр. його можна опустити.

Припустимо, що вам виділена база з ім’ям test(Вона, практично, завжди присутній і не вимагає завдання імені користувачаі пароля, але використовувати її для роботи не рекомендується). Ім’я користувача:
john, Пароль: dark. Тодікод ініціалізації роботи з базою даних буде виглядати так:

if (mysql_connect("localhost", "john", "dark")) {
if (!mysql_select_db("test")) {
echo "<B>Error selecting db!!!</B>";
exit();
}
} else {
echo "<B>Error connecting!!!</B>";
exit();
}

Тут наведено код з використанням перевірок на правильність з’єднанняі вибору бази. Обидві розглянуті функції повертають falseв разі будь-якої помилки. Більш детальну інформацію про помилку можнаотримати з функції mysql_error().

Далі припустимо, що у нас в таблиці вже є які-небудь дані.Занести їх можна, скориставшись згаданим вище пакетом phpMyAdmin.

Робота з SQL-базами даних будується на понятті SQL-запит (далі “запит”).Наприклад, щоб отримати всі дані з таблиці tipoad,використовується запит SELECT * FROM tipoad. Якщови введете цей запит в командному рядку програми mysql.exe, то повинніпобачити щось схоже на:

+------------+----------------------------------+------+
| startdate  | title                            | text |
+------------+----------------------------------+------+| 2000-01-27 |-Єшиш Є ¤ ур 
 т NN. | || 2000-01-28 | + Є'Е_Єшх фю'єьхеЄр т еютюь ю'ех. | || 2000-01-29 |-хе ° юте_х Їши № ЄЕ_. | || 2000-01-30 | + тхЄ Їюер т Netscape | || 2000-01-31 |-рь'р ер ее_и'рї т IE. | |
+------------+----------------------------------+------+
5 rows in set (0.00 sec)

Тут я спеціально опустив значення поля text,так як вони займають багато місця. А “каша” з символів в поле titleвикликана тим, що дані зберігаються в кодуванні Windows 1251, а виведення їхвідбувається в програмі, що працює в 866 кодової таблиці.

Для того, щоб в скрипті отримати дані, що видаються запитом використовуєтьсядві функції: mysql_query() і mysql_fetch_array().У першу необхідно передати два параметри string query,
int [link_identifier]. Другий параметр в нашому випадку можна опустити,так як у нас все одне з’єднання. Ця функція повертає зміннуцілого типу. Цю зміну можна використовувати, як індикатор про помилку.Наприклад так:

$result = mysql_query("SELECT * FROM tipoad");
if ($result) {
...
} else {
echo "<B>Error: ".mysql_error();
exit();
}

Далі ми повинні отримати дані в масиві. Це робиться функцією mysql_fetch_array().Тут обмежимося одним параметром $result, Заданимпри виконанні функції mysql_query():

$tip = mysql_fetch_array($result);

Цей код “дістає” рядок з результатів виконання запиту і поміщаєдані в асоціативний масив $tip. Тобто для того,щоб звернутися до поля title, Можна використовуватикод $tip[“title”]. Після цього внутрішній покажчику змінній $result зсувається на наступний рядок.Якщо оброблена останній рядок, то $tip приймаєзначення false. Тобто для того, щоб обробитивсі рядки результату, ми можемо використовувати слудующим код:

while ($tip = mysql_fetch_array($result)) {
echo $tip["title"]."<BR>";
}

Але нам необхідно отримати тільки один ряд даних. Для цього ми модифікуємозапит таким чином: SELECT * FROM tipoad WHERE startdate
= NOW(). Найпростіше зрозуміти це можна, перевівши дослівно на російськумова: вибрати значення всіх полів (*) з таблиці tipoad,у яких значення startdate дорівнює значенню функції NOW().Функція NOW() відповідає поточній даті, встановленоїв системі.

Тепер зберемо весь код разом:

if (mysql_connect("loclhost", "john", "dark")) {
if (!mysql_select_db("test")) {
echo "<B>Error selecting db!!!</B>";
exit();
}
} else {
echo "<B>Error connecting!!!</B>";
exit();
}
$sql = "SELECT * FROM tipoad WHERE startdate = NOW()";
$result = mysql_query(sql);
if ($result) {
...
} else {
echo "<B>Error: ".mysql_error();
exit();
}
$tip = mysql_fetch_array($result);

Тепер в масиві $tip ми маємо всі поля, відповідніпорадою поточного дня. І ми можемо використовувати їх для виведення в документ.Наприклад, так:

<H1><?php echo $tip["title"]; ?></H1>
<P><?php echo $tip["text"]; ?></P>

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*