Ваш первый Сайт С использованием РНР-скриптов

СОЗДАНИЕ СТРАНИЦЫ С НОВОСТЯМИ САЙТА

Для начала мы создадим программу для вывода новостей сайта или дру­гой информации без использования формы. Новости или другая информация будут писаться вручную в текстовый файл, и эта информация будет отобра­жена в окне браузера. Программа не вызовет у вас затруднений, если вы разобрались с материалами предыдущей главы при создании счетчика посещений.

В рабочей папке htdocs нашего домашнего сервера создайте папку Novosti. В этой папке мы будем хранить страницы для вывода новостей. Соз­дайте там простой текстовый файл, т. е. откройте блокнот, сохраните его в нашей созданной папке novosti под названием novosti.txt. Запишите в этом файле несколько строчек, примерно так:

Первая новость вторая новость третья новость четвертая новость пятая новость шестая новость седьмая новость

Сохраните записанное и закройте файл. Теперь в PHP-редакторе создайте новый PHP-файл. Между тегами <?php и?> наберите следующий код:

Листинг 5.3 (файл Novl. php) <?Php

$filen=M novosti. txt"; $chisIo=5; $lolo=file($filen); krsort($lolo);

Foreach($lolo as $line2)

{

$j++;

If($j<=$chislo) echo $line2."<br><br>";

}

?>

Сохраните этот файл в папке novosti под названием novl.php. Обратите внимание, файл должен сохраниться именно с расширением php. Попробуйте разобраться в этом коде самостоятельно, не подсматривая на разбор кода ни­же. Если это у вас вызывает затруднения, то еще раз прочтите предыдущую главу, где мы разбирали функции работы со строками и массивами. Разберем теперь строчки кода листинга 5.3: < ?php

$filen= "novosti.txt"; - записываем в переменную $filen путь к текстовому файлу с новостями. Поскольку этот файл находится в той же папке novosti, Что и данная программа, мы указываем просто название файла;

$chisIo=5; - вводим переменную Schislo и присваиваем ей число 5. Это будет количество выводимых новостей. Эта переменная будет подробно рассмот­рена в конце кода;

$lolo=file($fiIen); - функция file создает массив строк из содержимого файла, указанного в переменной $filen и заносит весь этот массив в переменную Slolo. Таким образом, в переменной $lolo будет массив строк, которые мы за­писали в файле novosti.txt. Причем первая строчка будет иметь индекс 0, вто­рая - индекс 1 и т. д.;

Krsort($lolo); - функция krsort сортирует массив по убыванию значений ин­дексов. Это делается для того, чтобы свежие новости были вверху, т. е. стро­ки из файла novosti.txt выводились бы снизу вверх;

Foreach($lolo as $Iine2) - функция foreach обходит массив, указанный в пере­менной $lolo, построчно, т. е. выполняется цикл, причем столько раз, сколько строчек в массиве $Iolo (у нас их семь). При* каждом выполнении цикла пере­менной $line2 присваивается содержимое очередной строки, которое потом будет выводиться в окно браузера;

Н

$j++; - вводим счетчик цикла для подсчета количества новостей или других записей. При каждом исполнении цикла, он будет увеличиваться на единицу;

If($j<=z$chislo) echo $line2."<br><br>"; - проверяется условие. Если счетчик цикла $j меньше или равен числу в переменной $chislo, то в окно браузера выводится очередная строка из текстового файла с новостями. В переменной же $chislo, как было указано выше, мы будем указывать количество новостей, которое нужно будет вывести в браузер. Например, если у нас 1000 новостей, но нам нужно показать на странице только 5 последних, то в начале этого ко­да или же в коде той страницы, куда мы вставим данный код (при помощи оператора include) нужно указать, что $chislo=5 (именно так у нас и сделано). Все, код разобран. Между новостями я поставил два html-оператора перевода строки <br>. Естественно, они должны быть заключены в кавычки и присое­динены к строке с помощью точки (оператора конкатенации).

1}

?>

Итак, мы создали программу для вывода на страницу новостей сайта. За­пустите в РНР-редакторе созданную программу. Слева вы увидите 5 послед­них строчек. Первой строкой у нас будет самая последняя строка в текстовом файле novosti.txt, а именно строка с надписью: седьмая новость. Далее идет шестая строка, пятая, четвертая, третья. Вторая и первая строки уже не выве­дутся в браузер, поскольку мы указали в коде, что нужно вывести только 5 новостей (строка с условием if($j<=$chislo) или if($j<=5)). Если надо вы­вести все новости, которые есть и будут, то установите, например, значение переменной $chislo=1000. Все новости, пока их не больше тысячи, будут вы­ведены в браузер.

Давайте создадим теперь простую страницу новостей, куда мы и вставим файл с кодом novl.php. В РНР-редакторе создайте новый файл и сохраните его под названием nov2.php. При помощи html-тегов создайте дизайн для этой страницы на ваше усмотрение. Я не буду создавать здесь красивый ди­зайн, поскольку это выходит за рамки данной книги. Я набрал примерно та­кой код:

Листинг 5.4 (файл Nov2.php) <Html> <Head>

<title>H0B0CTH Сайта </title> <style type="text/css">

#lolo{font-size:12pt; color: brown; font-family:Comic Sans MS}

</style </head>

<body bgcolor="cyan">

<center><b id="Iolo" style="font-size:20pt">HoBocTH caftTa</bx/centerxbr> <table width="50%" border="2" bordercolor="green" bgcolor=" silver" id="lolo"xtrxtd> <?php

Include ("novl. php");

?>

</td></trx/tablexbr>

</body>

</html>

