Зовнішній вигляд лічильника

Ми ще не уявляємо як буде виглядати все інше але вже можемо
обробити get-параметри

$locSiteID = $HTTP_GET_VARS["SiteID"];
$locPageID = $HTTP_GET_VARS["PageID"];

Тут слід зупинитися на важливому моменті. Справа в тому, що за правилами php
імена змінних і get-параметрів чутливі до регістру. Це означає, що якщо
людина напише посилання і get-параметри прописними літерами, то наш скрипт не
зможе розпізнати такий запит. Тому я пропоную не такий витончений, але дуже
надійний спосіб інтерпреціі get-параметрів. Складається він ось у чому: последоватьним
перебором всіх get-параметрів спробуємо знайти цікаві для нас SiteID і PageID.
Причому при пошуку використовуємо нечувствительное до регістра порівняння рядків:

$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;
}

Тут префікс "_" необхідний для MySQL-двигуна. Далі встановимо базу лічильників
Counters

mysqladmin create Counters

і створимо в ній таблицю Counters. Таблиця як ви напевно вже здогадалися,
складається з трьох полів: SiteID, PageID, CountValue:

Create Table Counters (
SiteID char(120) not null,
PageID char(120) not null,
CountValue int,
index CounterIndex (SiteID,PageID));

Зверніть увагу на індекс CounterIndex. Поля, що входять в індекс, повинні
мати атрибут NOT NULL, розмір ключів (читай полів, що входять в індекс) не повинен
перевищувати 256 символів. І останнє – порядок полів в індексі повинна збігатися з
порядком у секції Where SQL запиту. Якщо ж Ви плануєте невелику базу і
колчество записів невелика, то індекс можна і не створювати.

Для роботи з базою нам потрібно всього три запити:


А тепер саме час згадати про префікс "_" значень 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
";
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”");
}


Перетворюємо число в рядок і форматуємо в шестизначне число.

  $strCounterValue = sprintf("%d",$locCountValue);
while (strlen ($ strCounterValue) <6) $ strCounterValue = "0". $ StrCounterValue;
$txtlen = strlen($strCounterValue);

Далі показано як користуватися gd library в php для динамічного малювання
лічильника. Строго кажучи, це не самий ілюстративний приклад. Шрифти, що входять до
бібліотеку gd library можуть відрізнятися за дистрибутивам, тому для цього
проекту я використовував спеціальною формат представлення шрифту і процедуру його
відображення. Тим неменш код досить документований і, я сподіваюся, допоможе вам
зробити черговий крок.

  Header("Content-type: image/gif");
$DeskWidth=24; $DeskHeight=48; $DeskSpace=5;

/ * Створюємо малюнок imgWidth * imgHeight pixels. * /
$imgWidth= $txtlen * ($DeskWidth + $DeskSpace) – $DeskSpace;
$imgHeight = $DeskHeight;
$im_out = ImageCreate($imgWidth, $imgHeight);

/ * Резервуючи кольору в палітрі * /
$white = ImageColorAllocate($im_out, 255, 255, 255);
$grey = ImageColorAllocate($im_out, 0, 0, 77);
$blue = ImageColorAllocate($im_out, 40, 5, 250);
$trans = ImageColorAllocate($im_out, 1, 1, 1);
$red = ImageColorAllocate($im_out, 40, 33, 155);

/ * Встановлюємо прозорий колір і малюємо фон * /
ImageColorTransparent($im_out, $trans);
for ($dy=0; $dy < $imgHeight; $dy++)
ImageLine($im_out, 0, $dy, $imgWidth-1, $dy, $trans);
for ($dy=2; $dy < $imgHeight; $dy=$dy+4)
ImageLine($im_out,0,$dy,$imgWidth-1,$dy,$red);

/ / Далі виводимо цифри по пікселях,
/ / Спочатку "тінь" зі зміщенням в один піксел а поверх і "обличчя"
$CurColor=$white;
for ($txtcur=0;$txtcur<$txtlen;$txtcur++)
{
$bx=$txtcur*($DeskWidth+$DeskSpace);
for ($dy=0;$dy<$imgHeight;$dy++)
ImageLine($im_out,$bx,$dy,$bx+$DeskWidth-1,$dy,$blue);
$bx=$bx+($DeskWidth-22)/2;
$c=0+$strCounterValue[$txtcur];
if ($c!=0) $CurColor=$white;
if (($c>=0) && ($c<=9))
for ($id=1;$id>=0;$id–)
{
if ($id==1) $CurColor=$grey; else $CurColor=$white;
for ($dy=0;$dy<48;$dy++)
for ($dx=0;$dx<22;$dx++)
{
$my_pos = $c*48*3 + $dy*3 + ($dx>>3);
$my_byte = $CounterDigitData[$my_pos];
if ((($ my_byte>> (7 – ($ dx & 7))) & 1) == 1)
ImageSetPixel ($ im_out, $ bx + $ dx + $ id-1, $ dy + $ id, $ CurColor);
}
}
}

/ / Відправляємо оглядачеві зображення …
ImageGif($im_out);
/ / … і звільняємо пам'ять
ImageDestroy($im_out);

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


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

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

Ваш отзыв

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

*

*