Ïåðâûé ñàéò íà PHP

         

ÔÀÉË OTZIV.PHP



ÔÀÉË OTZIV.PHP

Êîä â ýòîì ôàéëå ðàññ÷èòûâàåò íîâûé ñðåäíèé áàëë ñòàòüè íà îñíîâå ïåðåäàííîé ÷åðåç ôîðìó îöåíêè ïîñåòèòåëÿ è òåêóùåãî ñðåäíåãî áàëëà, çàïèñûâàåò çíà÷åíèÿ ñðåäíåãî áàëëà è êîëè÷åñòâà îöåíîê â ñîîòâåòñòâóþùèå ôàéëû, à òàêæå ïîìå÷àåò áðàóçåð ïîñåòèòåëÿ cookie äëÿ íåäîïóùåíèÿ ïîâòîðíîãî ãîëîñîâàíèÿ òîãî æå ñàìîãî ïîñåòèòåëÿ.

<?php

Ïîñêîëüêó èçìåíÿòü çíà÷åíèÿ ñðåäíåãî áàëëà è êîëè÷åñòâà îöåíîê èìååò ñìûñë ëèøü â òîì ñëó÷àå, åñëè ïîñåòèòåëü åùå íå ãîëîñîâàë çà ñòàòüþ, òî âíîâü ñîñòàâèì èìÿ cookie, ñëóæàùåãî "ïîìåòêîé" ñâåðøèâøåãîñÿ ãîëîñîâàíèÿ...

$namecook=$nom."haveest";

...è âåñü äàëüíåéøèé êîä âûïîëíèì òîëüêî â òîì ñëó÷àå, åñëè òàêîãî cookie óñòàíîâëåíî íå áûëî.

if ($$namecook=="")

Ïðèìå÷àíèå:

Âìåñòî ýòîé ñòðîêè ìîæíî èñïîëüçîâàòü ñòðîêó

i f ($HTTP_COOKIE_VARS[$haveestim]=="") èëè â PHP âåðñèè 4.1 è âûøå — ñòðîêó

if ($_COOKIE[$haveestim]=="") êàê óæå óêàçûâàëîñü âûøå.

Êîììåíòàðèé:

Êàçàëîñü áû — à çà÷åì, ñîáñòâåííî, ïðîâåðÿòü íà ýòîé ñòðàíèöå, óñòàíîâëåí ëè cookie? Âåäü ôîðìà äëÿ âûñòàâëåíèÿ îöåíêè íà ïðåäûäóùåé ñòðàíèöå ìîæåò ïîÿâèòüñÿ íà íåé òîëüêî â òîì ñëó÷àå, åñëè cookie îòñóòñòâóåò, íå òàê ëè? Íî âñå äåëî â òîì, ÷òî ïîñåòèòåëü, æåëàþùèé ñäåëàòü "íàêðóòêó" ñòàòüè, ïðîãîëîñîâàâ çà íåå ìíîæåñòâî ðàç, âïîëíå ìîæåò ñîõðàíèòü íà ñâîåì êîìïüþòåðå ëîêàëüíóþ êîïèþ ñòàòüè ñ ôîðìîé äëÿ âûñòàâëåíèÿ îöåíêè, è óæå ñ íåå îñóùåñòâëÿòü ãîëîñîâàíèå. ßñíî, ÷òî îòîáðàæåíèå ôîðìû íà ëîêàëüíîé êîïèè ñòðàíèöû îò íàëè÷èÿ èëè îòñóòñòâèÿ cookie íå çàâèñèò, — ïîýòîìó è ïðèõîäèòñÿ îñóùåñòâëÿòü ïðîâåðêó åùå è çäåñü.



Èòàê, åñëè ïîñåòèòåëü åùå íå ãîëîñîâàë çà äàííóþ ñòàòüþ...