Разберем этот код, хотя все должно быть вам понятно и так, но, как гово­рят, повторение - мать учения: <html> - начало HTML-кода;

<head>

<title>Новости сайта</Ш1е> - вводим заголовок страницы; <style type="text/css"> - открываем таблицу стилей;

Шо1о font-size: 12pt; color:red; font-family:Comic Sans MS} - вводим произ­вольный идентификатор стиля lolo, где указываем размер, цвет и тип шрифта;

</style> - закрываем таблицу стилей;

</head>

<body bgcolor="cyan"> - открываем тег основной части кода, где устанавли­ваем цвет фона cyan для всей страницы;

<center><b id= "lolo " style= "font-size:2Opt">Новости Cauma</b></center> <br> - выводим надпись вначале страницы, помещая ее в центр при помощи тегов <center> и </center>. В теге <Ь>, указывающем на жирный шрифт, мы вводим идентификатор стиля lolo (он был указан выше, в таблице стилей <style>), т. е. мы указываем браузеру, что между тегами <Ь> и </Ъ> будет располагаться текст с типом шрифта Comic Sans MS коричневого цвета. Раз­мер шрифта решил сделать побольше, дополнительно указав: style= "font- size.^ Opt";

< table width=z"50%" border="2" bordercolor= "green" bgcolor^"silver" id="lolo"><tr><td> - создаем простую таблицу, шириной в половину от об­щей ширины окна браузера. Далее указываем на ширину линий таблицы (border="2"), цвет линий (Bordercolor="green"), цвет фона {bgcolor^"silver'"). Затем снова указываем идентификатор lolo, т. е. устанавливаем размер, цвет и тип шрифта, как было указано в начале кода, в таблице стилей. После от­крываем единственную строку таблицы при помощи тега <tr> и первую (и единственную) ячейку в этой строке при помощи оператора <td>; <?php - начало PHP-кода, т. е. вставляем PHP-код внутри HTML-кода;

Include ("novl.php"); - вставляем код для вывода новостей в браузер, который у нас на странице novl.php. Новости будут выведены в нашу одноколонную таблицу;

?> - конец РНР-кода;

</td></tr></table><br> - закрываем ячейку, строку и саму таблицу; </body> - закрываем основную часть HTML-кода; </html> - конец HTML-кода.

Запустите в браузере созданную страницу nov2.php. Вы увидите пример­но такую картину, как показано на рис. 5.4.

Ш Svoi. NET : РНР F. dit [C:Home_ser verftpache2htdocsMyflooknovostinov2.php]

Файл Редактор Вид Пуск Подсветка Закладки Вставка Помощь = Язык Плагины

* О И ЙР -3 I* » Л * * / / / U - 3 * K K ?Fi U

СОЗДАНИЕ СТРАНИЦЫ С НОВОСТЯМИ САЙТА

Поэкспериментируйте. Допишите в текстовый файл novosti.txt внизу еще строчку: восьмая новость и сохраните файл. Вновь запустите в браузере файл nov2.php. Последняя написанная нами строчка появится первой, а стро­ка: седьмая новость сместится на вторую позицию.

Итак, простейшая страница новостей создана. Можно, конечно, на этом и закончить. Вы будете заходить на хостинг, где будет расположен ваш сайт и вручную редактировать файл novosti.txt. Однако на то и существует php - программирование, чтобы облегчить задачу по созданию и наполнению стра­ниц сайта. Используя формы, мы создадим удобный интерфейс написания новостей или другой информации для вашего сайта. Вам не нужно будет по­стоянно заходить на хостинг. У вас будет в Интернете специальная страничка администратора, откуда вы и будете заполнять страницу новостей. Заходить на с границу администратора сможете по паролю только вы. Пароль будет храниться в зашифрованном виде в каком-нибудь текстовом файле. В конце каждой новости будет автоматически добавляться дата написания данной но­вости. На страницу будет выводиться по 5 новостей. На каждой странице с новостями, естественно, будут указаны ссылки на другие страницы с ново­стями. Страница с новостями будет, правда, всего одна. Мы просто введем некий параметр, в зависимости от значения которого будет выводиться та или иная пятерка новостей.

При входе на страницу редактирования новостей появится текстовое поле для ввода пароля, который будете знать только вы. Вы вводите пароль и нажимаете на кнопку «Ввести пароль», которую мы создадим. Программа сравнит содержимое заполненного вами текстового поля с содержимым тек­стового файла, где у нас будет храниться пароль. Если пароль будет введен правильно, то откроется текстовое окно для редактирования файла с ново­стями. В противном случае будет выведена надпись, что пароль введен не­верно. Создадим сначала текстовый файл с паролем. Можно, конечно, это сделать вручную, т. е. создать простой текстовый файл и записать туда свой пароль. Этого делать категорически нельзя! Если какому-нибудь недоброже­лателю удастся открыть файл с паролем, то он без особого труда может зайти на вашу страничку для редактирования новостей и записать на ваш сайт все, что вздумается, например вредоносный код. Пароль нужно обязательно за­шифровать. Сейчас мы создадим небольшую программу, которая сама соз­даст текстовый файл с зашифрованным паролем.

В PHP-редакторе создайте новый файл. Сохраните его в папке novosti под названием newparol.php. Наберите следующий код между тегами <?php и?>.

Листинг 5.5 (файл newparoLphp) <?php

