Теперь, когда наша форма заказа более-менее обрела свой первоначально задуманный вид, необходимо задуматься о том, как продавец, т.е. в данном случае мы, будем обрабатывать поступившие заказы клиентов. Для того, чтобы знать, что купил посетитель нашего виртуального магазина, необходимо сохранить те данные, которые он внёс при заполнении формы в Интернете. Существует один выход из сложившегося положения: сначала сохранить заказ клиента где-то, а затем, когда нам будет удобно, просмотреть, что он купил. Это всё реализуется путём записи нужных данных в файл или, если Вы работаете над большим проектом - в базу данных. Мы рассмотрим оба способа.
Обычный файл может иметь множество форматов, но в общем, это двумерный файл, т.е. обычный текстовый документ (.*txt). В нашем примере заказы будут добавляться в файл zakaz.txt построчно, т.е. одна покупка - одна строка. Если приходится иметь дело с достаточно большим объёмом информации, лучше воспользоваться базой данных (например, MySQL). Сохранение и получение заказовМы изменили форму, добавив туда адрес доставки клиента. Поле формы, предназначенное для ввода адреса доставки, носит название address. Каждый из поступающих заказов записывается в один и тот же файл. Затем создаётся web-интерфейс, чтобы мы могли просматривать полученные заказы. <html> <head> <title>Форма заказа</title> </head> <body> <h1>Продажа CD</h1> <h2>Форма заказа:</h2> <form action="cd.php" method=post> <table border=0> <tr bgcolor=#cccccc> <td width=150>Товар</td> <td width=15>Количество</td> </tr> <tr> <td>CD-R</td> <td align=center><input type="text" name="cdr" size=3 maxlength=3></td> </tr> <tr> <td>CD-RW</td> <td align=center><input type="text" name="cdrw" size=3 maxlength=3></td> </tr> <tr> <td>Футляры для CD</td> <td align=center><input type="text" name="fut" size=3 maxlength=3></td> </tr> <tr> <td>Ваш адрес</td> <td align=center><input type="text" name="address" size=30 maxlength=60></td> </tr> <tr> <td colspan=2 align=center><input type=submit value="Сделать заказ"></td> </tr> </table> </form> </body> </html> Этапы обработки заказаЗапись: - Открытие файла. Если файл не существует, его потребуется создать;
- Запись данных в файл;
- Закрытие файла.
Считывание: - Открытие файла. Если файл не может быть открыт (например, он не существует), эта ситуация должна быть распознана и следует предусмотреть корректный выход из неё;
- Считывание данных из файла;
- Закрытие файла.
Открытие файлаДавайте предположим, что требуется записать заказ клиента в общий файл заказов. Его можно открыть для записи с помощью следующего оператора: $fp = fopen("../../zakaz/zakaz.txt", "a"); Первым параметром должен быть файл, который необходимо открыть, при этом, можно указать путь к файлу. Второй параметр функции fopen() - это режим файла, который должен иметь строковый тип. Этот параметр определяет, что необходимо делать с файлом. Режимы файла перечислены ниже:
r - открыть файл только для чтения; после открытия указатель файла устанавливается в начало файла.
r+ - открыть файл для чтения и записи; после открытия указатель файла устанавливается в начало файла.
w - создать новый пустой файл только для записи; если файл с таким именем уже есть вся информация в нем уничтожается.
w+ - создать новый пустой файл для чтения записи; если файл с таким именем уже есть вся информация в нем уничтожается.
a - открыть файл для дозаписи; данные будут записываться в конец файла.
a+ - открыть файл для дозаписи и чтения данных; данные будут записываться в конец файла.
b - флаг, указывающий на работу (чтение и запись) с двоичным файлом; указывается только в Windows.
Обычная ошибка, связанная с открытием файла - попытка открыть файл, для которого отсутствуют права на чтение или запись. В этом случае РНР выводит соответствующее предупреждение. Общедоступный для записи каталог для хранения заказов можно было бы создать, присвоив бы ему права доступа 777. Обработку ошибок можно сделать более удобной для пользователя, реализовав собственное сообщение: @ $fp = fopen("../../zakaz/zakaz.txt", "a", 1); if (!$fp) { echo "<p><strong>Извините, но покупка не совершена из-за сбоя." ."Попробуйте позже.</strong></p></body></html>"; exit; }Запись в файлЗапись в файл в РНР выполняется сравнительно просто. Для этого нужно воспользоваться функцией fwrite(): fwrite($fp, $vyhod); Давайте создадим строку, которая представляет одну запись в файле данных. Это можно сделать следующим образом: $vyhod = $date." ".$cdr." CDR-Дисков ".$cdrw." CDR-W-Дисков ".$fut." Футляров $".$total." ". $address."
"; В этом простом примере каждая запись заказа сохраняется в отдельной строке файла. Подобное решение обусловлено тем, что позволяет в качестве простого разделителя строк использовать символ новой строки.
В следующий раз мы поговорим о закрытии файла и его считывании. До новых встреч! P.S. Исходный файл cd.php Вы можете скачать ЗДЕСЬ |