Ваш первый Сайт С использованием РНР-скриптов
ПРОГРАММА ДЛЯ ГЛАВНОЙ СТРАНИЦЫ МАГАЗИНА
Итак, в РНР-редакторе создайте новый файл и сохраните его в папке Magazin под названием magazin.php.
Листинг 9.3 (файл Magazin. php) <Html> <Head>
<Ш1е>Книжный магазин</Ш1е>
Clink rel="stylesheet" type=Mtext/css" href="stili2.cssM> <script language="JavaScriptff>
Function itog() {
Var kolich=0; var summa=0;
For(n=l; n<=(document. forma("kolM).value); n++) {
Kolich=kolich+l*document. forma(Mkniga"+n). value;
Summa=summa+document. forma("cena"+n).value*document. forma("kniga"+n).value; mess. innerHTML= "Количество заказанных книг: "+ko1ich+"<br>"+"06iuaH
Сумма заказа: "+summa; }
}
</script> </head> <body bgcolor=Mcyan">
<center><div id="lolo3">HHTepHeT-Mara3HH</div>
<div id="loloM>Bbi6EpHTe товары, которые вы хотите приобрести, указав их количество. Укажите свое имя, e-mail, адрес.<^у></се1иегхЬг><Ьг> <form action="magazin2.php" method="POST" name="forma">
<center><table width="80%" border=M2" bordercolor="green"xtr>
<?
$exten=array(".php");
$knigi="booksM;
$dir=opendir($knigi);
While($file=readdir($dir))
{
If (in_array(strchr($fiie, "."), $exten)) $c[]=$file; }
Closedir($dir);
Foreach($c as $lolo)
{
$teg=get_meta_tags("$knigi/$lolo"); $i++;
$stoimost[$i]=$teg[stoimost]; $avtor [$i)=$teg[avtor]; $nazvanie[$i]=$teg[nazvanie];
Echo "<td>$teg|avtor]<br><a href=$knigi/bookOOO$i. php target=_blank> $teg[nazvanie]</axbr>($teg[stoimost] py6.)<br>
Количество экземпляров:<ЬгХ8е1ес! name^knigaSi' onchange=itog()>
<option value=0>0</option>.
<option value=l>l</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
</selectx/td>
<input type=HIDDEN name=cena$i value=$stoimost($il> <input type=HIDDEN narne=avtor$i value=,$avtor[$i],> <input type=HIDDEN narne=nazvanie$i value='$nazvanie[$i]'>M;
If (($i/4) = is_integer($i/4)) echo"</trxtr>"; }
Echo "<input type=HIDDEN name=kol value=$i>";
?>
Строганов А. С. Ваш первый сайт с использованием РНР-скриптов </Trx/Tablex/Centerxbrxbr>
<Р align="CENTER" id="mess" style="color:red; font-famUy:Comic Sans MS"x/pxbr>
Ваше имя: <input name="imja" type="TEXT"xbr>
Ваш E-mail: <input name="emair type="TEXT"xbrxbr>
Адрес доставки: <brxtextarea name="text" cols="30" rows="10"
Wrap="virtual"x/textareaxbr>
<input type=" SUBMIT" Уа1ие="3аказать">
</form>
</body>
</html>
Разберем строчки кода. При разборе кода было бы полезно периодически посматривать на рис. 9.1. <html> <head>
<title> Книжный Магазин</Ш1Е>
<link rel= "stylesheet" type= "text/ess" href= "stili2.css">
<script language^ "JavaScript"> - начало кода на JavaScript;
Function itogQ - создаем функцию itog, которая будет подсчитывать общую стоимость заказанных книг. Потом мы эту функцию вызовем в нужном месте РНР-кода;
Ц
Var kolich=0; - вводим переменную для подсчета общего количества заказанных книг, присваивая ей первоначальное значение - ноль. В JavaScript перед переменными знак $ не ставится, а объявляется тип переменной (Var);
Var summa=0; - вводим переменную для подсчета общей стоимости заказанных книг, присваивая ей первоначальное значение - ноль.
For(n=l; П<=(document.forma("kol").value); П++) - это, как вы поняли, цикл со счетчиком п, начальное значение которого равно 1. Рассмотрим теперь второй аргумент цикла for. Параметр document в JavaScript указывает на текущий документ, т. е. на данную страницу с этим кодом magazin.php. В этом коде у нас имеется форма (см. ниже) с именем name=forma. В форме, как вы увидите дальше в коде, у нас будет элемент с именем name=kol, а параметр Value в этом элементе будет иметь значение числа выбранных разных книг. Таким образом, второй аргумент цикла, указывающий конечное значение счетчика п, будет означать количество выбранных посетителем разных книг. Цикл будет выполняться, пока п будет пробегать значения от 1 до общего числа выбранных книг;
2{
Kolich=kolich+l ^document.forma("kniga"+n).value; - каждый раз при выполнении цикла переменной kolich будет добавляться количество экземпляров очередной выбранной книги (в элементах формы с именами name=knigal, name=kniga2 и т. д., параметр value будет указывать на количество экземпляров той или иной конкретной книги);
Summa=summa+docume;it.forma("cena"+n).value*document.forma("kniga"+n) .value; - каждый раз при выполнении цикла переменной summa будет добавляться стоимость всех экземпляров очередной выбранной конкретной книги (в элементах формы с именами name=cenal, пате=сепа2 и т. д., параметр Value будет указывать на стоимость одного экземпляра той или иной конкретной книги). Короче говоря, в этой строке стоимость одного экземпляра умножается на число экземпляров конкретной выбранной книги, затем все это прибавляется общей сумме;
Mess.i/merHTML="Количество заказанных книг: "+kolich+ "<br> "+ "Общая сумма заказа: "+summo; - выводим в браузер общее число выбранных книг и их общую стоимость. Знак «+» в JavaScript является знаком соединения или конкатенации данных. Вывод в браузер в JavaScript осуществляется при помощи конструкции mess.innerHTML, где mess является своеобразной меткой или идентификатором для id. Вывод количества заказанных книг и общей их стоимости в окно браузера произойдет в том месте страницы, где будет указано: id=mess;
2} - окончание цикла for,
1} - окончание функции itog();
</script> - окончание кода на JavaScript. Если вы не поняли приведенный выше код, то сначала разберите код ниже, а потом снова разберите этот код на JavaScript. Он станет вам уже более понятен;
</head>
<body bgcolor^ "cyan ">
<center><div id= "lolo3">Интернет-магазин<Мы>
<div id="lolo">Выберите товары, которые вы хотите приобрести, указав их количество. Укажите свое имя, e-mail, Адрес. </div></center><br><br>
<form action=z"magazin2.php" method="POST" name="forma"> - выводим форму для заказа посетителем книг, количества экземпляров и для ввода его данных. После нажатия в форме кнопки «Заказать», заказ и данные посетителя будут обработаны программой magazin2.php (ее мы составим после) и отправлены вам на H-mail в удобочитаемом виде. Также заказ и данные посетителя будут выведены в окно браузера;
<center><table width="80%" border="2" bordereolor= "green"><tr> - строим таблицу, в ячейки которой мы будем выводить автора, название книги, цену книги и выпадающий список для выбора числа экземпляров заказываемой книги;
< ? - начало РНР-кода;
Sexten=array (".php"); - создаем массив Sexten с одним элементом, который будет нужен для поиска файлов с расширением php;
Sknigi= "books"; - переменной $knigi присваиваем название папки, где у нас находятся PHP-страницы с описанием товаров (books);
$dir=opendir($knigi); - открываем папку books и присваиваем ей идентификатор $dir;
While($fde=readdir($dir)) - цикл while перебирает все файлы в папке books, Каждый раз выполняя команду в фигурных скобках под номером 3;
3{
If (in_array(strchr($fde, "."), Sexten)) $c[]=$fde; - в переменной Sfde при каждом выполнении цикла у нас будет очередное название файла в папке books. Если помните, функция strchr (см. гл. 4) возвращает часть строки, начиная с символа, указанного в качестве второго аргумента этой функции, т. е. в нашем случае она возвратит только расширение файла. Далее функция in_array Сравнивает полученное расширение с содержимым массива Sexten (а там у нас элемент .php). Если полученное расширение файла совпадает хотя бы с одним элементом массива Sexten, то функция in_array возвратит true. Итак, если очередной файл, выбранный в цикле while, имеет расширение php (а страницы для описания того или иного товара будут именно с такими расширениями), то название этого файла заносится в новый массив $с. Таким образом, мы как бы отсекаем в папке books все остальные папки и файлы, не имеющие расширение php;
3}
Closedir(Sdir); - закрываем папку books;
Foreaeh($e as Slolo) - снова цикл, который будет выполняться столько раз, сколько файлов в массиве $с, присваивая очередной элемент массива $е переменной Slolo. Все тело цикла заключено в фигурные скобки под номером 4. Для наибольшего понимания кода цикла, рассмотрим его первое выполнение, когда переменной Slolo присваивается первый (точнее, нулевой) элемент массива $е. Этим элементом будет файл bookOOOl.php, который уже у нас имеется в папке books;
4{
$teg=get_metajags("$knigi/Slolo"); - при помощи функции get meta tags (данная функция была рассмотрена в гл. 6) получаем массив Steg, в котором будет содержание мета-тегов на странице bookOOOl.php. Массив будет содержать 3 элемента (для понимания можете посмотреть код страницы BookOOOl.php в листинге 9.2а): Stegfavtor] (автор книги который указан в параметре content="M. Булгаков"), Stegfnazvanie] (название книги, тоже указано в параметре content^ "Роковые яйца") и $teg[stoimost] (цена книги в параметре content^" 100");
$/'++/ - создаем счетчик для пробегания всех PHP-страниц в папке books. При первом выполнении цикла, а мы пока рассматриваем только первое выполнение, переменная Si будет равна единице ($/=/);
Sstoimost[$i]=Steg[stoimost]; - создаем массив Sstoimost, первому элементу которого {Sstoimost[I]) лрисваивается стоимость первой книги;
SavtorfSiJ=$teg[avtor]; - аналогично создаем массив Savtor, первому элементу которого {Savtor [1]) присваивается фамилия автора первой книги; Snazvanie[Si]=$teg[nazvanie]; - аналогично создаем массив Snazvanie, первому элементу которого {Snazvanie [1]) присваивается название первой книги;
Echo "<td>$teg[avtor]<br><a href=$knigi/bookOOOSi.php target=_blank> Stegfnazvanie]</a><br>($teg[stoimost] Руб.)<Ьг> - в первую ячейку таблицы выводим фамилию автора книги, название книги (оно будет являться также ссылкой на страницу bookOOOl.php) и цену книги;
Количество экземпляров:<br><select name='kniga$i' onchange=itog()> - В первой же ячейке таблицы создаем раскрывающийся список с именем Name='knigal' (при первом выполнении цикла foreach, когда Si=l). Список будет состоять из 6 пунктов (тег <option>) с цифрами от 0 до 5 {value) для выбора посетителем количества экземпляров первой книги. Цифра «О» по умолчанию будет означать, что данная книга не выбрана. Как только посетитель выберет из списка какую-нибудь другую цифру, произойдет событие onchange (выбор) и вызовется функция itog(), которая начнет считать общую стоимость всех экземпляров первой книги. Эта функция была написана в начале этого кода на языке JavaScript. Вернитесь туда и посмотрите на строчку:
Kolich=kolich+1 *docume nt.forma("kniga "+n). value
Теперь, надеюсь, она вам понятна. Переменной kolich (не забываем, только при первом выполнении цикла foreach) присваивается параметр value элемента формы с именем name='knigar (знак «+» в JavaScript обозначает конкатенацию или соединение данных). Параметр п для первой книги будет равен 1. А парамегр value - это количество экземпляров, которое выбрал посетитель для первой книги (имя name^'knigal' у нас имеет элемент формы - раскрывающийся список для первой книги). Элементы формы с именами name=cena$i и name=kol$i будут переданы для JavaScript чуть позже;
<option value=0>0</option> <option value=l> l</option> <option value=2>2</option> <option value=3>3</option> <option value=4>4</option> <option value—5>5</option> </select></td>
<input type=HIDDEN name=cena$i value=$stoimost[$iJ> - создаем скрытый элемент формы с именем (при первом выполнении цикла foreach) name=cenal и value=$stoimost[l]. Это нужно для функции itogQ кода JavaScript. Данные этого элемента формы (как и раскрывающегося списка) будут нужны для подсчета общей стоимости выбранных книг;
<input type=HIDDENname=avtor$i value='$avtor[$i]'> - создаем скрытое поле для передачи фамилии автора первой книги странице magazin2.php, которую мы создадим позже. Фамилия автора первой книги у нас в переменной $avtor[l];
<input type=HIDDEN name=nazvanie$i value='$nazvanie[$i]'>"; - аналогично создаем скрытое поле для передачи названия первой книги странице Magazin2.php;
If (($i/4) == is_integer($i/4)) echo"</tr><tr> "/ - как видно из рис. 9.1, в строке таблицы находится по 4 ячейки. Пятая книга будет уже на новой строке. Короче говоря, если число книг кратно 4, то создаем новую строку для таблицы. Математическая функция is integer, если помните, возвращает целую часть числа, отбрасывая дробную. Выражение в круглых скобках оператора if будет истинным только при $i=4, 8,12 и т. д.;
4} - окончание тела цикла foreach. Далее после 'первого выполнения этого цикла в папке books будет выбран второй файл book0002.php для второй книги (если, конечно, данные для второй книги были переданы на сервер при помощи панели администратора admin.php), и цикл повторится вновь, но со значением переменной $i, равным двум. Также будет создан раскрывающийся список с выбором количества экземпляров для второй книги. Элементы массивов $avtor[2], $nazvanie[2], $stoimost[2] будут содержать соответственно фамилию автора, названия и цену для второй книги. Функция itogQ В коде на JavaScript высчитает стоимость всех экземпляров второй книги и прибавит эту сумму к стоимости всех экземпляров первой книги (если, конечно, выбранное число экземпляров первой и второй книги отлично от нуля). Как только функция foreach переберет все книги магазина, т. е. все php - страницы в папке books, цикл между фигурными скобками под номером 4 прекратит выполняться;
Echo "<input type=HIDDEN name=kol value=$i>"; - после окончания выполнения прошлого цикла в переменной $i будет общее число различных книг в магазине. Это число мы и передадим потом странице magazin2.php при помощи скрытого поля;
?> - окончание РНР-кода;
</tr></table></cenier><br><br> - заканчиваем таблицу;
<р align="CENTER" id- "mess" style="color:red; font-family:Comic Sans MS"></p><br> - выводим в этом месте страницы, в контейнере <р>, общее количество заказанных книг и их общую стоимость, красным шрифтом типа Comic Sans MS. Все это посчитала нам функция itog(), которую мы написали в начале кода на JavaScript. Там показано, что вывод данных должен быть в HTML-теге с идентификатором id=mess (mess, innerHTML=...). Этот идентификатор мы и присвоили текстовому блоку (или контейнеру) <р>.
Ваше имя: <input name="imja" type="TEXT"><br> - создаем текстовое поле для ввода имени посетителем, заказавшего книги;
Ваш E-mail: <input name="email" type="TEXT"><br><br> - создаем текстовое поле для ввода посетителем своего электронного адреса;
Адрес доставки: <br> <textarea name="text" cols="30" rows="10" wrap="virtual"></textarea><br> - создаем текстовое поле для ввода посетителем своего домашнего адреса. Параметр wrap задает автоматический перенос строк в текстовом поле;
<input type="SUBMIT" 'а1ие="3аказать"> - после того, как посетитель магазина выбрал книги, в текстовых полях записал свои данные и нажал на кнопку «Заказать», заказ и данные посетителя передадутся для обработки на страницу magazin2.php. Сам посетитель тоже переедет на ту же страницу;
</form> - завершаем вывод формы;
</body>
</html> - окончание кода.