Ваш первый Сайт С использованием РНР-скриптов

СЧЕТЧИК ПОСЕТИТЕЛЕЙ С ИСПОЛЬЗОВАНИЕМ БАЗЫ ДАННЫХ MYSQL

Все скрипты в этой книге написаны без использования баз данных. Одна­ко, для построения своего сайта, вы можете использовать для удобства реля­ционные базы данных, например MySQL. Литературы по базам данных пре­достаточно, и вы, при желании, можете ее изучить. В этой же книге я лишь кратко ознакомлю с базами данных и приведу пример их использования для нашего счетчика посещений.

Сначала рассмотрим основные понятия:

1. Реляционная база данных - совокупность связанных таблиц, где хранятся данные.

2. Таблица состоит из полей (field), которые имеют имя и тип. Тип поля за­висит от того, какие данные в этом поле записаны. Существуют следую­щие типы полей: целые, вещественные, строковые, бинарные, дата и вре­мя, перечисления и множества.

3. Запись {record) - это набор полей в таблице, содержащих связанную ме­жду собой информацию. Например, если в таблице имеется 3 поля стро­кового типа, содержащие соответственно имя, фамилию и отчество, то совокупность содержимого этих трех полей и будет называться записью.

4. Запрос (query) - оператор, который выбирает записи и поля из одной или

Нескольких таблиц согласно заданному условию.

Для написания запросов к базам данных разработан язык SQL (структу­рированный язык запросов). Рассмотрим несколько операторов этого языка. Создать таблицу в базе данных можно при помощи оператора CREATE. Соз­дадим, например, таблицу, с названием Schetchik для нашего счетчика посе­щений. Пусть таблица будет содержать 3 поля с именами vcego (поле будет содержать общее число посещений страницы), segodna (будет содержать чис­ло посещений за текущие сутки) и chislo (будет содержать текущую дату). Тогда создание нашей таблицы на языке SQL будет выглядеть так: CREA ТЕ TABLE Schetchik (

Vcego int NOT NULL, segodna int NOT NULL, chislo data NOT NULL, )

После имени каждого поля стоит тип поля. Первые два поля (общее чис­ло посещений и число лосещений за текущие сутки) будут содержать цело­численный тип данных, а именно, тип int, который может содержать числа в диапазоне от -2 147 483 648 до 2' 147 483 647. Думаю, что нам этого доста­точно. Третье поле (текущая дата) имеет тип data и содержит дату в формате ГГГГ-ММ-ДД (год, месяц, число). Модификатор NOT NULL указывает, что поле должно быть определено, т. е. оно не может быть пустым.

Добавить данные в созданную таблицу можно при помощи оператора INSERT. Заполним первые два поля единицей, а в третье поле впишем теку­щую дату:

INSERT INTO Shetchik

VALUES (1,1, TO DA TE(15/09/08, 'YY/MM/DD'));

В списке VALUES перечисляются значения полей таблицы. Дату в третье поле записываем в формате год/месяц/число.

Если мы хотим изменить запись в таблице, то нужно использовать опера­тор UPDATE. Синтаксис этого оператора выглядит так: UPDA ТЕ Имя таблицы SET Поле 1 =значеиие1, 11оле2=3начение2... WHERE Условие;

После SET пишется имя поля и присваиваемое ему значение (через знак равенства). Условие WHERE - какое значение того или иного поля изменить. В нашем простом случае в каждом поле по одному значению, поэтому усло­вие WHERE здесь не нужно. Вообще приведенные выше строчки можно за­писать и в одну строку:

UPDA ТЕ Имя таблицы SET Поле1 =значениеI, Поле2=3начение2... WHERE условие;

Перейдем, наконец, к практике.

Практически на любом уважающем себя хостинге клиенту предоставля­ется возможность создания и управления базами данных. Для создания базы данных предоставляется достаточно удобный интерфейс. Например, на хос­тинге, где рассположен мой сайт (majordomo. ru), можно легко создать базу данных (кнопка «Создать»). На рис. 4.3 видно, как я создал на хостинге базу данных с именем b 19147 baza.

Убавление MvSOL

*

РерсиярНР

Создать базу данным

Ы9147 Jbaza | 1ШШШ

*

Crontab

Ш£

Данные для подключения из скриптов Perl и РНР

DocumentRoot

Архи^ия. СЭМТЭ

DB host - 78.108.81.240; DB user - U19147 ;

DB name - указывайте нужное название базы ;

Пароль для mysql-польэователя можно поменять в форме ниже.

3#ке? нчить работу

Интерфейс для доступа к базам данных PhpMyAdmin (в новом окне ) ht; tp: //rr^il. maiordorno. rq/rny sql^dmin9

Рис. 4.3

Запомните или запишите потом данные (DB host, DB user) для подключе­ния базы данных из скрипта РНР, который мы потом составим. Пароль соз­даете сами.

Вообще создать базу данных можно и используя интерфейс PhpMyAdmin, Нажав на соответствующую ссылку (рис. 4.3). Вас попросят ввести имя (DB user) пользователя (в нашем случае это ul9147) и пароль, который вы должны были создать. Только после этого вы попадете на PhpMyAdmin (рис. 4.4).

После создания базы данных нужно потом ее выбрать из ниспадающего спи­ска слева. Затем надо создать таблицу в этой базе данных. Создадим таблицу с именем Schetchik. Количество полей сделаем, как договорились, 3 (рис. 4.5).

После создания таблицы нужно указать тип и имена полей (рис. 4.6). Пусть в первом поле у нас будет находиться число, определяющее общее число посетителей страницы сайта. Это поле с именем vcego. Тип поля зада - даем INT (целые числа). Далее задается длина числа (максимальная - 11), значение (можно ничего не ставить), значение по умолчанию поставьте 1. Аналогично для второго поля с именем segodna (там, если помните, будет храниться число посещений за текущие сутки) задайте те же значения. Третье поле с именем chislo будет содержать дату. Тип поля задаем DATE, а значе­нием по умолчанию зададим любую дату в формате ГГГГ-ММ-ДД, например 2008-12-23.

ElMySQL-кодировка UTF-8 Unicode (utfS)

ЕЯСопоставление соединения с MySQL! Utt8_uniCOde_CI ®

Г£>Новая база данных ®

Ы9 47?inter ]: Сравнение *

| Создать |

ФПокгк-ать состояние

Й)Пох»ать системные переменные ©

^Процессы @

ИЗКодировки и сравнения

