[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Система Совет дня.Часть 1

NAS, Webscript.ru

Основная идея такой системы состоит в том, что имеется возможность "зготовить" советы впрок. Т.е. совсем не обязательно каждый день тратить время на пополнение базы информации. Код позволяет показывать пользователям только те советы, которые уже "вышли в свет".

При реализации использованы: PHP v3.14 и mySQL v3.21.29.

Для реализации этой идеи нам необходима только одна таблица, которая содержит следующие поля:

Поле

Тип

Описание

startdate date Дата "выхода в свет"
title varchar(50) Название
text text Текст совета

Проиндексировать данную таблицу лучше всего по полю startdate, так как все выборки будут происходить именно по этому полю. Индексирование позволяет оптимизировать работу базы данных при выборках по индексному полю.

Данная таблица создается следующими инструкциями SQL:

CONNECT; # соединение с mysql на localhost
USE 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 | -Єшыш Є¤ур <PRE> т 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>




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4399 сегодня - 1

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4295 сегодня - 1

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

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

Кол. просмотров: общее - 4108 сегодня - 1

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4155 сегодня - 1

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4142 сегодня - 2



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects