Октябрь 22, 2005

Триада PHP & MySQL & gd library - Сервис счетчиков обращений (Часть 2)

Обратите внимание на индекс CounterIndex. Поля, входящие в индекс, должны иметь атрибут NOT NULL, размер ключей (читай полей, входящих в индекс) не должен превышать 256 символов.

И последнее - порядок полей в индексе должен совпадать с порядком в секции Where SQL запроса. Если же Вы планируете небольшую базу и колчество записей невелико, то индекс можно и не создавать.

Для работы с базой нам потребуется всего три запроса:

• Создать новую запись в базе при первом обращении к счетчику:
Insert Into Counters (SiteID,PageID,CountValue) Values ('$locSiteID','$locPageID',1)

• Найти значение счетчика:
select * from counters where SiteID='$locSiteID' AND PageID='$locPageID'

• Увеличить значение счетчика на еденицу:
Update Counters Set CountValue = CountValue+1 Where SiteID = '$locSiteID' AND PageID = '$locPageID'

А теперь самое время вспомнить про префикс "_" значений get-параметров. На самом деле все очень просто. Посмотрите на структуру таблицы. Поля SiteID, PageID помечены аттрибутом NOT NULL, и префикс "_" позволяет пропустить один или даже оба параметра в get-запросе:

// Нечувствительные к регистру get-параметры
$locSiteID = "_";
$locPageID = "_";
while (list($key, $val) = each($HTTP_GET_VARS))
{
if (strcmp(strtoupper($key),"SITEID")==0) $locSiteID = "_" . $val;
if (strcmp(strtoupper($key),"PAGEID")==0) $locPageID = "_" . $val;
}

// Соеденяемся с базой Counters и запрашиваем значение счетчика
mysql_connect("localhost:3306","root","");
if (!($result = mysql_db_query("Counters","select * from counters where SiteID='$locSiteID' AND PageID='$locPageID'")))
{

// База Counters не доступна - катапультируемся
echo "Cannot query database Counters\n";
echo "Query Error " . mysql_errno() . " " . mysql_error();
exit;
}

$FirstVisit=1;
while($row = mysql_fetch_object($result))
{
$FirstVisit=0;
$locCountValue = $row->CountValue;
}
mysql_free_result($result);

if ($FirstVisit==1)
{ // Первое обращение. Создаем запись в базе
$result = mysql_db_query("Counters","Insert Into Counters (SiteID,PageID,CountValue) Values ('$locSiteID','$locPageID',1)");
$locCountValue = 1;
}
else
{ // Увеличиваем значение счетчика на еденицу
$locCountValue = $locCountValue + 1;
$result = mysql_db_query("Counters","Update Counters Set CountValue = CountValue+1 Where SiteID = '$locSiteID' AND PageID = '$locPageID'");
}

продолжение следует...

Автор:

Источник: Гойда Владимир - Web Programmer

Ваш комментарий

Обсудить на форуме?

Подумайте, прежде чем высказать своё мнение. Постарайтесь сделать свой комментарий полезным для других. Не используйте ненормативную лексику. Пользователи, пишущие "от нечего делать" бессмысленные наборы символов, будут блокироваться навсегда.