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

АДМИНИСТРАТИВНАЯ ПАНЕЛЬ ДЛЯ МАГАЗИНА

Начнем мы с написания файла admin.php (рис. 9.4) и потом создадим при его помощи страницы с описанием и фотографиями наших товаров. Вы про­сто будете добавлять новый товар на сервер, все остальное php сделает за вас (разместит товар на витрине и создаст отдельную для него страницу). При входе на страницу admin.php нужно будет ввести пароль. Создать зашифро­ванный пароль можно при помощи программы newparol.php, как мы это де­лали в гл. 5. Этот файл вы должны были скопировать в папку magazin. Запус­тите в РНР-редакторе файл newparol.php из папки magazin. Введите пароль (запомните его!) и нажмите кнопку «Ввести пароль» (см. рис. 9.5).

В папке magazin у вас должен появиться текстовый файл parol.txt с за­шифрованным паролем. Пароль зашифрован при помоши встроенной функ­ции необратимого шифрования md5 (если забыли, что это такое, см. гл. 5).

Создайте в РНР-редакторе новый файл и сохраните его в папке magazin Под названием admin.php. Наберите код из листинга 9.2 (желательно, сначала разберитесь в нем, а потом наберите самостоятельно).

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

<title>HoBbift Toeap</title>

<link rel="stylesheet" type="text/ess" href="stil. css"> </head> <body> <?php