If(!$_GET['parorj)

{

Echo "<form action=newparol. php method=GET>"; echo "<input type=password name=parol>";

Echo "<input type=submit Уа1Ие='Ввести Пароль'>";

Echo "</form><brxbr>"; }

Else {

Echo "ПАРОЛЬ ВВЕДЕН!!!"; $parol=$_GET['paror]; $fiIe="parol. txt"; $newfile=fopen($file, "w+"); $write=fwrite($newfile, md5($parol));

Fclose($newfile); }

?>

Здесь мы создаем форму, на которой будут находиться всего 2 элемента: поле для ввода пароля (задается атрибутом type=passworcf) и кнопка (задается атрибутом type=submit). Сохраните написанный код и запустите браузер. Вы увидите примерно такое, как на рис. 5.5.

Введите какой-нибудь пароль и нажмите на кнопку. После нажатия эле­менты формы исчезнут, ,а в браузере появиться надпись «ПАРОЛЬ ВВЕДЕН!!!». Зайдите в папку novosti. У вас там появится текстовый файл pa­rol.txt. Откройте его. Вы увидите там свой введенный пароль, но в зашифро­ванном виде (хеш-код). Догадаться, что же было введено, практически не­возможно.

С* Svoi. NET : РНР Edit - [C:Home_serverApache2VhtdocsMyBooknovostinewparoLphp]

Щ Файл Редактор Вид Пуск Подсветка Закладки Вставка Помощь t Я:ык Плагины

JlflfllШ'Ъ ет 'W-а» ^ II OJ / /> f U — Q * Ш. к

(Щ Address: j http: //localhost/MyB ook/novosti/ne wparol. php __ | Щ

| Ввести пароль |

Рис. 5.5

В программе мы использовали функцию необратимого шифрования md5. Обратной расшифровке пароль не подлежит, да этого нам и не нужно.

При нажатии кнопки «Ввести пароль», мы направимся на эту же страни­цу, поскольку в теге <form> указан параметр action=newparol.php. В элемен­те суперглобального массива $ GET ['parol'] будет находиться введенный в текстовое поле пароль. Именно имя parol мы присвоили текстовому полю для ввода пароля (name=parol).

Давайте разберем строчки кода в листинге 5.5:

If(!$_GET['paroV]) - сначала проверяем, не существует ли элемента супер­глобального массива, в котором находится введенный пароль. Естественно, если мы только запустим программу, но еще не нажмем на кнопку формы, этот элемент будет еще не определен, поскольку данные из формы еще не переданы. Значит, условие истинно (перед элементом $ GET ['parol'] стоит символ отрицания, т. е. восклицательный знак). Условие будет означать сле­дующее: если элемента суперглобального массива $ GET ['parol'] еще не существует, то выполнится блок команд в фигурных скобках (под номе­ром 1). А в фигурных скобках у нас вывод формы в браузер;

И

Echo "<form action=newparol.php method=GET>"; - при помощи операторов Echo выводим форму, данные из которой при нажатии на кнопку в форме от­правятся методом GET на страницу newparol.php, т. е. на эту же страницу; Echo "<input type=password name=parol>"; - текстовое поле для ввода паро­ля. Даем имя этому полю name=parol

Echo "<input type=submit value= 'Ввести пароль'>"; - отображаем кнопку для отправки данных из этой формы. Заметьте, что фраза 'Ввести пароль' берется в одинарные кавычки, поскольку двойные мы уже используем. Применение двойных кавычек внутри двойных может вызвать ошибку;

Echo "</form><br><br>";

1} - закрываем форму и завершаем этот блок программ. Весь этот блок будет выполняться, если кнопка еще не нажата!

Else - если же элемент массива $ GET ['parol'] уже существует, т. е. мы уже нажали кнопку и отправили пароль на эту же страницу, то выполнится только блок программ, представленный ниже (в фигурных скобках под номером 2). Прошлый же блок программ, представленный выше, выполняться уже не бу­дет, т. е. форма выведена уже не будет. Вместо нее мы выведем в браузер простую надпись, что пароль уже введен; 2{

Echo "ПАРОЛЬ ВВЕДЕН!!!"; - вывод надписи в браузер;

$parol=$ GET['parol']; - переменной Sparol присваиваем значение супергло­бального массива $ GET['parol'], т. е. введенный нами пароль;

$file= "parol.txt"; - переменной $file присваиваем путь к текстовому файлу, где у нас будет зашифрованный пароль. Пусть он будет у нас в той же папке Novosti, что и эта программа;

$newfile=fopen($file, "w+"); - открывается текстовый файл для пароля, стирая там все содержимое, или создается новый файл, если пароль вводим впервые;

$write=Jwrite($newfile, md5($parol)); - записываем в открытый текстовый файл пароль, хранящийся у нас в переменной $parol, зашифровав его при по­мощи функции md5;

Fclose($newflle); - закрываем текстовый файл с паролем. 2}

Итак, мы создали текстовый файл с зашифрованным паролем. Созданную страницу newparol.php нужно оставить только на своем компьютере (!) и не загружать ее на сервер в Интернете, куда вы потом будете загружать свой сайт, оплатив хостинг. На сервер нужно будет загрузить текстовый файл с зашифрованным паролем parol.txt. Потом, если вы вдруг забудете пароль или захотите его просто поменять, при помощи программы на вашем компь­ютере newparol.php создадите новый файл с паролем и с тем же названием Parol.txt и закачаете его на свой сервер в Интернете, заменив им старый файл с паролем.

Перейдем непосредственно к созданию интерфейса для редактирования новостей сайта, т. е. создадим программу, с помощью которой было бы легко и удобно заполнять сайт новостями или какой-либо другой информацией.

При запуске программы, которую мы создадим, в браузере сначала по­явится текстовое поле для ввода пароля, как на рис. 5.6.

Р Svoi.NET : РНР Edit - [C:VHome_serverApache2htdQCsMyBoQknovcstiVredaktNovost.p|ip}

Gj| Файп Редактор Вид ГКск Подсветка Закладки Вставка Помощь Язык Плагины

'> Й Н J3 Л ** <* * / /> / U - □ * Ь к Ч - -

Ф ^ Addiess! httpV/localhost/MyBook/novosti/redaktNovosst php Q f ^

Редактирование новостей сойта

| | Ввести пароль

Рис. 5.6

После ввода правильного пароля и нажатия на кнопку «Ввести пароль», Появится большое текстовое поле, в которое загрузится для редактирования текстовый файл с новостями (в нашем случае это novosti.txt). Получится, при­мерно, как на рис. 5.7.

Внизу мы пишем очередную новость и нажимаем кнопку «Добавить». После этого на нашей web-страничке для новостей сайта появится свежая за­пись, причем она будет стоять первой. В конце записи будет указана дата по­явления данной записи. Если же нам не нужно добавлять новую запись, а на­до просто изменить уже существующие, то перед тем как нажать на кнопку, уберем галочку с надписи «Новая запись».

© Svoi. NET : РНР Edit [C:Home_serverApache2htdocsMyBooknovostire()aktNovost. php]

Файл Редактор Вид Пуск Подсветка Закладки Вставка Помощь Язык Плагины

TOC o "1-3" h z. j я я т з с, * * ч* ■ А :: / ^ / lc - а * Й. k т ц &

^ ^ Addtess 'hUp://localhost/MyBook/novostr/redaktNovost php? parol Q si^ ^

Первая новость вторая новость | третья новость четвёртая новость ;пятая новость || шестая новость, седьмая новость

Редактирование ноеостей сайга

Яштшщшшшяяшт

V,". Г.,ч-сй -' -

Jy Новая-запись (добавляется дата заоисн) •

Добавить > - . ' • ' - '

Рис. 5.7

Для написания кода в PHP-редакторе создайте новый файл и сохраните его в папке novosti под именем, например, redaktNovost.php. Код программы в листинге 5.6.

Листинг 5.6 (файл RedaktNovost. php) <Html> <Head>

<Ш1Е>Редактор Новостей </title> <style type="text/css">

#lolo{font-size:14pt; color:red; font-family:Comic Sans MS}

</style> </head>

<body bgcolor="cyan">

<Centerxdiv Id^'1010'^Редактирование новостей CaftTa</div></Center>

<?

If((!$_GET['novosti']) and (!$_GET['parol']))

{

Echo "<form action=redaktNovost. php method=GET>"; echo "cinput type=PASSWORD name=parol>"; echo "cinput type=SUBMIT value='BeecTH Пароль'>";

Echo "</form><br><:br>"; }

$parol=$_GET['paroI']; $file="parol. txt";

$open=fopen($file, "Г"); $read=fread($open, filesize($file)); Fclose($open);

If(md5($parol)=$read)

{

$nov=fopen("novosti. txt", "r+"); @$redakt=fread($nov, filesize(" novosti. txt")); fclose($nov);

Echo "<form action=redaktNovost. php method=GET>";

Echo "<textarea name=novosti cols=50 rows=15 wrap=virtual>$redakt</textarea>"; echo "<input type=HIDDEN name=parol value=$parol>"; echo "<input type=CHECKBOX name=new CHECKED>HoBaa Запись (Добавляется Дата Записи)<Ьг>"; Echo "<input type=SUBMIT value=^o6aBHTb>"; echo "</form>";

If(isset($_GET['novosti?]))

{

$novosti=$_GET['novostif]; $data=date('d. m.Yf); $nov=fopen("novosti. txt", "w+");

If($_GET[,new'l=true)

{

Fwrite($nov, "$novosti"."($data)"."n");

}

Else {

Fwrite($nov, "$novosti");

}

Fclose($nov);

}

}

Else if($paroI)

{

Echo "Неправильный Пароль!";

}

?>

</body> </html>

Разберем теперь строчки этого кода: <html> - начало HTML-кода; <head> - начало заглавной части кода; <title>Редактор Новостей </title> - заголовок страницы; <style type= "text/ess "> - начало таблицы стилей;

Ttlolo[font-size: 14pt; color:red; font-family:Comic Sans MS} - вводим идентифи­катор стиля, чтобы потом использовать его для задания шрифта текста;

</style> - закрываем тег таблицы стилей;

</head> - конец заглавной части кода;

<hody bgcolor="cyan"> - начало основной части HTML-кода. Задаем цвет фона страницы;

<center><div id="lolo">Редактирование новостей сайта<^1у></сеШег> - Выводим в центре надпись в верху окна браузера. Надпись выводится внутри отдельного контейнера при помощи тега <div>. Этот контейнерный тег слу­жит для выделения части документа, в нашем случае большого заголовка на странице. Шрифт надписи задается идентификатором стиля lolo

<? - начало РНР-кода;

If (!$_GET['parol']) - вначале проверяется условие, не вводился ли уже па­роль. Естественно, вначале при загрузке этой странице в браузер пароль еще не вводился (см. начало кода прошлого листинга 5.5). Значит, условие в круглых скобках истинно (перед элементом $_GET['parol'] стоит символ отрицания, т. е. восклицательный знак). В этом случае выполнится блок ко­манд в фигурных скобках ниже, т. е. вначале при загрузке этой страницы в браузер выведется форма с текстовым полем для ввода пароля и кнопки;

1{ - чтобы не было путаницы в фигурных скобках, я решил их попарно про­нумеровать, т. е. номеру открывающейся скобки будет соответствовать номер закрывающейся скобки внизу;

Echo "<form action=redaktNovost.php method=GET>"; - при помощи операто­ров echo выводим форму, данные из которой при нажатии на кнопку в форме отправятся методом GET на страницу redaktNovost.php, т. е. на эту же стра­ницу;

Echo "<input type=PASSWORD name=parol>"; - текстовое поле для ввода па­роля. Даем имя этому полю name=parol. Слово PASSWORD можно вводить как заглавными, так и строчными буквами, значения не имеет;

Echo "<input type=SUBMIT value='Beecmu пароль'>"; - отображаем кнопку для отправки данных из этой формы; Echo "</form><br><br> ";

1} - закрываем форму и завершаем этот блок программ.

Если мы введем пароль и нажмем на кнопку «Ввести пароль», то опять перейдем на эту же страницу redaktNovost.php, но текстовое поле для пароля и нажатая кнопка исчезнут, поскольку блок команд в фигурных скобках вы­ше исполняться уже не будет (условие if(!S GET ['parol']) станет ложным). Теперь выполнится код ниже:

$parol=$ GET ['parol']; - присваиваем переменной Sparol элемент супергло­бального массива $ GET ['parol']. Этому элементу, при нажатии кнопки «Вве­сти пароль» было присвоено содержание текстового поля для ввода пароля с именем name=parol (см. выше). Теперь пароль у нас будет храниться в пе­ременной Sparol,

Sfde="parol.txt"- в переменной Sfile будет содержаться путь к текстовому файлу, где у нас хранится зашифрованный пароль. Этот файл, если вы пом­ните, был создан заранее;

Sopen=fopen(Sfile, "г"); - открываем файл с паролем для чтения и создаем его идентификатор в виде переменной Sopen;

$read=fread($open, filesize(Sfile)); - используя функцию fread, считываем со­держимое файла с паролем и присваиваем его переменной Sread. Функция Filesize(Sfde) возвращает общее количество байтов в файле. Получается в на­шем случае, что функция fread считывает все байты файла, ибо в качестве второго аргумента этой функции стоит общее число байтов в файле. Можно, конечно, вторым аргументом использовать просто число, например 100 (что мы и делали раньше). Сто байт будет достаточно для прочтения содержимого файла с паролем;

Fclose(Sopen); - закрываем файл с паролем;

If(md5(Sparol)^ =$read) - здесь проверяется условие, соответствует ли вве­денный вами пароль, который мы шифруем функцией md5, тому, что нахо­дится у нас в переменной Sread. А в эту переменную было записано содер­жимое файла с паролем, который мы создали раньше. Причем пароль там то­же зашифрован функцией md5. Естественно, если зашифрованные пароли совпадают друг с другом, то данное условное выражение будет истинным и выполнится большой блок команд ниже в фигурных скобках под номе­ром 2;

2{ - для удобства понимания (это я указал чуть выше) я нумерую фигурные скобки, чтобы было видно, где начинается, а где заканчивается данный блок команд. Это очень важно, поскольку внутри этого блока будут другие под­блоки со своими фигурными скобками. Можно легко запутаться; Snov=fopen("novosti.txt", "г+"); - итак, если пароль введен правильно, откры­ваем файл с новостями novosti.txt для чтения;

@$redakt=fread($nov, filesize("novosti.txt")); - считываем этот файл полно­стью и присваиваем считанное переменной Sredakt. Символ амперсанда пе­ред командой @ подавляет возникающие ошибки. Дело в том, что если файл с новостями еще пуст (допустим, вы еще не записали ни одной новости), то данная команда вызовет ошибку, поскольку функция fread не сможет про­честь пустой файл. Эта ошибка в общем-то незначительная, и ее можно пода­вить символом @:

Fclose($nov); - закрываем файл с новостями;

Echo "<form action=redaktNovost.php method=GET>"; - выводим форму для редактирования файла с новостями;

Echo "<textarea name=novosti cols=50 rows=15 wrap=virtual>$redakt </textarea>"; - создаем большое текстовое поле или текстовую область с именем name=novosti шириной в 50 символов и высотой в 15 строк. Здесь можете задать другие, удобные для вас параметры. Атрибут wrap включает автоматический перенос слов на другую строку. В эту текстовую область уже будет выведено содержлмое файла с новостями, которое у нас в переменной $redakt. Эта переменная, как вы видите, указывается между тегами <textarea> и </textarea>;

Echo "<input type=HIDDEN name=parol value=$parol>"; - вводим скрытое поле. Оно нам нужно для передачи переменной с паролем. В данном случае на страницу, которую мы указали в теге <form> (т. е. на эту же страницу), передастся переменная $parol. Она будет находиться в элементе супергло­бального массива $ GET['parol']. Дело в том, что если мы эту переменную не передадим, то после нажатия кнопки этой формы и перехода опять на эту же страницу (страница как бы заново перезагрузится) элемент суперглобаль­ного массива $ GET ['parol'] снова не будет определен, и в браузер снова вы­ведется форма с текстовым полем для пароля (см. начало кода);

Echo "<input type=СНЕ СКВ OX name=new CHECKED > Новая запись (добав­ляется дата записи)<Ъг>"; - создает флажок в виде маленького квадратика. Атрибут checked указывает, что данный флажок отмечен галочкой. Зачем нам этот элемент, поймете позже;

Echo "<input type^SUBMIT Уа1ие=Добавить>"; - кнопка для отправки дан­ных из этой формы. Добавив в текстовую область новую информацию, на­жимаем на эту кнопку и вновь переходим на эту же страницу;

Echo "</form> "; - закрываем форму;

If(isset($GET['novosti'])) - снова условный оператор, который проверяет при помощи функции isset, существует ли элемент суперглобального массива $ GET ['novosti']. В этом элементе, как вы уже догадались, находится уже из­мененное содержимое текстовой области, которой (см. выше) мы присвоили имя name=novosti. Бхли условие истинно, то выполнится блок команд в фи­гурных скобках под номером 3;

3{

Snovosti=S_GET['novosti']; - переменной Snovosti присваиваем измененное содержимое текстовой области. Это содержимое уже будет отличаться от со­держимого в переменной Sredakt (в этой переменной, как указывалось выше, находится содержимое текстового файла новостей до внесенных изменений). Теперь нам остается заменить в файле novosti. txt старое содержимое новым;

Sdata=date('d.m.Y'); - в переменную Sdata, при помощи функции date записы­ваем текущую дату в формате, как указанно в круглых скобках (день, месяц, год);

$nov=fopen("novosti.txt", "w+"); - открываем текстовый файл с новостями, стирая старое содержимое;

If($_GET['new']==true) - снова условный оператор. В элементе супергло­бального массива $_GET['new'] содержится информация о состоянии флажка CHECKBOX в форме. Если помните, мы присвоили ему имя name=new. Если флажок отмечен галочкой, то элемент $_GET['new'] возвращает значение True. В этом случае условие истинно и выполнится код между фигурными скобками под номером 4;

4{

Fwrite($nov, "Snovosti"."(Sdata)"."п"); - а если условие истинно (флажок от­мечен), то делаем запись в текстовый файл, которому мы присвоили иденти­фикатор Snov. Эта запись состоит (второй аргумент функции) из нового со­держимого текстовой области (в переменной Snovosti). К этому содержимому методом конкатенации (с помощью точки) добавляется текущая дата. Затем добавляется символ перевода строки «п». В результате выполнения этой ко­манды в файл novosti.txt запишется новая информация, в конце которой в круглых скобках будет стоять дата записи. Затем курсор перейдет на новую строку, чтобы потом начать с нее новую запись;

4}

Else - если прошлое4 условие ложно, т. е. мы убрали галочку с флажка CHECKBOX (нам не нужно добавлять новую запись, а просто отредактиро­вать старые), то новую запись запишем по-другому;

Fwrite(Snov, "Snovosti"); - в данном случае мы просто запишем в текстовый файл novosti.txt обновленное содержимое. Дату и перевод строки ставить не нужно;

5}

Fclose(Snov); - закрываем файл с новостями;

3} - закрывается скобка под номером 3, т. е. прекращается блок команд ус­ловного оператора if(isset(S_GET['novosti'])) (см. выше);

2} - прекращается блок команд истинности условного оператора If(md5($parol)=^Sread). Весь этот большой блок - от открывающейся до за­крывающейся фигурной скобки под номером 2 - выполнится, если вы пра­вильно ввели пароль;

Else if($parol) - если пароль был введен неправильно и переменная Sparol Существует, то выполнится команда в фигурных скобках под номером 6. Можно было, конечно, юсле оператора else не задавать дополнительного ус­ловия if($parol), проверяющего существование переменной Sparol, но в этом случае при запуске программы выполнилась бы и приведенная ниже строчка. Когда мы запускаем эту программу, то переменной Sparol еще не существует, но в коде-то она присут ствует при проверке условия if(md'5(Sparol) ==Sread) И получается, что сразу при запуске программы это условие, естественно, ложно, поэтому вместе с текстовым полем для ввода пароля, мы увидим и надпись, что введен негравильный пароль. Поэтому мы и проверяем сущест­вование переменной Sparol, чтобы приведенная ниже строчка не выполня­лась сразу же после запуска этой программы; 61

Echo "Неправильный пароль!"; - надпись в браузере в случае ввода неверного пароля; б/

?> - конец РНР-кода;

</bodv> - конец основной части документа; </html> - конец HTML-кода.

Прежде чем запустить эту программу, полностью очистите содержимое текстового файла novosti.txt и сохраните его. Теперь запустите разобранную выше программу redaktNovost.php. Введите правильно пароль (тот, который вы вводили и шифровали при помощи программы newparol.php). Откроется текстовая область. Она будет пуста, поскольку вы должны были стереть со­держимое файла новостей. Напишите там фразу «Первая новость» и нажмите на кнопку «Добавить». В браузере вы должны увидеть свою надпись (рис. 5.8).

Как видите, к записи автоматически добавилась текущая дата, а курсор перешел на другую строчку. Добавьте несколько других строк, например, «вторая новость», потом «третья новость» и т. д. до строчки «шестнадца­тая новость». Не поленитесь это сделать, пригодится.

Уберите галочку у надписи «Новая запись...», измените какую-нибудь надпись и нажмите на кнопку <Добавить». В этом случае дата не должна до­бавляться. Перезапустите данную программу и введите неправильный па­роль. После нажатия кнопки «Ввести пароль» в браузер выведется надпись: «Неправильный пароль!».

^ ffi Address: ;http:/Vlocalho$t/MyBook/noYostiAedaktNovost php? parolj Q

1& Ш

Редактирование

Первая новость(15.08.2007)

Р Новая запись (добавляет*

Добавить 1 • '

Рис. 5.8

Откройте файл novosti.txt. Там вы увидите все введенные вами строчки. Теперь запустите программу, где все эти строчки выводятся в окно браузера. Если помните, это программа novl.php (листинг 5.4). После запуска в браузер выведутся последние 5 новостей. Если нужно, чтобы в браузер были выведе­ны все новости, то измените переменную $chislo, которая определена в файле Novl.php (листинг 5.3). Там указано, что $chislo=5. Измените это число, на­пример, на 1000 и сохраните файл. Запустите программу novl.php. В одно­колонную таблицу будут выведены все новости, по крайней мере пока их меньше, чем 1000. Все это хорошо, но вы, наверное, согласны с тем, что выводить все новости на одну страницу нецелесообразно. Допустим, у вас 1000 новостей или каких-нибудь других записей. Вы хотите, чтобы на стра­нице было не более пяти новостей. Остальные новости (тоже по пять) нахо­дились бы на других страницах, причем на каждой из страниц должны быть ссылки на остальные страницы. Эти остальные страницы создавать самому не нужно. Как я уже указывал выше, страница будет всего одна, на которую будет выводиться та или иная пятерка новостей, в зависимости от параметра. Ссылки на другие страницы - это ссылки на одну и ту же страницу (на стра­ницу с новостями), но с другими параметрами. Все это вполне реализуемо. Вы будете только записывать новости в текстовый файл при помощи создан­ного нами интерфейса redaktNovost.php. Все остальное за вас сделает про­грамма! Эту программу мы с вами сейчас и создадим.

Для начала нам нужно немного изменить программу novl.php. В коде этой программы (листинг 5.3) удалите строчки цикла foreach($lolo as $linel).

Этот цикл, если вы помните, выводит последние 5 новостей в браузер, но нам теперь нужно, чтобы зыводились все новости на нескольких страницах, по 5 новостей на каждой. Следовательно, в коде листинга 5.3 останутся всего 4 строчки:

Листинг 5.7 (исправленный листинг 5.3 программы Novl. php) <?Php

$filen="novosti. txt";

$chislo=5;

$Iolo=file($filen);

Krsort(Slolo);

?>

Данная программа будет только формировать массив новостей (строк) из текстового файла и сортировать в порядке, обратном их поступлению. Что же касается программы nov2.php, которая выводит новости в одноколонную таблицу, то нам ее придется почти полностью переделать, а лучше этот файл вообще удалить и создать новый, что мы и сделаем. В нашем РНР-редакторе создайте новую страницу. Назовите ее new 1.php и сохраните ее в папке no­vosti. В листинге 5.8 приведена программа для страницы с новостями New 1.php. Постарайтесь сначала разобраться сами в этом коде (если не смо­жете, разбор кода приведен ниже, после листинга 5.8), а уж потом набрать его в РНР-редакторе.

Листинг 5.8 (new 1.php) <html> <head>

<Ш1Е>Новости Сайта</titJe> <style type="text/css">

#lolo{font-size:12pt; color:brown; font-family:Comic Sans MS}

</sty! e> </head>

<body bgcolor="cyann>

<center><b id="Iolo" style="font-size:20pt">HoBoc™ canTa</b></centerxbr> <table width=M50%" border="2" bordercolor="green" bgcoior="silver" id="loIoM><trxtd> <?php

If (!$_GET[4'J)

{

$1=1; }

Else {

$i=$_GET|'i'];

}

Include ("novl. php");

Foreach($lolo as $line2)

{

$j++;

If(($j>$chislo*$i-$chislo)&&($j<=$chislo*$i)) {

Echo $line2."<br><br>";

}

}

Echo"</td></trx/table>"; echo "<centerxp>";

For($m=l; $m<=$j/$chislo+l; $m++) {

If ($m=$i) {

Echo "<b>$m</b>";

}

Else {

Echo "<a href='newl. php? i=$ml><b>$m</b></a>";

}

}

Echo "</px/center>"; ?>

</body> </html>

Наибольшая часть кода вам должна быть понятна. Вначале при помощи html-тегов создаем одноколонную таблицу. В эту таблицу записывается 5 но­востей. Какие это будут по счету новости, зависит от значения переменной $I. Значение этой переменной (параметр /) мы передадим странице с новостями Newl.Php в адресной строке браузера (см. разд. 5.1). Разберем подробно лис­тинг 5.8. Постарайтесь понять сам принцип передачи параметра I на страни­цу. Это очень важно, поскольку этот прием мы будем использовать при соз­дании форума или при размещении на своих web-страницах картинок, фото­графий и т. п.

<html> - начало HTML-кода. Некоторые строчки ниже оставляю без ком­ментария, поскольку их назначение был рассмотрено в прошлых программах;

<head>

<titlЕ>Новости сайта</titIе> <style type= "text/ess ">

#lolo{font-size: 12pt; color:brown; font-family: Comic Sans MS}

</style>

</head>

<body bgcolor="cyan">

<center><b id= "lolo" style= "font-size:20pt">Новости сайта</Ь> </center> < br>

<table width="50%" border="2" bordercolor= "green" bgcolor="silver" id="lolo"><tr><td> - создаем одноколонную таблицу, задавая ее ширину и цвета по своему усмотрению. При помощи тегов <tr> и <td> открываем, соответственно, строку и единственную в этой строке ячейку;

<?php - начало РНР-кода;

If (!$_GET['i'J) - при загрузке данной страницы, мы должны сначала опреде­литься со значением переменной $i. Ведь от нее зависит, какие новости будут выводиться. Смысл условия следующий: если переменная $i не получена (или мы ее не указали), то мы присваиваем ей значение единица;

(

$i=l; }

Else - иначе, если мы задали значение / в строке браузера, например, Newl.php?i=2, то присваиваем переменной $i указанное значение (это значе­ние будет храниться в элементе суперглобального массива $_GET['i']);

{

$i=$_GET['i'J; }

Include ("novl.php"); - вставляем в наш код содержимое файла novl.php. В том файле, как нам известно, содержится код, который формирует массив новостей $lolo из текстового файла и сортирует новости;

Foreach($lolo as $Нпе2) - функция foreach обходит массив, указанный в пере­менной $lolo, построчно (см. код программы novl.php в листинге 5.7), т. е. выполняется цикл, причем столько раз, сколько строчек, т. е. записанных но­востей, в массиве Slolo. При каждом выполнении цикла, переменной $Нпе2 Присваивается содержимое очередной строки, которое потом будет выво­диться в окно браузера;

1{ - начало цикла foreach. Весь приведенный ниже небольшой блок команд будет исполнен до закрывающейся фигурной скобки под номером 1. Здесь я снова нумерую попарно фигурные скобки, чтобы вы в них не запутались;

$j++; - вводим счетчик цикла для подсчета количества новостей или других записей. При каждом исполнении цикла он будет увеличиваться на единицу;

If(($j>$chislo*$i-$chislo)&&($j<=$chislo*$i)) - условие, указывающее на ин­тервал номеров выводимых новостей на страницу. Например, при $i=l усло­вие будет истинно, если номера новостей ($j) будут соответствовать интерва­лу от 1 до 5. Переменная Schislo, если помните, равна 5. Это количество вы­водимых на страницу новостей. Переменная Schislo задана в файле novl.php, А сам файл был вставлен в эту страницу при помощи оператора include', 2{

Echo $line2."<br><br>"; - если условие if истинно, новость выведется на страницу;

2} - окончание условия if для вывода новостей на страницу; 1} - окончание цикла foreach',

Echo"</td></tr></table>"; - заканчиваем (закрываем) таблицу для новостей на странице;

Echo "<center><p>"; - после таблицы с 5 новостями, мы должны разместить ссылки на другие таблицы с другими 5 новостями. Ссылки выводим в центре, в отдельном блоке <р>;

For($m=l; $m<=$j/$chislo+1; $т++) - при помощи цикла for выводим ссыл­ки на остальные страницы с новостями. Страниц с новостями у нас будет не­сколько, но все они как бы будут объединены в одну. Будет меняться только параметр $i и в зависимости от этого параметра на страницу будет выводить­ся та или иная порция из пяти новостей. В переменной $j у нас хранится об­щее число всех новостей в массиве $lolo. Число $j/$chislo+l означает, сколь­ко всего должно быть страниц с новостями. Отсюда счетчик $ш означает у нас как бы номер страницы с новостями;

3{

If ($m==$i) - проверяется условие, которое я сейчас попытаюсь объяснить. Итак, на странице, например newl.php?i=l, будут ссылки на другие таблицы с новостями (на страницы с другим параметром $i). Нам нужно сделать так, чтобы не срабатывала бы ссылка на ту страницу, на которой находится посе­титель. Например, если посетитель находится на второй странице (в этом случае $i=$m=2), то зачем ему ссылка на вторую страницу? Выведется толь­ко числовой номер страницы (выполнится команда между фигурными скоб­ками под номером 4);

Echo "<а href ='new 1.php? i=$m'><b>$m</b></a>"; - выводим ссылки на страницы с другими параметрами $i, на которых посетитель еще не нахо-

Дится;

3} - окончание цикла вывода ссылок;

Echo "</p></center> "; - закрываем блок ссылок;

?> - конец РНР-кода;

Результат работы программы приведен на рис. 5.9. При помощи про­граммы redaktNovost.php (листинг 5.6) я ввел 23 строки, т. е. 23 новости. На новостной странице находятся последние 5 новостей. На следующих страни­цах (с другим параметром /) находятся более старые новости (рис. 5.10).

4{

Echo "<b>$m</b>";

4}

СОЗДАНИЕ СТРАНИЦЫ С НОВОСТЯМИ САЙТА

Просмотрите другие ссылки на страницы с новостями и посмотрите в строке браузера, как при этом меняется параметр /.

Mjfc ^b/- Address httpV/'loealhost/riovosti/'newl php|

Новости сайта

Д&сщцать третья и«»ость.(24,12.2008) Дкадцоть втора* Ho»Octw(17 02.2008) двадцать парю* Ho*Octi»(17.02.2008) двадцатая М«»9СТЬ(!|$.02. СОЗДАНИЕ СТРАНИЦЫ С НОВОСТЯМИ САЙТА девятнадцатая Ho»octw(15.02.200S)

Рис. 5.9

$ Address. hMp /VlocalhostWosti/newl php? i=4 Q fx|

Новости сайта

Ьсеьма* но*о<ть(13.02.2008) Свцьмш» H9»4>Ctb{13.02.2008}

Пятая тл&€гь(02,02200Ш) Четв${**ш; к»«оеть(02&2.&008)

Рис. 5.10

Если вы разобрались в листинге 5.8, го должно быть понятно, что про­грамма сначала добавляет новую запись в массив новостей, а затем все ново­сти записываются разом в файл novosti.txt, полностью удаляя оттуда старую информацию. В конце ставится текущая дата. Я так сделал потому, чтобы вы могли не только записывать новые записи, но и редактировать старые при помощи того же интерфейса. Можно было бы упростить программы newl.php И redaktNovost.php так, чтобы вы только добавляли новые записи к старым, не перезаписывая текстовый файл с новостями. Нечто подобное мы рассмот­рим в следующей главе, когда будем создавать книгу отзывов посетителей на странице со статьями.

И последнее, откройте нашу главную страницу сайта index.php. Нажмите на надпись (ссылку) «Новости сайта». Вы должны оказаться на странице с новостями newl.php. Если такого не произошло, проверьте, правильно ли указана ссылка (листинг 3.6). В нашем случае строка кода, указывающая на страницу с новостями, выглядит так: <А href="novosti/newl.php">Новости сайта</А><Ьг><Ъг>.

Если у вас путь к файлу newl.php другой, то измените его в этой строке. Итак, страница с новостями создана. Вы можете оформить ее по своему усмотрению, например добавить баннеры, какие-нибудь картинки, рисунки.

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.