(^Хранилища

©Базы данных

#>Эксп>рт

Бдза;

► Размер шрифта [l00% У ^Документация по phpMy^ ^Официальная страница р

► [ChangeLog] [CVS] [Lists]

(Базы данных)

Пожалуйста, выберите базу данных

^Импсрт

ЙВыйти m системы ®

Рис. 4.4


Gl Сервер: 192.168.0.52:3306 ► © База данных: Ы9147_Ьага ШСтрухгф* SSSQL /'Искать IP Запрос по примеру Gb Экспорт IP Импорт Операции

База данных

B19147_baza (0)

В БД не обнаружено таблиц

- Щ Созда ть новр^ таблицу в БД b!9147jbaza-—

Яш ISche Chik Количество полей; 13

Ы*И7

ВБДяе обнаружено таблиц.

Рис. 4.5

(Ш Сервер:

192.168,0.52:3306 ► iP База

Данных: Ь19147_Ьага ► ИШ таблш

Пеле

Jvcego

Тип©

J - INT "Щ

Дшшы^шчения*1 Q

1 segodna

...... J |JNT.........

|

L—J L=J li=J L_2_J L_LI

______ База данных

:b19147_baza (0) "™y|

I chislo

I

........ 1 (DATE............. v!

Комментарий к таблице:

1

Storage Engine: ©

Ь19147_Ьага (0)

J! MylSAM v]

В БД не обнаружено таблиц

Рис. 4.6

Далее нажимаете на кнопку «Создать» (текст на кнопке может быть раз­личным, например «Пошел» или «Вперед»). Все, поля созданы (рис. 4.7).

Нишщ

FllOSsop Й? Структура «В SQL /-Искать Вставить ®Экспорт ©Импорт J^Qnepau

Таблица Schetchik была создана

Feasa данных

;b19M7^taza(iy Ь19147_Ьа»(1)

Щ) Schetchik

CREATE TABLE 'SchsiclaK < NOTNULL 's « di NOTNULL, ih NOTNULL ) ENGINE - MY1SAM,

Коле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно

□ vcego mt(l 1) Нет ПИ J?

□ segodaa Ю*(И) ПВ J1 П chisln date Нет ПИ J T Отметить все / Снять отметку со всех С отмеченными: ЕЕ Jf X 2S Е Ш

Версия для печати tP& Предлагаемая структура таблицы ® ^ Добавить ;1 | поле(я) 0В конец таблицы ОВ начало таблицы ОПосле vcego v' | Пошел |

Рис. 4.7

После того, как поля созданы, можно выходить из интерфейса PhpMyAd­min. На других хостингах интерфейс для создания и управления баз данных может быть другим. Если вы не сможете самостоятельно создать на хостинге (где будет находиться создаваемый вами сайт) базу данных и таблицу, то по­просите помощи по E-mail у хостера. На любом хостинге есть возможность написать письмо с вопросом в службу технической поддержки.

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

Подключиться к серверу баз данных в PHP-сценарии можно при помощи функции mysql_connect($Server,$User,$Password), где SServer - имя сервера базы данных, $User - имя пользователя базы данных, $Password - пароль. Имя сервера, имя пользователя (DB host и DB user) вы получите у своего хос­тера при создании базы данных (см. рис. 4.3). Пароль указываете тот, кото­рый вы создали при создании самой базы данных.

После подключения к серверу базы данных, нужно выбрать нужную нам базу данных. Делается это при помощи функции mysql_select_db($name), где $пате - имя базы данных, созданной вами на сервере.

После того как мы подключились к серверу и выбрали базу данных, нужно сделать запрос к этой базе данных. Делает это функция mysqlquery ("Текст за­проса"). Эта функция возвращает идентификатор выполнения запроса. На­пример:

$m=mysql_query("select * from Schetchik");

В данном случае функция mysql_query() возвратит набор, состоящий из записей в таблице Schetchik. Идентификатор этого набора будет находить­ся в переменной $т. Используя данный идентификатор, можно получить нужный элемент из набора записей при помощи функции mysql_result($m,

$str, $stl), где $str - номер строки или записи в таблице (в нашем случае у нас всего одна запись), $stl - номер столбца или поля таблицы (у нас есть 3 поля). Например, код: $v=mysql_result($m, 0, 2); echo $w;

Выведет в окно браузера содержимое третьего поля таблицы Schetchik (нуме­рация полей и записей начинается с нуля). У нас там, если помните, записана дата.

Получить нужный элемент из набора $т позволяет и функция Mvsql_fetch_array($m). Данная функция возвращает строку в виде массива, ключами которого будуг имена полей. Например, следующий код: $k=mysqlJ'etch array ($т); echo $k[segodna];

Выведет в браузер содержимое поля с именем segodna. У нас там записана единица.

Давайте теперь изменим данные в нашей таблице. Сделать это достаточ­но просто:

$day=date("Y-m-d"); - в переменной $day У нас будет текущая дата. Mysql_que}y("UPDATE Schetchik SETvcego= '2segodna= '2 chislo= '$day' ");

Мы делаем запрос к текущей базе данных при помощи функции Mysql_query() и вносим изменения в таблицу при помощи оператора UPDATE.

Составим теперь код счетчика с использованием базы данных (лис­тинг 4.8). Счетчик будет показывать общее число посетителей и число посе­тителей за текущие сутки. Создайте PHP-страницу под названием, например ChetchikMySql.php.

Листинг 4.8 (файл ChetchikMySqLphp). <?php

If ($rc=mysql_connect(M78.108.81.240",Mul9147M,"parol"))

{

$day=date("Y-m-d"); mysql_select_db("bl9147_baza"); $tabl="Schetchik";

$mar=mysql_query("SELECT * FROM Stabl"); Sk —mysql_fetch_array($mar); $k|vcego]=$k[vcego]+l; if($day!==$k[chisloJ)


Строганов Л. С. Ваш первый сайт с использованием РНР-скриптов {

$k[chislo]=$day; $k[segodnal=l;

}

Else {

$k{segodna]=$k[segodna]+l; }

Mysql_query("UPDATE Schetchik SET vcego='$k[vcegol segodna='$k[segodna] chislo='$k[chislo]'");

Echo "<table border=2 bordercolor=orangextr> <td colspan=2 align=center>riocemaeMocTb</tdx/tr> <tr><td align=center>Bcero</tdxtd align=center>CeroflHH</tdx/tr> <trxtd align=center>$k[vcego] </td>

<td align=center>$k[segodna]</tdx/trx/table>"; }

Else {

Echo "Error!"; }

?>

Разберем некоторые строчки кода: < ?php - начало PHP-кода;

If ($rc=mysql_connect("78.108.81.240", "и19147", "parol")) - при помощи опера­тора mysql_connect соединяемся с сервером, указывая DB host, DB user и па­роль. Этому соединению присваиваем идентификатор $гс. При помощи усло­вия //проверяем, произошло ли соединение, т. е. определена ли переменная $гс. Если соединение произошло успешно, выполнится весь код между фи­гурными скобками под номером 1;

Ц

$day=date("Y-m-d"); - переменой $day присваиваем текущую дату в формате Y-m-d (четыре цифры года, две цифры месяца и две цифры числа месяца);

Mysql_select_db("bl9147_baza"); - выбираем созданную нами базу данных; $tabl = "Schetchik"; - переменной $tabl присваиваем название созданной нами таблицы;

$mar=mysql_query("SELECT * FROM $tabl"); - делаем запрос к выбранной базе данных. Получаем набор, состоящий из записей в таблице Schetchik. Идентификатор этого набора будет находиться в переменной $таг $k=mvsqlJetch_array($mar); - функция mysqlJetcharray, как указывалось выше, возвращает строку в виде массива $к, ключами которого будут имена полей;

$k[vcego]=$k[vcego]+l; - в элементе массива $k[vcego] содержится общее число посетителей. Увеличиваем его на единицу;

If($day!==$k[chisloJ) - если текущая дата не совпадает с той датой, которая указана в поле chislo базы данных (дата уже изменилась), то выполнится код между фигурными скобками под номером 2. Дату в поле chislo, если помни­те, мы записали в том же формате, что и потом в переменной $day (четыре цифры года, две цифры месяца и две цифры числа месяца); 2{

$k[chislo]=$day; - присваиваем элементу массива $k[chislo] текущую дату, чтобы потом обновить содержимое поле chislo в базе данных;

$k[segodna]=l; - элементу массива $k[segodna] присваиваем единицу (если наступили новые сутки, значение числа посетителей текущих суток сбрасы­вается опять на единицу); 2}

Else - если текущая дата совпадает с той датой, которая указана в поле chislo Базы данных (дата еще не изменилась), то выполнится строка между фигур­ными скобками под номером 3.

А

$k[segodna]=$k[segodna]+l; - элемент массива $k[segodna] просто увеличи­ваем на единицу;

3}

Mysql_query("UPDA ТЕ Schetchik SET vcego-$k[vcego]',

Segodna='$k[segodna] chislo='$k[chislo],n); - мы опять делаем запрос к те­кущей базе данных при помощи функции mysql quetyQ и вносим изменения в таблицу при помощи оператора UPDATE. Обновляем запись в полях таб­лицы. В поле vcego вносится обновленное значение общего числа посетите­лей, в поле segodna - значение числа посетителей за текущие сутки, в поле Chislo обновляем дату;

Echo "<table border=2 bordercolor=orange><tr>

<td colspan=2 align=center>Посещаемость</td> </tr>

<tr> < td align=center>Всего </td> < td align=center> Сегодня </td> </tr>

<tr><td align =center> $k[vcego] </td>

<td align=center>$k[segodnaJ</td></tr></table>"; - заносим значения пере­менных $k[vcego] и $k[segodna] в небольшую таблицу и выводим эту табли­цу при помощи оператора echo в окно браузера;

1} - окончание кода, выполняющегося при удачном соединении с сервером;

Else - если соединения с сервером базы данных не произошло, то выводится сообщение об ошибке;

4{

Echo "Error!";

4}

?> - конец РНР-кода.

Ну, вот и все. Как видите, использование базы данных позволяет значи­тельно сократить код счетчика. Здесь нам не понадобились текстовые файлы. Однако скрипт работает быстрее без использования базы данных (для соеди­нения с сервером требуется некоторое время). В общем, выбирать вам. Ко­нечно, для счетчика посещений базу данных можно и не использовать (про­сто использовать текстовые файлы), но для более сложных проектов базы данных могут быть просто необходимы.

Вы, конечно, заметили что я не использовал подсчет уникальных посети­телей (посетителей с различным IP). Попробуйте сделать это самостоятельно. Для этого создайте в базе данных вторую таблицу с единственным полем строкового типа, где будут сохраняться IP посетителей. Для поиска IP посе­тителя (посещал ли страницу данный посетитель с данным IP) можно приме­нить функцию mysqlJetcharray(). При помощи данной функции можно пе­ребрать все записи в таблице. Если таблица Schetchik содержит 3 поля и только одну запись, то таблица с IP-адресами будет иметь только одно поле и много записей (одна запись - один IP-адрес). При каждом вызове в скрипте функции mysqlJetch_ array() она выбирает следующую запись. Используя операторы цикла, можно, таким образом, перебрать все записи в таблице. Общее число записей в таблице можно определить при помощи функции Mysql_num_rows(). Допустим, вы назовете таблицу с IP-адресами adress, А единственное поле этой таблицы будет называться iprow. Приведу кусок кода, который ищет IP-адрес в базе данных: $tabl= "adress ";

$mar2=mysql query ("SELECT * FROM$tabl"); $ipnum=mysq In Umro ws ($mar2); $ip=$JSER VER["REMOTE_ADDR "]; $s=0;

For ($i=0; $i<$ipnum; $i++)

(

X

$ipadr=mysql Jetch_ array($mar2);

If (Sipadr[iprow]==$ip) $s=$s+I; }

If ($s=0) @mysqI_query("INSERTINTO $tabl VALUES('$ip')");

В этом коде в переменной Sipnum находится общее число записей, т. е. общее число IP-адресов. В переменной $ipadr[iprow] находится выбран­ный из таблицы IP-адрес и сравнивается с IP-адресом пришедшего посетите­ля. Если IP-адрес не найден, т. е. посетитель посещает вашу страницу впер­вые, переменная $s останется равной нулю. В этом случае при помощи опе­ратора INSERT мы вносим новую запись с новым IP в таблицу. Значок @ ставится для подавления ошибок при записи в таблицу.

Вот и все, что я хотел вам сказать о базах данных. Сделал я это очень кратко. Если хотите знать о базах данных больше, обратитесь к соответст­вующей литературе.

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.