ПРИМЕР CОЗДАНИЯ ИНТЕРНЕТ-АПТЕКИ С ПОМОЩЬЮ DREAMWEAVER 8

Познакомимся с работой Dreamweaver на примере создания интернет-аптеки.

В пункте меню "file" выберем подпункт "new". Сделаем страницу динамической, т.к будем использовать РНР. Сохраним под именем index.php в папке APTEKA1. В свойствах страницы (page properties) выберем размер и цвет шрифта, фон. Вставим таблицу из одной строки и 2-х столбцов для украшения и заголовков. В пункте меню "site" выберем "newsite". Назовем сайт Apteka1.

создание локального сайта

Рис.1 Заполнение категории "local info"

Далее заполним категорию "Remove Info". Здесь находится информация об "удаленном сервере"- localhoste. У меня он находится на диске D- D:\Program Files\apache group\Apache2\htdocs\APTEKA1\. Localhost создается при установке сервера APACHE. Localhost используется для отладки сайта, своего рода имитация удаленного сервера.

remove info

Рис. 2. Заполнение категории "Remove info".

домашняя страница

Рис.3. Заполнение категории Site Map Layout.

В окне Home page указывается адрес главной страницы. У нас она index.php.

Если Вы хотите откорректировать информацию о сайте, выберите в основном меню "Site/Manage sites":

менеджер файлов

Рис 4. Меню менеджера сайтов.

Выберете соответствующий сайт и нажмите на "edit". Вставим какой-нибудь рисунок в таблицу. Для этого выберем в меню "Insert/ ":

вставка рисунков

Рис. 5. Вставка рисунка romashka.jpg

Поместим этот рисунок в отдельную ячейку. Для этого вставим курсор ячейку с рисунком и нажмем на знак разделения (две прямоугольные скобки в левом нижнем углу) и указываем, что мы делим столбец на 3 столбца. В правую крайнюю ячейку поместим еще рисунок. Между рисунками напишем "ИНТЕРНЕТ-АПТЕКА".

Создание базы данных и таблиц

Воспользуемся услугами администратора баз данных phpMyAdmin(см. страницу о работе с администратором). В браузоре наберем http://localhost/admin28/index.php. Admin28- это мое название папки, в котором находятся файлы администратора. Мы создадим базу данных под названием APTEKA1. В ней создадим таблицу под названием prepar, при создании таблицы укажем количество полей (9) .По умолчанию все поля будут иметь тип VARCHAR(текстовый). Введем названия полей(id(счетчик,для него атрибут UNSIGNET , дополнительно- auto_increment (автоматически увеличивается на 1) и выберем флажок под рисунком ключа),name(наименование),seria,postav(поставщик), nal(наличие),cena, kolzak,annot(аннотация),nazn(назначение)) и их типы. тип smallint-целое число, float-дробное число. При регистрации базы в Dreamweaver 8 таблицы еще называются наборами данных.

заполнение полей

Рис. 6 Создание структуры таблицы prepar для информации о препаратах.

После ввода информации нажмем "сохранить". Аналогично создадим таблицу для корзины с заказанными товарами KORZINA с полями id,nom,seria,name,postav,cena,kolzak. База данных находится в папке Program Files/MySql Server4.1/data

 

создание корзины

Рис. Создание таблицы korzina в администраторе баз данных.

 

Для работы с базой данных и таблицами зарегистрируем нашу базу данных в Dreamweaver 8 . В правой части Dreamweaver 8 в разделе application и закладке databases нажмем "+ ". Далее нажмем на MySQL Connection

создание соединенияЗаполнение соединения

Рис.7 Создание MySQL соединения с базой данных apteka1

Появится поле ввода MySQL server служит для задания интернет-адреса сервера данных. В поля ввода User name и Password заносятся соответственно имя пользователя и пароль для подключения к базе данных(они определяются при установке MySQL. Поскольку сервер установлен на нашем же компьютере, введем туда localhost. Root-главный пользователь. Далее нажмем на вкладку Files, на "+ " около папки Site , на "+" папки Connection и на файл apteka1.php. Dreamweaver 8 покажет :

<?php
# FileName="Connection_php_mysql.htm" // комментарии
# Type="MYSQL" //комментарии
# HTTP="true" //комментарии
$hostname_apteka1 = "localhost"; // MySQL server
$database_apteka1 = "apteka1";// название базы
$username_apteka1 = "root"; // MySQL пользователь
$password_apteka1 = "пароль";
$apteka1 = mysql_pconnect($hostname_apteka1, $username_apteka1, $password_apteka1) or trigger_error(mysql_error(),E_USER_ERROR);
?>

Первые четыре выражения задают значения переменных, содержащих, соответственно, интернет-адрес сервера данных, имя базы данных, имя пользователя и его пароль. Все это мы задали в диалоговом окне MySQL Connection.

А вот на пятом выражении нужно остановиться особо. В нем используются две встроенные функции РНР, с которыми мы еще не знакомы.

Первая функция — mysql_pconnect — устанавливает постоянное соединение с сервером данных. В качестве аргументов она принимает интернет-адрес сервера данных, имя и пароль пользователя. Результатом этой функции будет особое ненулевое число (идентификатор), однозначно идентифицирующее установленное соединение и присваиваемое переменной $apteka1 (опять же — имя этой переменной совпадает с именем зарегистрированного соединения).

Вторая функция — trigger_error — выводит на экран (конечно, не непосредственно на экран, а на Web-страницу) сообщение об ошибке. Первым аргументом этой функции должно быть само сообщение об ошибке в строковом виде (которое в нашем случае возвращает третья по счету функция mysql_error), а вторым — числовой код ошибки (почти всегда используется значение константы E_USER_ERROR). А теперь давайте выясним, как вычисляется это пятое выражение из приведенного ранее сценария. Предположим, что РНР удалось установить соединение с MySQL, и функция mysql_pconnect вернула корректный идентификатор и присвоила его переменной $site. Тогда результат вычисления

$apteka1 = mysql_pconnect($hostname_apteka1, $username_apteka1, $password_apteka1) это переменная

or trigger_error(mysql_error(),E_USER_ERROR); - ошибка

создание набора препараты

Рис. 8. Создание набора записей

Теперь сообщим о наших таблицах. У нас будет два соответтвующих набора записей (RECORDSET))- препараты и корзина. Перейдем к панели Bindings.

