Php-web-äèçàéí > Php íà÷èíàþùèì
Php - ýòî ÿçûê ñöåíàðèåâ. Çà÷åì îí íóæåí? Äëÿ
òîãî, ÷òîáû Âàø ñàéò áûë áîëåå èíòåðåñåí. Èñïîëüçóÿ Php,
êîòîðûé ðàáîòàåò íà ñòîðîíå ñåðâåðà, ìû äîáèâàåìñÿ òîãî, ÷òî
òåêñò html-ñòðàíè÷êè ìåíÿåòñÿ "íà ëåòó". Äàëåå ìû ïðèâåäåì
íåñêîëüêî ïðèìåðîâ äëÿ íà÷èíàþùèõ.
1. Íàäî ðàçáèòü html òåêñò íà: âåðõ
ñòðàíèöû è íèç ñòðàíèöû, òî åñòü ñîçäàòü øàáëîíû. Â ýòîì
ñëó÷àå, áóäåò ìåíÿòüñÿ òîëüêî öåíòð ñòðàíè÷êè, ÷òî
íåìàëîâàæíî.
Ñëåäóþùèé ôàéë "top.htm" - âåðõ
ñòðàíè÷êè <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"> <html><HEAD><TITLE>%title%</TITLE></HEAD><body>
Ýòîò ôàéë "end.htm" -
íèç ñòðàíè÷êè </body></html>
Ñàì ñöåíàðèé áóäåò
òàêîé <? //âñòàâëÿåì
âåðõíèé øàáëîí è èçìåíÿåì â íåì Title. $title = "Php-web-äèçàéí"; $t_mha = @file
('top.htm'); for($mha = 0 ; $mha
< count($t_mha); $mha++) { $t_mha[$mha] =
str_replace("%title%",$title,$t_mha[$mha]); echo "$t_mha[$mha]"; } //çäåñü
âñòàâëÿåì öåíòð ñòðàíè÷êè include("zentr.htm"); //âñòàâëÿåì
íèç ñòðàíè÷êè include("end.htm"); ?>
Ïðè îáðàùåíèè ê ýòîìó
ñöåíàðèþ ñåðâåð âûäàñò áðîóçåðó <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN"> <html><HEAD><TITLE>Php-web-äèçàéí</TITLE></HEAD><body> ñåðåäèíà ñòðàíè÷êè,
êîòîðàÿ áóäåò ìåíÿòüñÿ, òî åñòü zentr.htm. </body></html>
Ìû äîáèëèñü òîãî, ÷òî
â âåðõíåé ÷àñòè ìåíÿåì title, âûâîäèì ñàìó ìåíÿþùóþñÿ
èíôîðìàöèþ (zentr.htm) â öåíòð html
êîäà è äîáàâëÿåì íèç. Òåïåðü ìû áóäåì ìåíÿòü òîëüêî
öåíòðàëüíóþ ÷àñòü, íå çàáîòÿñü î øàáëîíàõ.  ýòîì ïðîñòîì
ïðèìåðå ìû íàó÷èëèñü ðàçáèâàòü òåêñò ñòðàíè÷êè, ìåíÿòü åãî è
âñòàâëÿòü ôàéëû. Òåïåðü îäèí ðàç çàïèñàâ ôàéë âåðõ, ïî ðàçíûì
ññûëêàì ìû ñïîêîéíî èçìåíèì â íåì title èëè ÷òî-íèáóäü åùå,
âñòàâèì öåíòðàëüíóþ ÷àñòü è çàêîí÷èì íèæíåé.
Ó
íàñ íà ñàéòå ïåðåïèñûâàåòñÿ â âåðõó: title, ñòàòèñòèêà
(ëåâûé íèæíèé óãîë), çàòåì ìû
âñòàâëÿåì ñàì òåêñò â öåíòð, à â íèæíåé ÷àñòè ïåðåïèñûâàåòñÿ
âðåìÿ ãåíåðàöèè ñòðàíè÷êè ñåðâåðîì.  èòîãå, ñòðàíè÷êè
ïîëó÷àþòñÿ âñåãäà ðàçíûå, õîòÿ ìû èñïîëüçóåì âñåãî äâà html
ôàéëà (âåðõ è íèç), öåíòð ñòðàíè÷êè
ðàçíûé. Òî æå ñàìîå îòíîñèòñÿ è ê öåíòðàëüíîé ÷àñòè, â êîòîðîé
òîæå ìîæíî ñîçäàòü øàáëîí, à ñåðâåð ñàì áóäåò ìåíÿòü â íåì
äàííûå, ÷òî ïðèäàñò ñàéòó áîëüøå èíòåðàêòèâíîñòè.
2. Êàê îðãàíèçîâàòü php-ññûëêè. Î÷åíü
ïðîñòî, íàïðèìåð, ó íàñ âåñü ñêðèïò çàïèñàí â îäíîì ôàéëå
all.php. Ññûëêè â html êîäå âûãëÿäÿò òàê
"all.php?act=omsk&fon=velikie". Âñå ÷òî ñòîèò çà çíàêîì
âîïðîñà ýòî è åñòü ññûëêà. Åñëè íàæàòü íà ýòó ññûëêó, ñêðèïòó
all.php àâòîìàòè÷åñêè ìåòîäîì Get áóäóò ïåðåäàíû äâå
ïåðåìåííûå: "$act=omsk" è "$fon=velikie". Ïðîãðàììà íà÷íåò äâèæåíèå
ïî ñðèïòó ñâåðõó âíèç è êîãäà äîñòèãíåò òîãî ìåñòà, ãäå ìû
áóäåì ñïðàøèâàòü î ýòèõ äâóõ ïåðåìåííûõ ñðèïò
èñïîëíèòñÿ. <? //åñëè ïåðåìåííàÿ $act ðàâíà "omsk" è $fon íå ïóñòî, òî åñòü
ñóùåñòâóåò //âûâîäèì îäíó ñòðàíè÷êó â áðîóçåð //ññûëêà
âûãëÿäèò òàê: "all.php?act=omsk&fon=velikie" if($act == "omsk" and $fon != "") {
include("one.htm");
} //åñëè ïåðåìåííàÿ $act ðàâíà "omsk" è $fon ïóñòî, òî åñòü íå
ñóùåñòâóåò //âûâîäèì äðóãóþ ñòðàíè÷êó â áðîóçåð //ññûëêà
âûãëÿäèò òàê: "all.php?act=omsk" if($act == "omsk" and $fon == "") {
include("too.htm");
} ?> Òî
åñòü, âñå î÷åíü ïðîñòî.
3. Êàê
ðàáîòàþò ôîðìû? Èç ôîðìû ïåðåìåííûå ïåðåäàþòñÿ ñêðèïòó
ìåòîäîì Get èëè Post, åñëè ìû â ôîðìå ÷òî-òî ïðîïèøåì è
àêòèâèçèðóåì êíîïêó submit. Åñëè áóäåò èñïîëüçîâàòüñÿ ìåòîä
Get, òî âñå ïåðåìåííûå, êîòîðûå ïåðåäàþòñÿ ñêðèïòó áóäóò
ïðîïèñàíû â êîìàíäíîé ñòðîêå:
all.php?1_ïåðåìåííàÿ=çíà÷åíèå&2_ïåðåìåííàÿ=çíà÷åíèå&3_ïåðåìåííàÿ=çíà÷åíèå.
Åñëè áóäåò èñïîëüçîâàí ìåòîä Post, òî ýòè æå ïåðåìåííûå áóäóò
ïåðåäàíû ñêðèïòó ñêðûòî âíå êîìàíäíîé ñòðîêè. Òî åñòü, ìåòîä
Get íåëüçÿ èñïîëüçîâàòü, åñëè ïåðåìåííàÿ áîëüøîãî îáúåìà, òî
åñòü â íåé ìíîãî áóêâ. Íàïðèìåð, êîãäà âû íàïðàâëÿåòå íàì
ïèñüìî ñ ñàéòà, ñêðèïòó áóäóò ïðåäàíû òðè ïåðåìåííûå: èìÿ,
email ïîëüçîâàòåëÿ è ñàì òåêñò ïèñüìà. Äâå ïåðâûå ïåðåìåííûå
ìàëåíüêèå, à âîò ïîñëåäíÿÿ áîëüøàÿ, ïîýòîìó ïðîãðàììà áóäåò
âèñíóòü, åñëè â ôîðìå îòñûëêè ïðèìåíèòü ìåòîä Get. Ôîðìû Php
ïåðåäàþò ñêðèïòó ïåðåìåííûå, òîëüêî ïîñëå àêòèâàöèè, â ýòîì
îòëè÷èå îò Javascript, êîòîðûé èñïîëíÿåòñÿ ïðè çàãðóçêå,
ñàìîãî òåêñòà html, â áðîóçåð.
4.
Êàê îðãàíèçîâàòü Àäìèíèñòðèðîâàíèå? Ñîçäàåì ôàéë,
íàïðèìåð, administ.php. Îí äîëæåí áûòü çàêðûò
ïàðîëåì. <? //ôóíêöèÿ ôîðìà
ïàðîëÿ function
form() { echo " <!DOCTYPE HTML PUBLIC
\"-//W3C//DTD HTML 4.0 Transitional//EN\"> <html><HEAD> <title>Àäìèí</title> <meta
http-equiv=\"Content-Type\" content=\"text/html;
charset=windows-1251\"> </head><body> <form
action=administr.php method=post> <table border=0
width=600 align=center cellspacing=1 cellpadding=1
bgcolor=#333399> <tr><td align=center
bgcolor=#D7DCF7> <font face=verdana size=2
color=de0000>Ââåäèòå
ïàðîëü</font></td></tr> <tr><td
align=center bgcolor=#D7DCF7><input type=password name=p
size=25></td></tr> <tr><td
align=center bgcolor=#D7DCF7><input type=submit
value=Âîéòè></td></tr></table> </form>"; } //åñëè
ïàðîëü ïðàâèëüíûé ñêðèïò èñïîëíÿåòñÿ if ($p == "$password") { //çäåñü
òåêñò íàøåãî ñêðèïòà echo "</body></html>"; exit; } //åñëè
ïàðîëü íåïðàâèëüíûé ñêðèïò íå èñïîëíÿåòñÿ, çàïèñûâàåì
íàðóøèòåëÿ â áàçó if
($p != "$password") //îïðåäåëÿåì
ip íàðóøèòåëÿ, çàïèñûâàåì â ëîã ôàéë è âûâîäèì ôîðìó äëÿ
ïàðîëÿ { if(empty($log_ip)){
if (getenv('HTTP_X_FORWARDED_FOR')) {$log_ip=getenv('HTTP_X_FORWARDED_FOR');
} else
{$log_ip=getenv('REMOTE_ADDR');
}} else
{$log_ip=getenv('REMOTE_ADDR');
} $log_host=gethostbyaddr("$log_ip"); $log_date=date('d\.m\.Y,
H:i:s'); $log_file =
fopen("admin.log","a+"); $p = eregi_replace("<","<","$p"); $p = eregi_replace(">",">","$p"); if($p == "") {
$p = "íå ââîäèë";
} fputs
($log_file,"$log_ip<>$log_host<>$log_date<>$p\n"); fclose ($log_file); form(); echo "</body></html>"; } ?> Ìû âñåãäà ìîæåì óâèäåòü
íàðóøèòåëåé è ïîòîì, åñëè íàäî, çàêðûòü èì äîñòóï, ïðè óñëîâèè
îïðåäåëåíèÿ ip íàðóøèòåëÿ. Âñå ññûëêè â ñêðèïòå äîëæíû èäòè ñ
ïàðîëåì, êîòîðûé íàäî âðó÷íóþ ïðîïèñàòü â îòäåëüíîì òåêñòîâîì
ôàéëå, èç êîòîðãî ñêðèïò è áóäåò ïîòîì ñ÷èòûâàòü ïàðîëü è
ñðàâíèâàòü åãî ñ òåì, êîòîðûé áûë ïîñëàí èç
ôîðìû.
5. ×òî òàêîå öèêë è çà÷åì îí
íóæåí? ôóíêöèÿ for - öèêë,
î÷åíü âàæíàÿ äëÿ ïðèâÿçêè áàç äàííûõ, êîòîðûå ëåæàò â
òåêñòîâûõ ôàéëàõ.  íàøåì áàçîâîì ôàéëå äàííûå ëåæàò ïîñòðî÷íî
è ðàçäåëÿþòñÿ êàêèì-òî ðàçäåëèòåëåì, â íàøåì ñëó÷àå
ðàçäåëèòåëü - "::". Òî åñòü, áàçà äàííûõ âûãëÿäèò òàê: 1 ñòðîêà - Èâàíîâ::äèðåêòîð::40 ëåò::â/î::
2 ñòðîêà - Ïåòðîâ::çàì.äèðåêòîðà::35 ëåò::â/î:: 3
ñòðîêà - Ñèäîðîâ::íà÷.îòäåëà::45 ëåò::â/î:: ×òîáû
ïðîèçâåñòè ìàíèïóëÿöèè ñ ýòîé áàçîé (äîáàâèòü,
óäàëèòü, èçìåíèòü äàííûå), è, òðåáóåòñÿ öèêë
for. Ñíà÷àëà ìû ñ÷èòàåì âñþ áàçó â
ìàññèâ ñòðîê, ïðè÷åì êàæäàÿ ñòðîêà â ýòîì ìàññèâå áóäåò èìåòü
ñâîé íîìåð, ô-èÿ file, çàòåì ìû
ïîñ÷èòàåì ñêîëüêî ñòðîê â ñ÷èòàííîì ìàññèâå, îòêðîåì ôàéë áàçó
íà çàïèñü, ïîëíîñòüþ ñòèðàÿ åå è çàïóñòèì öèêë, â êîòîðîì, â
äàííîì ñëó÷àå áóäåì óäàëÿòü íåíóæíûå íàì ñòðîêè, ïðè ýòîì
íóæíûå çàïèñûâàÿ â òó æå áàçó äàííûõ. Äàëåå ïî òåêñòó, $base - áàçà äàííûõ, â êîòîðîé ëåæàò íàøè
äàííûå. <? //
ñ÷èòûâàåì âñþ áàçó â ïåðåìåííóþ $general // Òîãäà $general - ýòî ìàññèâ ñòðîê èç áàçû,
âûãëÿäèò òàê: // $general[0] -
âñå, ÷òî â 1 ñòðîêå áàçû // $general[1] - âñå, ÷òî âî 2 ñòðîêå áàçû
// $general[2] - âñå, ÷òî â 3
ñòðîêå áàçû // èòä, äî ïîñëåäíåé ñòðîêè, òî åñòü ôóíêöèÿ
// file äàåò íàì âîçìîæíîñòü
ñ÷èòàòü áàçó ïîñòðî÷íî // â ìàññèâ ñòðîê ñî ñâîèì íîìåðîì
ïî ïîðÿäêó $general = file("$base"); // ñòèðàåì âñþ
áàçó è îòêðûâàåì åå íà çàïèñü // ôóíêöèÿ fopen, åñëè "w", òî âñÿ áàçà ñòèðàåòñÿ,
// íó è ïóñòü, ðàíåå ìû ñ÷èòàëè åå â ïåðåìåííóþ $general, // à ïîòîì èç $general ïåðåçàïèøåì $fp = fopen("$base","w"); // count($general) - êîëè÷åñòâî ñòðîê
â ñ÷èòàííîé áàçå, // òî åñòü â ïåðåìåííîé $general. Íàçíà÷àåì öèêë îò // íóëåâîé
ñòðîêè, äî ïîñëåäíåé â áàçå: $j = 0
äî $j < forum'>count($general) for ($j = 0; $j <
count($general); $j++) { //
çàïóñêàåì öèêë, â ïåðâûé ïðîõîä öèêëà, // $general[$j] -
ýòî âñå, ÷òî çàïèñàíî â 1 ñòðîêå $general[0] // âî âòîðîé ïðîõîä $general[$j] -
âñå, ÷òî çàïèñàíî // âî 2 ñòðîêå $general[1]. ñ÷åò èäåò íå ñ 1, à ñ 0.
// Â ïîñëåäíèé ïðîõîä, âñå ÷òî çàïèñàíî â ïîëåäíåé ñòðîêå.
// Òàê ïðîäîëæàåòñÿ ïîêà $j <
count($general), òî åñòü //
ñ÷åò÷èê - ïåðìåííàÿ $j íå ñòàíåò
áîëüøå êîëè÷åñòâà ñòðîê â áàçå, // òîãäà öèêë
ïðåêðàùàåòñÿ. Ñ êàæäûì ïðîõîäîì öèêëà $j++, òî åñòü ýòà // ïåðåìåííàÿ
óâåëè÷èâàåòñÿ íà îäèí, à â ñàìîì íà÷àëå îíà ðàâíà 0. //
Åñëè íîìåð ñòðîêè è íîìåð äëÿ ñòèðàíèÿ òîé ñòðîêè, ÷òî õîòèì
óäàëèòü // ñîâïàäàþò èãíîðèðóåì, òî åñòü íå çàïèñûâàåì â
áàçó, // îñòàëüíûå ñòðîêè ïèøåì â ôàéë-áàçó fputs($fp,$general[$j]) // òî åñòü
çàïèñûâàåì ïî íîâîìó âñå ñòðîêè $general[$j],
// â òîì æå ïîðÿäêå, êðîìå òîé, êîòîðóþ õîòèì ñòåðåòü
if ($j != ($del)){
$erg = fputs($fp,$general[$j]); }
} // öèêë áóäåò êðóòèòüñÿ ïîêà $j < count($general), ïîòîì îí
çàêîí÷èòñÿ // è ïðîãðàììà ïðèäåò ê ýòîé îòìåòêå. Çäåñü ìû
çàêðûâàåì ôàéë-áàçó fclose($fp); ?>  ýòîì î÷åíü ïðîñòîì
ïðèìåðå ìû íàó÷èëèñü èñïîëüçîâàòü file, count, for, fopen, fclose.
|