If(!$_POST['paror])

{

Echo "<form action=admin. php method=POST>";

Echo "<input type=PASSWORD name=parol>";

Echo "<input type=SUBMIT name=knopka Уа1ие='Ввести пароль'>";

Echo "</formxbrxbr>"; }

$paroI=$_POST|,parol']; $file=" parol. txt"; $open=fopen($f! le, "г"); $read=fread($open, filesize($file)); fclose(Sopen);

If(md5($parol)=$read)

{

$knigi=" books"; $dir=opendir($knigi);

While($file=readdir($dir)) {

If (($file!=".")&&($file!="..")) $j=$j+l; }

Closedir(Sdir);

Echo "<form enctype^multipart/form-data' action='admin. php' method='POST'

Name=fforma'>

<>Автор книги<ЛхЬг>

<input type=TEXT name='avtor' size=50xbrxbr> <>Название книги<Л><Ьг>

<input type=TEXT name^'nazvanie' size=80xbrxbr> <>Стоимость книги<ЛхЬг> <input type=TEXT name='cena' size=30xbrxbr> <>Описание книги<ЛхЬг>

<textarea name='opisanie' rows=10 cols=50x/textareaxbrxbr>

<>Фотография<ЛхЬг>

<input type=FlLE name='zak'xbrxbr>

<input type=hidden name=parol value=$parol>

<input type=SUBMIT name^otpr' Уа1ие=,Отправить'хЬгхЬг>";

If (($_POST['otpr,]=true) && ($_POST[fnazvanie'Jo""))

{

$avtor=$_POST['avtor']; $nazvanie=$_POST [' naz anie' ]; $cena=$_POST['cena']; $opisanie=$_POST['opisanie, l; $next=$j+l;

$next="$knigi/bookOOO$next. php"; $prev="$knigi/bookOOO$j. php"; include "zagryzka. php"; $new=fopen($next, "w");

$list='<htmlxhead> <Ш1е>Книга</Ш1е>

<meta name="avtor" content="'."$avtor".,,,> <meta name="nazvanie" content=,M."$nazvanie'V"> <meta name="stoimost" content="'."$cena".,"> <link rel="stylesheet" type="text/ess" href="stili2.css"> </head>

<body bgcoloH="cyan"> <?php

$teg=get_meta_tags(basename($_SERVER[VPHP_SELFVJ));

Echo "<div id=lolo3>$teg[avtor] &nbsp $teg[nazvanie]</divxbr><hr>";

$file='".$file.'";

If (f11e_exists("fotoshop/$file")) echo "<img src="fotoshop/$ffle" border=Oxbr>"; $opisanie=",.$opisanie. M';

Echo $opisanie;

?>

</body> </html>';

Fwrite($new, $list); fclose($new); $new=fopen($next, "r"); $old=fopen ($prev, "r"); $oldread=fread($old, 1024); $newread=fread($new, 1024);

If ($oldread=$newread)

{

Fclose($new); unlink($next);

Fclose($old); }

Else

{

Fclose($new);

Fclose(Sold); }

}

Echo "<a href=,magazin. php'>BepHyTbCH в магазин</а>"; }

Else if($parol)

{

Echo "Пароль неверен!"; }

?>

</body> </html>

Разберем некоторые строчки кода: <html> <head>

<Ш1е>Новый moeap</title>

<link rel="stylesheet" type = "text/ess" href="stil.css"> - указывам на таблицу стилей stil.css, которая должна находиться в той же папке (magazin), что и данная программа (Admin.php);

</head> <body> < ?php

If(!$_POST['parol']) - если пароль еще не был получен, а при запуске данной программы это будет действительно так, элемент суперглобального массива $_POST['parol'] еще не будет определен и выполнится программный код ме­жду фигурными скобками под номером 1, т. е. выведется форма для ввода пароля. После ввода пароля в текстовое поле с именем name=parol и нажатии кнопки «Ввести пароль», мы опять попадем на эту же страницу admin.php (в теге <form> указан параметр action=admin.php), но элемент $ POST ['parol'] Уже будет определен (он будет содержать пароль, введенный вами в тексто­вое поле с именем пате=рагоГ). В этом случае код между фигурными скоб­ками под номером 1 уже не будет выполняться;

Ц

Echo "<form action^admin. php method=POST>";

Echo "<input type=PASSWORD name=parol> ";

Echo "<input type ^SUBMIT name=knopka value='Beecmu Пароль'>";

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

1} - окончание кода, выполняющегося, если еще не нажата кнопка «Ввести пароль». Если кнопка уже нажата, то выполнится только код после этой за­крывающейся скобки;

$parol=$ POST ['parol']; - присваиваем переменной $parol пароль, который был введен ранее в текстовое поле для ввода пароля;

$file="parol.txt"; - переменной $file присваиваем название файла с нашим зашифрованным паролем, который мы создали раньше при помощи про­граммы newparol.php;

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

$read=fread($open, fdesize($fde)); - считываем содержимое файла и сохраня­ем его в переменной $read

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

If(md5($parol)-=$read) - далее мы сравниваем введенный пароль (сначала зашифровав его при помощи функции md5) с зашифрованным паролем в файле parol.txt. Если пароли совпадают, то выполнится весь код между фи­гурными скобками под номером 2; 2{

$knigi= "books"; - присваиваем переменной Sknigi название каталога, где у нас будут содержаться страницы для каждого товара. Этот каталог (books) Вы должны были создать в папке magazin;

$dir=opendir($knigi); - открываем каталог books и присваиваем ему иденти­фикатор $dir

While($file=readdir($dir)) - знакомый нам цикл, который перебирает все фай­лы в каталоге, присваивая переменой $fde название очередного файла из ка­талога при каждом выполнении цикла. Чуть раньше мы присваивали пере­менной $file название файла с нашим зашифрованным паролем parol.txt. Здесь мы снова используем эту переменную, но для других целей. Старое значение переменной $file= "parol.txt" можно «затереть», так как оно уже нам не понадобится. После цикла while данную переменную можно использовать вновь для других целей, что мы и сделаем позже;

3{

If (($fde !=".")&&($fde !="..")) $j=$j+l; - данный цикл while, как вы уже поня­ли, просто подсчитывает общее количество файлов в каталоге books, т. е. ко­личество страниц для товаров (или количество товаров нашего магазина). За­чем нам это нужно, поймете позже;

3}

Closedir($dir); - закрываем каталог;

Echo "<form enctype='multipart/form-data' action='admin.php' method^'POST' name='forma'> - выводим форму с полями для ввода данных нового товара: автора и названия книги, цены книги, описания, фотографии данного товара. После нажатия кнопки «Отправить» все эти данные отправятся на эту же страницу (action^'admin.php'). Все это вам должно быть знакомо. Я лишь объясню смысл некоторых полей;

<i>Автор muau</i><br>

<input type=TEXTname= 'avtor'size=50><br><br> <1>Название Книги<Д> <br>

<input type=TEXT name= 'nazvanie' size=80><br> <br> <i>Стоимость Книги<Д><br> <input type=TEXTname='cena'size=30><br><br> <i>Описание Книги<Д><Ьг>

<textarea name='opisanie' rows=10 cols=50></textarea><br><br> <1>Фотография</1><Ьг>

<input type=FILE name='zak'><br><br> - поле для закачки с вашего компь­ютера фотографии товара;

<input type=hidden name=parol value=$parol> - передаем в скрытом поле пе­ременную $parol. Дело в том, что после нажатия кнопки «Отправить», эле­мент суперглобального массива $_POST['parol'] вновь будет не определен и опять начнет выполняться код между фигурными скобками под номером 1, т. е. нам опять придется вводить пароль. Поэтому мы вводим скрытый эле­мент с именем name=parol и со значением value=$parol. В результате после нажатия кнопки «Отправить» элемент $_POST['parol'] будет уже вновь опре­делен и ему будет присвоено значение $parol, т. е. введенный нами пароль. Если помните, мы такой прием уже делали в файле для редактирования ново­стей сайта redaktNovost.php в гл. 5;

<input type=SUBMIT name='otpr' value='Omnpaeumb'><br><br>"; - запол­нив все данные для нового товара, нажимаем на кнопку «Отправить», кото­рая имеет имя name='otpr'. Все данные передадутся, как было отмечено вы­ше, на эту же страницу;

If ($_POST['otpr']==true) - после нажатия кнопки элемент суперглобального массива $_POST['otpr] будет иметь значение true. Код между фигурными скобками под номером 4 начнет выполняться только после нажатия кнопки «Отправить»;

4{

$avtor=$ POST'[avtor]; - сохраняем в переменных содержание заполненных текстовых полей: автора книги, названия книги, цену книги, описание книги. Все эти данные, как вам должно быть известно, были переданы на эту стра­ницу методом POST, после нажатия в форме кнопки «Отправить», и сохране­ны в массиве $_POST; $nazvanie=$ POST['nazvanie']; $cena=$_POST['cena']; $opisanie=$_POST['opisanie];

$next=$j+l; - переменной $next присваиваем значение на единицу больше, чем общее количество листов для описания товаров в папке books (общего количества товаров). Дело в том, как вы увидите тремя строчками кода ниже, страницы для описания товара и размещения там его фотографии будут соз­даваться автоматически и называться так: bookOOOX.php, где X - порядковый номер страницы в папке books (название этой папки, если помните, находится в переменной $knigi). Если, к примеру, число товаров у нас равно 5, то по­следняя созданная для пятого товара страница будет иметь название Book0005.php. Если мы отправим данные для нового (шестого) товара, то должна быть автоматически сформирована новая страница ЬоокОООб. рИр; $next="$knigi/bookOOO$next.php"; - название (путь) для новой страницы, ко­торая еще только сформируется, сохраняем в переменной $next

$prev="$knigi/bookOOO$j.php"; - в переменной $prev сохраняем путь к по­следней, ранее сформированной странице. Эта переменная нам понадобится позже;

Include "zagryzka.php"; - включаем в эту страницу код для загрузки графиче­ских файлов на сервер. Файл zagjyzka.php вы должны были скопировать из папки risynki в папку magazin и немного изменить этот файл (см. разд. 9.1 и листинг 9.1);

$new=fopen($next, "w"); - создаем новый файл (новую PHP-страницу) для но­вого товара. Путь к новому файлу указан в переменной $next. Новой странице присваиваем идентификатор $new;

$list='<html><head> - далее в переменную $list мы будем писать код для

Созданной страницы;

<Ш1е>Книга<Ше>

<meta name="avtor" content="'."$avtor".'"> - на новой странице создаем ме­та-теги. Зачем нужны эти теги и как их использовать, рассказано в гл. 6, где мы при помощи мета-тегов выводили в браузер название и автора той или иной статьи. Здесь мы переносим переменные $avtor, Snazvanie и $сепа Со страницы, где находится весь этот код (Admin.php), на новую создающую­ся страницу в значение мета-тега content. Этот метод (переноса переменных на новые формирующиеся страницы) мы использовали в прошлых главах, например при формировании новых PHP-страниц для вывода мини-картинок в прошлой главе. Содержимое в мета-тегах, а именно, значения пате и con­tent заключаются в двойные кавычки; <meta name="nazvanie" content="'. "Snazvanie". '"> <meta name="stoimost" content="'. "Scena". '">

<link rel="stylesheet" type = "text/ess" href ="stili2.ess"> - на новой странице указываем на лист стилей, который должен находиться в папке book. У меня, например, он называется stili2.css;

</head>

<body bgcolor= "cyan "> < ?php

$teg=get_metaJags(basename($_SERVER['PHP_SELF'])); - элемент супер­глобального массива $ SERVERf'PHP SELF'] возвращает путь к странице, на которой находится посетитель. В данном случае он возвратит путь к этой новой странице, содержимое которой мы. и записываем сейчас в переменную $/ist. Здесь мы используем символ экранирования «» для одинарных кавы­чек, поскольку эти кавычки находятся внутри тоже одинарных кавычек (все содержание переменной $list заключено в одинарные кавычки). Само понятие экранирования объяснено в гл. 4. Функция basename, если помните, оставля­ет только название страницы с расширением. Функция get jneta Jags считы­вает содержимое мета-гегов из страницы, в данном случае из этой новой страницы, т. е. считывает содержимое мета-тегов, которые мы создали не­сколькими строчками раньше. Эта функция возвратит массив $teg (мы так его назовем) с тремя элементами: $teg[avtor] (туда запишется автор книги из пе­ременной $avtoi% которая была указана в параметре content мета-тега <meta>), $teg[nazvanie] (туда запишется название книги из переменной $naz- vanie), $teg[cena] (туда запишется цена книги из переменной $сепа)

Echo "<div id=lolo3>Stegfavtor] &nbsp $teg[nazvanie]</div><br><hr>"; - вы­водим на новой странице содержимое мета-тегов, а именно автора книги и название книги через пробел между ними (оператор &nbsp обозначает про­бел);

$fde="'.$fde.'"; - передаем на новую страницу переменную $fde. Как вы ду­маете, что она будет содержать? Перед тем как начать записывать код для новой страницы в переменную $list, мы вставили на эту (Admin.php) страницу код файла для загрузки графических изображений при помощи команды in­clude "zagryzka.php". Так вот, в этом файле (Zagryzka.php) в переменную Sfile Записывается название графического файла с фотографией, которую мы и за­качали на сервер для данного товара. Теперь эту переменную мы переносим на новую страницу;

If (file _exists("fotoshop/Sfile")) echo "<img src="fotoshop/$file" border=0><br>"; - если фотография для нового товара была закачана, т. е. файл Sfile в папке fotoshop существует, то это фото выводится на новой странице. Здесь мы тоже применяем символ экранирования для двойных ка­вычек, которые расположены внутри двойных кавычек;

$opisanie='".$opisanie.'"; - также на новую страницу переносим переменную Sopisanie, в которой находится введенное вами описание для данного товара;

Echo Sopisanie; - выводим это описание на создаваемую страницу. Итак, на образованной новой странице у нас будет написано: автор и название но­
вой книги, выведена фотография товара, а под фотографией - описание дан­ного товара (см. рис. 9.2);

?>

</body>

</html>'; - окончание кода для новой страницы, заканчиваем писать пере­менную $list

Fwrite($new, $list); - вставляем теперь код, записанный в переменной $list, На новую страницу, которой мы присвоили идентификатор $new

Fclose(Snew); - закрываем созданную страницу;

Jk

Отмена

$new=fopen($next, "г"); - далее следуют строчки кода, которые опять откры­вают только что созданную страницу, открывают предыдущую созданную страницу, считывается и потом сравнивается содержимое этих страниц. За­чем это нужно? Попробую объяснить. Если вы запустите файл с формой (admin.php) у себя на компьютере, введете данные для нового товара, загру­зите фото для товара и нажмете на кнопку «Отправить», то в браузере поя­вится форма (рис. 9.6).

Microsoft Internet Explorer

- V He удается обновить страницу без повторной отправки данных. * Нажмите соответствующую кнопку для повторной отправки данных или отмените операцию для возврата к открываемой странице.

Повтор

Рис. 9.6

При нажатии кнопки «Отмена» ничего не произойдет. Вам останется на­жать только кнопку «Повтор» и введенные вами данные повторно отправятся на сервер, а программа admin.php снова начнет формировать новую страницу с теми же данными. В результате в папке books появяться две страницы с аб­солютно одинаковым содержимым, т. е. одна и та же книга будет потом до­бавлена на витрину магазина дважды. Позже, ради эксперимента, попробуйте удалить строки кода, начиная со строки: $new=fopen($next, "г") до закры­вающейся фигурной скобки под номером 6 включительно (то, что отмечено курсивом в листинге 9.2), и посмотрите потом, как будет работать програм­ма. Она будет дважды выводить на витрину магазина один и тот же товар. Поэтому, чтобы такого не было, мы сравниваем только что созданную стра­ницу с предыдущей, и если они идентичны, то новая страница удаляется; $old=fopen ($prev, "г"); $oldread=fread(Sold, 1024); $newread=fread($new, 1024);

If ($oldread= ==$newread) - если содержимое страниц одинаково (новой и предыдущей), то выполнится код в фигурных скобках под номером 5;

5!

Fclose(Snew);

Unlink(Snext); - удаляем созданную новую страницу при помощи встроенной

Php-функции unlink (такая функция упоминалась в гл. 4);

Fclose($old);

V

Else - иначе, если содержимое страниц разное, то ничего не удаляем, а просто закрываем эти страницы при помощи функции/с/о^г; Б{

Fclose($new); fclose($old); 6}

4} - окончание кода, который выполнится после нажатия кнопки «Отпра­вить» в форме;

Echo "<а href='magazin.php'>Вернуться в магазин</а>"; - делаем ссылку для возврата на главную страницу (витрину) магазина. Эту страницу (Maga- zin.php) мы пока не создали;

2} - окончание кода, который выполнится, если введенный вами пароль для входа на страницу admin.php был верен;

Else if($parol) - иначе, если пароль был введен (переменная Sparol существу­ет), но введен неверно, то выведется об этом надпись;

7/

Echo "Пароль неверен!";

7}

?>

</body>

</html> - окончание кода.

В РНР-редакторе запустите эту программу. Сначала вам предложат вве­сти пароль. Введите тот пароль, который вы создали при помощи программы Newparol.php. Далее заполните текстовые поля, хотя бы как на рис. 9.7.

В поле «фотография» выберите какой-нибудь рисунок (формата gif jpg Или png) на вашем компьютере (можно любой, поскольку фотографии данно­го товара (книги) у вас, скорее всего, нет). Нажмите кнопку отправить. Если вы все сделали правильно, то в папке books у вас должна появиться странич­ка bookOOOl.php (можете тоже запустить ее в редакторе), содержащая назва­ние и описание книги, а также закачанную вами фотографию. Код программ­но созданной страницы может быть таким, как в листинге 9.2, а.

Листинг 9.2, а (файл BookOOOl. php. Его создавать не нужно!

Он создастся автоматически, т. е. программно) <Html> <Head> <Ш1е>Книга</Ш1е>

"«г:

АДМИНИСТРАТИВНАЯ ПАНЕЛЬ ДЛЯ МАГАЗИНА

<meta name="avtor" content="M. Булгаков"> <meta name="nazvanie" content=" Роковые яйца"> <meta name="stoimost" content="100"> <link reI="stylesheetM type="text/ess" href="stili2.css"> </head>

<body bgcolor="cyan"> <?php

$teg=get_meta_tags(basename($_SERV ER[,PHP_SELF, J));

Echo "<div id=lolo3>$teg|avtorj &nbsp $teg|nazvanie)</div><br><hr>";

$file=" Bulgakov. jpg";

If (file_exists("fotoshop/$file")) echo "<img src="fotoshop/$file" border=0><br>"; $opisanie=" Бессмертное произведение великого писателя";

Echo Sopisanie;

?>

</body> </html>

Как видно из кода, введенные нами данные о книге (автор, название, це­на) будут храниться в мета-тегах <meta>. Данные об авторе книги и ее на­звании чуть ниже выведутся в браузер. Затем выведется фотография книги Bulgakov.jpg, а под ней описание книги. Сама фотография должна быть в подпапке fotoshop. Итак, первый товар на витрине магазина у вас есть.

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

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

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

ИСПОЛЬЗОВАНИЕ СЕРВИСА 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 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.