Нажмем на "+" и RECORDSET(QUERY).

запонение набора препараты

Рис.9 Заполнение информации о наборе записей о препаратах.

Назовем набор prepar , соединение у нас apteka1, таблица Prepar.Фильтровать пока не будем .Отсортируем по полю Name по алфавиту(ascerding).Аналогично создадим набор для таблицы korzina и назовем korzina.

Рассмотрим фрагмент кода нашего скрипта о выборе записей из таблицы prepar:

mysql_select_db($database_apteka1, $apteka1);/* Выбор базы данных */
$query_prepar = "SELECT * FROM prepar ORDER BY name ASC"; /* Создание SQL запроса по выбору записей из таблицы prepar*/
$prepar = mysql_query($query_prepar, $apteka1) or die(mysql_error()); /* Исполнение SQL запроса */
$row_prepar = mysql_fetch_assoc($prepar);
$totalRows_prepar = mysql_num_rows($prepar);
/* количество вернувшихся строчек в результате*/

Продолжим работу со страницей. К таблице с заголовком добавим таблицу с двумя столбцами и с 2-мя строками.

добавление основной таблицы

Рис. 10. Добавление таблицы из 2-х столбцов и 2-х строк

Вставим во 2-й столбец и 2-ю строку вывод информации о препаратах. Для этого создадим еще таблицу с заголовками,состоящую из 8-ми столбцов и 2мя строками. Заполним заголовки(№п/п,Наименование,Цена,Наличие,Поставщик,Заказ,Назначение,Аннотация).

заголовки к препаратам

Рис.11. Вставка новой таблицы с заголовками полей таблицы prepar

Далее занесем имена полей таблицы prepar. Для этого на вкладке Application/bindings нажмем на "+" напротив таблицы Prepar. Появится список полей таблицы. Берем мышкой поле ID и перетаскиваем в ячейку под "№ п/п". Тоже самое проделываем с другими полями таблицы. Нам надо вывести записи, т.е. сделать вывод в цикле 2-й строки таблицы. Для этого выделим всю 2-ю стоку таблицы, нажмем на вкладку Server Behaviors, нажимаем на "+" . В списке операций выберем Repeat. На экран выведется форма для заполнения: Здесь есть выбор- вывести определенное кол-во строк или все записи(мы выбрали все). На этом рисунке также видны названия полей - {prepar.id}, {prepar.name} и т.д. После нажатия на "OK" над ячейкоя с порядковым номером таблицы появится слово "Repeat" .

создание цикла для таблицы

Рис.12. Занесение имен полей таблицы prepar и создание цикла (Repeat Region)по записям

Но у нас нет информации о препаратах в таблице -создадим скрипт с формой для заполнения таблицы . Сначала создадим "административную" папку для скриптов операций с таблицами- ADMIN. В нее поместим новый скрипт prep_add.php с формой для добавления информации о препаратах в таблицу. На вкладке Application в databases сделаем MySQL connection и в Bindings набор записей Prepar (как на главной странице). .Для создания формы в основном меню выберем insert/form/form. На странице появится штриховой квадрат. В него будем заносить информацию о полях. Поле ID не будем заносить, т.к. значение его будет автоматически увеличиваться на 1-цу при создании новой записи (это мы указали при создании таблицы). Вставим курсор в форму, выберем insert/form/TextField для создания окна для поля name . Введем в окно для Label слово "Наименование" , "OK" (рис. 13). В окно TextField введем название этого поля- name (рис. 15). В Charwith длину поля для заполнения-60 и максимальную длину для поля-60. Аналогично заполним для других полей(цена,наличие, поставщик,назначение,аннотация).В аннотации указывается путь к файлу с аннотацией-ее можно отсканировать и поместить в папку s

Запонение формы для вставки полей

Рис 13. Заполнение формы для поля name

Результат

Рис 14. Результат операции -окно для введения наименования препарата

Результат

Рис. 15. Описание поля name в форме

