Октябрь 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