{

...óñòàíîâèì cookie, ãîâîðÿùèé, ÷òî òàêîå ãîëîñîâàíèå íàêîíåö ñîâåðøèëîñü. Âðåìÿ æèçíè cookie óñòàíîâèì â ìåñÿö - ïîæàëóé, õâàòèò. (Ïîÿñíåíèå ïî ôóíêöèè óñòàíîâêè cookie ñìîòðèòå â ).

SetCookie("$namecook","1",time()+2 592000);

Çàïèøåì â ïåðåìåííûå èìåíà äèðåêòîðèè ñ ôàéëàìè îöåíîê è ñàìèõ ýòèõ ôàéëîâ:

$dirct="cnt";


$kolvooc="$nom"."kol";

$ocenka="$nom"."est";

Åñëè ôàéëû îöåíîê íå ñóùåñòâóþò (ò. å. âûñòàâëÿåìàÿ îöåíêà - âîîáùå ïåðâàÿ ïî ñ÷åòó)...

if ((file_exists("$dirct/$kolvooc")!=True)

(file_exists("$dirct/$name2")!=True)) {

...òî çàïèøåì â ôàéë ñî ñâåäåíèÿìè î êîëè÷åñòâå îöåíèâøèõ ÷èñëî 1 (òàê âåäü è åñòü, íå ïðàâäà ëè?)...

$hdll = fopen("$dirct/$kolvooc", "a+"); fwrite($hdll,l); fclose($hdll);

...à â ôàéë ñî ñâåäåíèÿìè î ñðåäíåì áàëëå - âûñòàâëåííóþ ïîñåòèòåëåì îöåíêó (îíà âåäü è åñòü "ñðåäíåå" îò ñàìîé ñåáÿ):

$hdl2 = fopen("$dirct/$ocenka", "a+");

fwrite($hdl2,$ocen);

fclose($hdl2);

Åñëè æå ôàéëû ñî ñâåäåíèÿìè îá îöåíêå óæå ñóùåñòâóþò...

else

...òî ñ÷èòàåì äëÿ íà÷àëà ñîäåðæèìîå ôàéëà ñ êîëè÷åñòâîì îöåíîê â ïåðåìåííóþ

kvo...

$hdll = fopen("$dirct/$kolvooc", "r+");

$kvo ¦ fread($hdll, filesize("cnt/$kolvooc"));

...à çàòåì óâåëè÷èì çíà÷åíèå ýòîé ïåðåìåííîé íà 1 - ÷òî è áóäåò íîâûì êîëè÷åñòâîì îöåíîê, ñ ó÷åòîì ïîñëåäíåé âûñòàâëåííîé:

$kvo++;

Òåïåðü íàì íàäî âåðíóòü òî÷êó ñ÷èòûâàíèÿ (òàê íàçûâàåìûé "óêàçàòåëü") â íà÷àëî ôàéëà - äëÿ òîãî, ÷òîáû çàïèñàòü â ôàéë íîâîå çíà÷åíèå êîëè÷åñòâà îöåíîê. Âåäü â ðåçóëüòàòå ïðîâåäåíèÿ îïåðàöèè ÷òåíèÿ êîëè÷åñòâà îöåíîê èç ôàéëà òî÷êà ñ÷èòûâàíèÿ - óêàçàòåëü - ïåðåìåñòèëàñü â åãî êîíåö. Äëÿ ñîâåðøåíèÿ äàííîé îïåðàöèè âîñïîëüçóåìñÿ êîìàíäîé rewind:

rewind($hdll);

Ïðèìå÷àíèå:

Êîìàíäà rewind (äåñêðèïòîð îòêðûòîãî ôàéëà) ïåðåìåùàåò òî÷êó ñ÷èòûâàíèÿ è çàïèñè äàííûõ â ôàéë (ò. å. óêàçàòåëü ôàéëà), â íà÷àëî ýòîãî ôàéëà. Åñëè âû çàïèñûâàåòå ÷òî-ëèáî â ôàéë ïîñëå ñ÷èòûâàíèÿ èç íåãî äàííûõ, òî âàì íåîáõîäèìî ïåðåä çàïèñüþ âîñïîëüçîâàòüñÿ ýòîé êîìàíäîé.

Ñëåäóåò ïîìíèòü, ÷òî åñëè ôàéë áûë îòêðûò êîìàíäîé fopen ñ ïàðàìåòðîì à èëè a+, òî íåçàâèñèìî îò ïîëîæåíèÿ óêàçàòåëÿ çàïèñü íîâûõ äàííûõ êîìàíäîé fwrite áóäåò îñóùåñòâëÿòüñÿ âêîíåö ôàéëà.

Çàïèøåì íîâîå çíà÷åíèå êîëè÷åñòâà îöåíîê â ïðåäíàçíà÷åííûé äëÿ õðàíåíèÿ ýòîé âåëè÷èíû ôàéë...



fwrite($hdll,$kvo);

...è çàêðîåì åãî.

fclose($hdll);

Òåïåðü ðàçáåðåìñÿ ñî ñðåäíèì áàëëîì. Îòêðîåì ôàéë, ãäå õðàíèòñÿ åãî çíà÷åíèå...

$hdl2 = fopen("$dirct/$ocenka", "r+");

...çàïèøåì ýòî çíà÷åíèå â ïåðåìåííóþ...

$sred= fread($hdl2, filesize("cnt/$ocenka"));

...è ðàññ÷èòàåì íîâóþ âåëè÷èíó ñðåäíåãî áàëëà - íà îñíîâå åãî ñòàðîãî çíà÷åíèÿ, à òàêæå èíôîðìàöèè î êîëè÷åñòâå îöåíîê è íîâîé îöåíêè.

$sred=($sred*($kvo-l)+$ocen)/$kvo;

Òåïåðü çàïèøåì ýòè ñâåäåíèÿ â ïðåäíàçíà÷åííûé äëÿ íèõ ôàéë -òî÷íî òàê æå, êàê è ïàðîé àáçàöåâ âûøå.

rewind($hdl2); fwrite($hdl2,$sred); fclose($hdl2);

Ñîáñòâåííî, è âñå.

Ìîæíî âûâîäèòü èíôîðìàöèþ ïîñåòèòåëþ îá èòîãîâîì ðåçóëüòàòå (Ðèñóíîê 10.6) èëè êðàòêóþ áëàãîäàðíîñòü.

echo ("Áëàãîäàðèì âàñ çà îöåíêó!");


Ñîäåðæàíèå ðàçäåëà