Для занесения информации в таблицу нужна кнопка- insert/Form/Button. В окошке для Label введем слово "Добавить"- оно будет написано около кнопки. Чтобы кнопка сработала на вставку записи с информацией о препарате, на вкладке ServerBehaviors нажмем на "+" и выберем оператор insert Record(вставка записи). Заполним предложенную оператором форму:

вставка записи

Рис. 16. Описание столбцов таблицы prepar

Особое внимание обратите на поле ID. При создании таблицы обязательно нажать на знак ключа напротив этого поля и сделать его автоматическим-иначе появится ошибка о дубле значений. В нижнем окошке указывается путь к файлу, к которому после ввода данных перейти программа.После нажатия на "ОК" под кнопкой появится особый знак:

Заполнение insertrecord

Рис. 17. Скрипт с формой для введения информации о препарате

Если будут сбои при вызове скрипта добавления записи, то лучше замените вызов файл Apteka1.php на его содержимое (в начале кода скрипта):

<?php virtual('/apteka1/Connections/apteka1.php'); ?>
<?php

Замените на:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_apteka1 = "localhost";
$database_apteka1 = "apteka1";
$username_apteka1 = "root";
$password_apteka1 = "пароль";
/* Соединение с сервером базы данных */
$apteka1 = mysql_pconnect($hostname_apteka1, $username_apteka1, $password_apteka1) or trigger_error(mysql_error(),E_USER_ERROR);

По крайней мере, у меня были проблемы до такой поправки. Можно еще больше упростить. Для этого перепишите в папку со страницами сайта файл apteka1 .php и сделайте его вызов:

<?php

include("apteka1.php");

/* Соединение с сервером базы данных */
$apteka1 = mysql_pconnect($hostname_apteka1, $username_apteka1, $password_apteka1) or trigger_error(mysql_error(),E_USER_ERROR);

После запуска скрипта prep_add.php, занесения информации о препарате, на главной странице должна выйти введенная информация о препарате.

При работе с информацией появляется потребность в корректировке, удалении записей. для этого создадим скрипт администрирования таблицы с препаратами - admin_prep.php. На новой динамической странице(для создания удобно нажать на знак с комментарием "new" ). Вставим таблицу с одним столбцом и двумя строками и увеличим ее. Далее выделим таблицу из основного файла index.php с препаратами и скопируем ее в буфер, затем вставим во 2-ю строку таблицы adm_prep.php и поставим таблицу в центр:

копирование таблицы

Рис. 18. Копируем таблицу из файла index.php

Также, как и в скрипте для добавления записей введем данные о базе данных и таблице. Для этого в application/Bindings нажмем на "+" и создадим набор записей Recordset(см. выше) c именем prepar. если запустить скрипт в обозревателе, то выведется информация о препарах, хотя при копировании в ячейках не будут указываться имена полей, а знаки операций на РНР(потом появятся имена полей таблицы). Добавим два столбца к последнему столбцу с аннотацией (modify/table/insert Rows or columns).

добавление столбцов

Рис. 19. Форма для добавления столбцов (или строк) до или после ячейки.

Вставим в первую пустую ячейку слово "удалить", во вторую-"изменить", а в ячейку рядом со словом "Назначение" слово "добавить".

Добавление столбцов

Рис.20. Создание скрипта по работе с таблицей prepar

Выделим слово "Добавить" и в окне LINK введем имя скрипта добавления prep_add.php.

Теперь нам надо создать новый динамический скрипт для удаления ячейки- prep_delete.php.Совершим опять знакомую операцию-Application/Bindings/"+"/Recordset . При заполнении также назовем набор-Prepar, выберем таблицу prepar, без фильтрации, сортировка по name . Перейдем к Application/Server Behaviors/"+" . Далее заполним форму Delete Record, которую предложит Server Behaviors .Мы будем удалять по ключу, т.е. параметру Id . в окне Primary key value укажем, что id передается к,ак URL Parameter методом Get ( т.е. его значение будет видно в окне обозревателя):

передача id методом GET

Рис.21. Заполнение формы операции Delete record (удаление записи)

Далее нам надо вызвать скрипт для удаления записей. Для этого зайдем в скрипт администрирования adm_prep.php и выделим слово удалить. В окне для линкования (Link) введем

prep_delete.php?id=<?php echo $row_prepar["id"];?>

prep_delete.php-это вызов скрипта удаления. Знак ? означает передачу параметра id методом Get. $row_prepar["id"]-значение этого параметра в массиве $row_prepar. Далее посмотрим работу администратора в обозревателе:

работа администратора

Рис. 22. Скрипт admin_prep.php в обозревателе

Нажмем на слово "удалить". Запись удалится. В поле для аннотаций должен быть указан путь, где находятся файлы аннотаций, здесь я не указала.

Рассмотрим другой вариант удаления- если мы хотим удалить запись ч/з форму(см. добавление записи), в которой выводится информация о препаратах. В этом случае в окне "Primare key value" необходимо ввести Form Variable (значение параметра Id передастся методом POST). в этом случае также, как и при добавлении записи, необходимо создать форму с описанием полей.

Удаление записи

Рис. 23. Заполнение формы операции Delete record при передаче параметра Id методом Post.

При работе с базами часто возникает необходимость изменить значения в таблице. Для этого создадим динамический скрипт prep_edit.php. Для ускорения работы вызовем скрипт prep_add.php и выделим всю информацию, занесем в буфер для копирования. Перейдем к prep_edit.php. Вставим из буфера информацию. Выделим кнопку и напишем на ней "Изменить" (на вкладке properties в окне value примет значени"изменить". Как обычно, создадим на вкладке Bindings, нажав на "+" набор записей под названием prepar. Но в этом случае мы отфильтруем набор по параметру id, т.е. в окне Filter укажем параметр id:

изменение записей

Рис. 24. Заполнение формы операции по созданию набора записей

После нажатия на "ОК" на вкладке Bindings появится набор Recordset(prepar). Нажмем напротив его на "+". Далее с помощью мыши перенесем наменования полей в соответствующие окошки формы. Далее нас ждут новые операции: вставим курсор внутрь формы, например под под кнопкой "изменить". Выберем в основном меню Dreamweaver 8 insert/form/hiddenfield. В форме появится еще один необычный знак.Нажмем на него для определения поля iD как невидимого(hidden field).

создание скрытого поля id

Рис 25. Заполнение формы для изменения записей и создания невидимого поля ID.

Далее введем введем в окне Hidden field название поля - id (рис.25). Нажмем на знак молнии рядом с окошком Value. В появившейся форме Dynamic Data выберем поле id. В окошке Code появится <?php echo $row_prepar["id"];?>. Зайдем в скрипт adm_prep.php и выделим слово "изменить". В окне link занесем выражение prep_edit.php?id=<?php echo $row_prepar["id"];?>. Оно означает, что мы вызываем скрипт prep_edit.php и передаем ему значение параметра id из массива $row_prepar.

Если у нас при копировании из скрипта prep_add.php скопировался знак вставки (Insert record), то выделим его и удалим. Вместо его создадим знак изменения. Для этого на вкладке Server Behaviors нажмем на "+" и веберем операцию Update record:

update record

Рис. 26. Заполнение формы операции Update Record

Обратите внимание на параметр Id. Как показано на рисунке 26, в первой строке должно быть выражение -'id' Selects Record Using 'Form.id' as 'integer' В окне Primary key должна быть галочка. Если это не так, то проверьте структуру таблицы в администрации баз данных- MysqlAdmin. В последнем окне указываем, что после изменения вернемся в административный скрипт.Зайдем в скрипт adm_prep.php, выделим слово "изменить" и в окне Link введем название файла редактирования-prep_edit.php. Это для того, чтобы при нажатии на слово "изменить" вызвался скрипт prep_edit.php и ему передастся значение параметра ID. Запустим скрипт adm_prep.php и в обозревателе напротив записи, в которой необходимо произвести изменения, нажмем на слово"изменить". Должна выйти форма с информацией из этой записи. Произведем изменения и не забудем нажать на кнопку "изменить" .При нажатии на слово "Добавить" у Вас появится форма добавления записи. При проблемах не забывайте про изменения в начале файлов(см. выше об удалении в коде программ скрипта apteka1.php). Проблемы с удалением записей, редактированием, добавлением мы решили. Эти операции являются основными при работе с таблицами баз данных.

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

Алфавит

Рис 27. Вид скрипта вывода всех препаратов

Теперь приступим к программированию. Если у Вы не знакомы с циклом в РНР, то лучше сначала изучить этот оператор, а затем продолжить знакомство с созданием аптеки. Выделим букву А и в LINK введем - adm_prep.php?nb=1. Это означает, что при выборе буквы А вызывается скрипт adm_prep.php со значением параметра nb=1. Так мы определим букву А (номер буквы-nb=1). При работе этого скрипта параметр превратится в идентификатор $nb. Рассмотрим фрагмент скрипта:

$apteka1 = mysql_pconnect($hostname_apteka1, $username_apteka1, $password_apteka1) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_apteka1, $apteka1);
$query_prepar = "SELECT * FROM prepar ORDER BY name ASC"; выбраны записи из таблицы по наименованию отсортир.
$prepar = mysql_query($query_prepar, $apteka1) or die(mysql_error());
$row_prepar = mysql_fetch_assoc($prepar);
$totalRows_prepar = mysql_num_rows($prepar);//количество строк
IF ($nb==1) $letter="А";//если nb=1, то индентификатор $letter="А"

IF ($nb==0) $letter="А";
?>

Мы вставили условие, если номер буквы равен 1, то индентификатор $letter="А". При запуске скрипта nb=0, поэтому при этом значении $letter примем тоже равным А. Так поступим с другими буквами. У нас получится фрагмент (для 3-х букв):

<td><div align="center"><a href="adm_prep.php?nb=1">А</a> <a href="adm_prep.php?nb=2">Б</a> <a href="adm_prep.php?nb=3">В</a>

</div></td>

В операторе цикла do внесем добавление:

<? $l=substr(trim($row_prepar['name']),0,1);$l=strtoupper($l);
if ($l==$letter) {?>

В первой строке в переменную $l поместим "вырезанную " функцией substr первую букву названия препарата поля name.С помощью функции strtoupper переведем для надежности при сравнении в верхний регистр. Во второй строке сравниваем вырезанную букву с выбранной буквой для сортировки и откроем скобку. Закроем скобку перед оператором while:

<? }?>
<?php } while ($row_prepar = mysql_fetch_assoc($prepar)); ?>

При запуске скрипта имейте ввиду, чтобы у Вас были препараты с первыми буквами, на которые Вы нажимаете. Если препаратов нет, воспользуйтесь ссылкой "добавить"

У нас должен получиться результат:

вывод препаратов

Рис. 28 Вывод списка препаратов при нажатии на букву Н

Далее привожу сокращенный (для буквы Н) код скрипта adm_prep.php.Выделенным шрифтом- мои добавления.

<?php virtual('/apteka1/Connections/apteka1.php'); ?>
<?php
mysql_select_db($database_apteka1, $apteka1);
$query_prepar = "SELECT * FROM prepar ORDER BY name ASC";
$prepar = mysql_query($query_prepar, $apteka1) or die(mysql_error());
$row_prepar = mysql_fetch_assoc($prepar);
$totalRows_prepar = mysql_num_rows($prepar);
IF ($nb==0) { $letter="А";}
IF ($nb==1) { $letter="А";}
IF ($nb==2) { $letter="Б";}
IF ($nb==3) { $letter="В";}
IF ($nb==4) { $letter="Г";}
IF ($nb==5) { $letter="Д";}
IF ($nb==6) { $letter="Е";}
IF ($nb==7) { $letter="Ё";}
IF ($nb==8) { $letter="Ж";}
IF ($nb==9) { $letter="З";}
IF ($nb==10) { $letter="И";}
IF ($nb==11) { $letter="К";}
IF ($nb==12) { $letter="Л";}
IF ($nb==13) { $letter="М";}
IF ($nb==14) { $letter="Н";}
IF ($nb==15) { $letter="О";}
IF ($nb==16) { $letter="П";}
IF ($nb==17) { $letter="Р";}
IF ($nb==18) { $letter="С";}
IF ($nb==19) { $letter="Т";}
IF ($nb==20) { $letter="У";}
IF ($nb==21) { $letter="Ф";}
IF ($nb==22) { $letter="Х";}
IF ($nb==23) { $letter="Ч";}
IF ($nb==24) { $letter="Ш";}
IF ($nb==25) { $letter="Щ";}
IF ($nb==26) { $letter="Э";}
IF ($nb==27) { $letter="Ю";}
IF ($nb==28) { $letter="Я";}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пример скрипта коректировки и вывода записей из таблицы в dreamweaver</title>
</head>

<body>
<table width="1005" height="162" border="1">
<tr>
<td><div align="center"><a href="adm_prep.php?nb=1">А</a> <a href="adm_prep.php?nb=2">Б</a> <a href="adm_prep.php?nb=3">В</a> <a href="adm_prep.php?nb=4">Г</a> <a href="adm_prep.php?nb=5">Д</a> <a href="adm_prep.php?nb=6">Е</a> <a href="adm_prep.php?nb=7">Ё</a> <a href="adm_prep.php?nb=8">Ж</a> <a href="adm_prep.php?nb=9">З</a> <a href="adm_prep.php?nb=10">И</a> <a href="adm_prep.php?nb=11">К</a> <a href="adm_prep.php?nb=12">Л</a> <a href="adm_prep.php?nb=13">М</a> <a href="adm_prep.php?nb=14">Н </a><a href="adm_prep.php?nb=15">О</a> <a href="adm_prep.php?nb=16">П</a> <a href="adm_prep.php?nb=17">Р</a> <a href="adm_prep.php?nb=18">С</a> <a href="adm_prep.php?nb=19">Т</a> <a href="adm_prep.php?nb=20">У</a> <a href="adm_prep.php?nb=21">Ф</a> <a href="adm_prep.php?nb=22">Х</a> <a href="adm_prep.php?nb=23">Ч</a> <a href="adm_prep.php?nb=24">Ш</a> <a href="adm_prep.php?nb=25">Щ</a> <a href="adm_prep.php?nb=26">Э</a> <a href="adm_prep.php?nb=27">Ю</a> <a href="adm_prep.php?nb=28">Я</a></div></td>
</tr>
<tr>
<td><table width="832" height="72" border="1" align="center">
<tr>
<th width="46" scope="col">№п/п</th>
<th width="148" scope="col">Название</th>
<th width="97" scope="col">Цена</th>
<th width="97" scope="col">Наличие</th>
<th width="97" scope="col">Поставщик</th>
<th width="97" scope="col">Заказ</th>
<th width="97" scope="col">Назначение</th>
<th width="101" scope="col">Аннотация</th>
<th width="101" scope="col"><a href="prep_add.php">Добавить</a></th>
<th width="101" scope="col">&nbsp;</th>
</tr>
<?php do { ?>
<? $l=substr(trim($row_prepar['name']),0,1);$l=strtoupper($l);
if ($l==$letter) {?>

<tr>
<td><?php echo $row_prepar['id']; ?></td>
<td><?php echo $row_prepar['name']; ?></td>
<td><?php echo $row_prepar['cena']; ?></td>
<td><?php echo $row_prepar['nal']; ?></td>
<td><?php echo $row_prepar['postav']; ?></td>
<td><?php echo $row_prepar['kolzak']; ?></td>
<td><?php echo $row_prepar['nazn']; ?></td>
<td><?php echo $row_prepar['annot']; ?></td>
<td><a href="prep_delete.php?id=<?php echo $row_prepar["id"];?>">удалить</a></td>
<td><a href="prep_edit.php?id=<?php echo $row_prepar["id"];?>">изменить</a></td>
</tr>
<? }?>
<?php } while ($row_prepar = mysql_fetch_assoc($prepar)); ?>
</table></td>
</tr>
</table>
</body>
</html>
<?php
mysql_free_result($prepar);
?>

Далее сделаем на главной странице такой же вывод препаратов по буквам.Разделим с помощью знака разделения (внизу слева квадратные скобки) на 2 ячейки.Скопируем алфавит в буфер и вставим во 2-ю ячейку. Также занесем соответствующие изменения в код. Обратите внимание на ссылки при быворе букв-мы должны название adm_prep.php заменить на index.php. Далее будем делать выбор из базы препарата по названию. Вставим поле формы с текстом и кнопкой в первую ячейку. В текстовое окно мы будем заносить название, а кнопку для поиска. Далее вставим в код условия для поиска. Мы добавим к поиску по букве поиск при нажатии на кнопку и задании препарата:

<?php do {
$n1=strtoupper($name);$s1=strtoupper($row_prepar['name']); //перевод в загл. буквы названия препаратов
$l=substr(trim($row_prepar['name']),0,1);$l=strtoupper($l);// вырезание буквы из наименование и перевод в заглавную
if ((($Submit <> "Найти" )and($l==$letter))or //если не нажата кнопка найти и по поиску буквы
(($Submit=="Найти")and($s1==$n1))) //Если нажата кнопка "найти" и сравнение названий препаратов
{?>
<tr>
<td><?php echo $row_prepar['id']; ?></td>

Обратите внимание,переменная $Submit обозначающая кнопку с большой буквы, как и имя кнопки. Если Вы сделаете с маленькой, то не будет работать условие.

Далее сделаем поиск по болезни. Добавим в первую ячейку опять форму с полем текст и кнопкой button. Назовем поле текст bolez, а кнопку -Subzabol .

Добавим условие поиска по заболеванию:

$n1=strtoupper($name);$s1=strtoupper($row_prepar['name']); //перевод в загл. буквы функция strtoupper()
$l=substr(trim($row_prepar['name']),0,1);$l=strtoupper($l);// вырезание буквы из наименование и перевод в заглавную
$nazn =$row_prepar['nazn'];$bolez=strtoupper($bolez); $naznb=strtoupper($nazn);//с большой буквы болезнь и назначение
$bol=substr_count($naznb,$bolez); //кол-во вхождений по болезни-функция substr_count()
if ((($Submit <> "Найти" )and($l==$letter))or //если не нажата кнопка найти и по поиску буквы
(($Submit=="Найти")and($s1==$n1))or //Если нажата кнопка "найти" по названию препарата
(($Subbol=="Найти")and($bol>=1))) //Если нажата кнопка "найти" по заболеванию

оформление поисков

На рисунке показан результат работы при поиске лекарства "от болей ". В столбце для заказа вставим рисунок корзины, при нажатии на которую занесется значение 1-ца-кол-во заказа, наименование, поставщика, цену и другие значения записи из таблицы prepar в таблицу korzina. Для занесения мы создадим скрипт korzina.php. Для перехода к этому скрипту мы вставим ссылку на него перед выводом рисунка. Ниже привожу фрагмент кода:

<td><?php echo $row_prepar['postav']; ?></td>
<td><a href="korzina.php?nom=<?php echo $row_prepar['id'];?>">//
вызов скрипта и передача номера записи в него
<img src="/APTEKA1/ s/korzina.gif" alt="корзина" width="55" height="43"></td> /
/рисунок корзины
<td><?php echo $row_prepar['annot']; ?></td>

вывод с рисунком корзины

Далее я привожу код скрипта korzina.php:

<?php virtual('/apteka1/Connections/apteka1.php');
$sql = "select * from prepar where id=$nom"; //
выбор записи по коду id из главной страницы
$result = mysql_query($sql) ;
if ($result) print "запись найдена";
while($row = mysql_fetch_array($result)) {
занесение из массива полей в переменные
$name=$row["name"]; $postav=$row["postav"]; $seria=$row["seria"];$cena = $row["cena"]; }
$sql = "select * from korzina";
$sql = "INSERT INTO korzina (nom,seria,name,postav,cena,kolzak)
//вставка записи в таблицу
VALUES ('$nom','$seria','$name','$postav','$cena','1')";
/* Исполнение SQL запроса */
$result = mysql_query($sql);
// Проверка исполнения операции
if(!$result) { echo "Запись не создана!"; }
include "index.php";?>
// вызов главной страницы

Вставим таблицу из 3-х строк и 1-го столбца, в которую мы вставим далее содержание.

Для вывода таблицы korzina вставим форму. Форму будем использовать для вывода и корректировки количества заказа, применения кнопок пересчета и обнуления заказа. В форме вставим таблицу из 2-х строк 4-х столбцов. Введем заголовки таблицы и в цикле строки таблицы. В заголовок занесем "Наименование", "Производитель" ,"Цена". Количество препаратов задаст посетительВыведем строки таблицы в цикле, используя метод Repeat Region (см. вывод таблицы Prepar).Далее будет описан достаточно сложный процесс занесения количества препаратов и организация пересчета при изменении количества. Посмотрите фрагмент кода скрипта при выводе корзины. Перед выводом в цикле строк таблицы зададим первоначальные значения для подсчета сумм индекс $i=0 и для суммы $s=0. Делаем подсчет суммы.Для вывода количества препарата используем массив $kolm. Вставим после оператора do { :

$i=$i+1;$kolm[$i]=$row_korzina['kolzak'];$s=$s+$kolm[$i]*$row_korzina['cena']?> // заносим в массив $kolm кол-во заказов из $i-ой записи . А в пустую ячейку для кол-ва препаратов, т.е. между операторами <td></td>:

<? print " <INPUT maxLength=4 name=kolm[$i] size=4 value=$kolm[$i]>";?> // так пишется ввод-вывод массива

Нам далее нужно вставить кнопку для пересчета, если покупатель изменил кол-во покупаемого препарата. Делаем insert/form/button. Назовем ее subper(button name) с надписью "пересчитать" (value). Эти параметры задаются при выделении кнопки курсором. При нажатии на эту кнопку мы должны перейти в новый скрипт для пересчета и назовем его pereskor.php. Переход укажем при выделении формы(нажав на черточки формы) в окне ACTION. Можно это сделать в коде скрипта для form3 :

<form name="form3" method="post" action="pereskor.php">

Сделаем пока вывод суммы. Напишем "ОБЩАЯ СУММА" после кнопки и вставим в коде скрипта идентификатор суммы. Теперь сделаем скрипт pereskor.php для пересчета корзины. Создадим динамическую страницу под этим именем и для нее создадим набор записей (record set) korzina (в bindings/+ ) без фильтрации и сортировки. Ниже привожу основной фрагмент кода скрипта пересчета :

<body>
<?php
$i=0;
if (isset ($Subper)) {
// если нажата кнопка пересчета, важен регистр
do {
$i=$i+1;$kol=$kolm[$i]; $nomz=$row_korzina['nom'];print"i= $i кол-во= $kol nom= $nomz ";

$sql = "UPDATE korzina set kolzak='$kol' where nom=$nomz";

/* Исполнение SQL запроса */
$result = mysql_query($sql);
if($result) {print "запись изменена "; }
} while ($row_korzina = mysql_fetch_assoc($korzina)); /
/конец цикла
}
// конец по пересчету

include "index.php"; //вызов главной страницы
?>
</body>

Изменим кол-во заданных препаратов и нажмем кнопку пересчета. Сумма должна измениться и кол-во заказа. Вставим кнопку обнуления заказа с именем Subobnul и названием "обнулить". При нажатии на эту кнопку также произойдет переход в скрипту pereskor.php, котором произойдет обнуление корзины. Добавим перед вызовом главной страницы код:

if (isset ($Subobnul)) { // если нажата кнопка обнуления, важен регистр
$sql = " DELETE FROM korzina";
$result1 = mysql_query($sql);}

Далее вставим форму для отправления заказа, в которой должна вводиться информация о покупателе при оформлении заказа- (Ф.И.О., адрес, телефон и сообщение) . До этого добавим текст в центре: "Заполните, пожалуйста форму" сделаем его синим цветом, как и алфавит. Назовем поле для ФИО-fio, адреса-adress, телефона-tel, email-email,для комментария-comment. Эти переменные перейдут при нажатии кнопки "отправить" в скрипт otpzak.php. Создадим этот скрипт-новую динамическую страницу. Создадим набор записей как обычно, для таблицы korzina. Ниже привожу основной фрагмент скрипта отправки заказа:

<?php

$i=1;$s=""; //для сложения строк
$z[$i]="ЗАКАЗ"."\n";// r и n для перевода строки
$i=$i+1;
$z[$i]="---------------------------------------------------------------------------"."\n";
$i=$i+1;
$z[$i]='| Код | Название | Производитель | Заказ,шт | Цена | Всего |'."\n";
$i=$i+1;
$z[$i]="---------------------------------------------------------------------------"."\n";

$i=0;$zag='';
do {
$i=$i+1;$zag=$zag.$z[$i]; // сложение строк заголовка в одну переменную zag
//print "$z[$i] <br>";
}while ($i<5);
$i=0;$s='';
do { // начало цикла по корзине
$i=$i+1;
$stkol=(string)$row_korzina['kolzak']; //перевод в строку с помощью приставки string
$stcena=(string)$row_korzina['cena']; //
$sum=(string)$row_korzina['cena']*$row_korzina['kolzak']; //сумма препарата
$z[$i]="|".$row_korzina['seria']."|".$row_korzina['name']."|".$row_korzina['postav']."|".$stkol."|".$stcena."|". $sum."|";
$s=$s.$z[$i]."\n"; //сложение информации о препаратах в одну переменную s
$obsum=$obsum+$sum;
}
while ($row_korzina = mysql_fetch_assoc($korzina)); //конец цикла по корзине
$obsum='Общая сумма-'.(string)$obsum;
$message=' от '.$fio.' Адрес-'.$adres.' email-'.$email.' '.' Телефон-'.$tel."\n".$zag.$s.$obsum.' рублей';// n должно быть в двойных кавычках
include('smtpmail.php'); //подключение почты, см. "отправка сообщений на РНР" на странице в содержании
//smtpmail($mail_to, $subject, $message, $headers='');// вызов функции
smtpmail('', '', $message, $headers=''); // вызов функции
include "index.php";?> //переход на главную страницу

Для теории- если мы выводим на экран информацию, то для перевода строки следует использовать тэг <br > , а в сообщение-"\n", причем в двойных кавычках. Для пробелов при выводе на экран-&nbsp;Далее займемся выводом информации о работе аптеки и доставке. Для этого создадим статическую страницу-dostavka.html. Вставим в нее таблицу из одного столбца и одной строки. Запишем необходимую информацию и "наведем красоту" . Вызовем эту страницу - include "dostavka.html".

Далее нам желательно, чтобы информация, которую мы вывели на главной странице, появлялась по условиям. Мы сделаем меню в первой ячейки таблицы -вставим таблицу с одним столбцов 3-мя строками. В них запишем- "каталог ", "оформление заказа", "доставка". Выделим слово "КАТАЛОГ" и в окне link напишем index.php?catalog=1. Это выражение означает что мы вызываем страницу и передаем параметр catalog=1. Заходим в код скрипта и ставим условие If ($catalog==1) { перед выводом алфавита и } после. Также ставим это условие перед выводом таблицы с препарами и } после. Аналогично выделяем слово "ОФОРМЛЕНИЕ ЗАКАЗА" и в Link вставляем index.php?zakaz=1. Вставляем условие

if( $zakaz==1) перед оформлением заказа и } после. Выделим слово "ДОСТАВКА" и в Link вставим index.php?dostavka=1. Перед оператором Include "dostavka.html" поставим условие if ($dostavka=1 ). Обратите внимание, что передаваемые параметры становятся индентификаторами со знаком $.

Далее запишем выражение "Ваша корзина пуста " в ячейку под содержанием. Это выражение должно появиться, если корзина пуста. Выделим это выражение и в Server Behaviors выбрать Show if Recordset is Empty(korzina). Если корзина пуста, то появится это выражение. Далее напишем "Ваша корзина", вставим таблицу с двумя строками и 2-мя столбцами. Напишем заголовки таблицы- "Наименование" и "цена". Создадим новый набор записей REcordset для таблицы korzina и назовем этот набор korzina1. Вставим во 2-ю строку переменные name и cena , используя вкладку Bindings, нажав на + у recordset(korzina1). Организуем цикл для этой таблицы, используя Repeat Region в Server Behaviors. далее выделим выражение "Ваша корзина" и таблицу с таблицей korzina. На вкладке Server Behaviors нажмем на "+" и выберем Show if Recordset not Empty(korzina1). Можно korzina и korzina1, т.к. это разные наборы для одной и той же таблицы korzina. При этом таблица появляется, если количество записей больше 1-цы.

Далее займемся выводом аннотации. Для этого необходимо отсканировать аанотацию к препарату, занести в папку, например annot. В таблице с выводом препаратов в столбце для аннотаций напишем слово "посмотреть", выделим его и в окне Link на панели свойств вставим выражение

Annot.php?id=<? echo $row_prepar['id'];?> //это переход к скрипту показа фото аннотации записи с номером ID.

Предварительно мы отсканируем аннотацию препаратов, например- панангина, глюкозамина и милдроната. При запоминании отсканированной аннотации мы запоминаем аннотацию как изображение. вызываем стандартную программу POINT для рисования и вставляем из портфеля рисунок и запоминаем рисунок с расширением JPG или GIF. Рисунки (аннотации) поместим в папку S. Занесем наши препараты в базу данных с помощью нашего административного скрипта admin_prep.php. Далее мы создадим скрипт показа аннотации annot.php. Вставим таблицу из одной ячейки, в которой будет появляться фото аннотации.Соз дадим набор записей prepar для таблицы prepar. Фильтруем по параметру Id. Это аналогично как при корректировке записей в скрипте prep_edit.php. Этот параметр будет передаваться как Url parametr. Вставим под таблицей невидимый параметр Id (insert/form/hiddenfield). Далее придется программировать вывод фото. Вставим после <body> такой фрагмент:

<?
$foto=$row_prepar['annot']; //занесение в переменную аннотацию препарата под номером id
$name=$row_prepar['name'];//занесение названия препарата
?>

В тэгах td выведем фото аннотации с помощью оператора echo:

<td valign="top"><img src="<? echo($foto);?>" width="962" height="1196" border=1 alt="<? echo($name)?>"></td>

При этом надо помнить, что при вводе информации о препаратах в поле "Аннотация" необходимо вводить: /Aртека1/ s/имя файла с аннотацией, например:

/Apteka/ s/panangin.jpg

Также следет обращать внимание на то, чтобы файлы с фотографиями находились как на локальном, так и на удаленном сервере в соответствующих директориях. Иначе фото выводиться не будут, а будут выводиться соответствующие названия препаратов, указанных в ALT. Запустите главную страницу и графе с аннотацией нажмите на слово "посмотреть". У Вас на экране должно появиться фото с аннотацией. Далее занесем нашу аптеку на хостинг.