PHP сценарии обработки HTML форм

20.02.05 24.6K

Ни для кого не является секретом, что наиболее распространенным способом взаимодействия html-страницы с сайтом является форма. Форма (то есть, html-элемент образуемый тегом form) используется и бесплатными почтовыми службами, электронными магазинами и многими другими типами сайтов.

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


Рассмотрим подробнее варианты для разных типов полей.

Текстовые поля

Под текстовыми полями в этой статье понимаются элементы, создаваемые тегам input со значением параметра type равным text и тегом textarea . Организовать обработку формы состоящей из нескольких таких полей проще всего. На листинге ниже приведен листинг с html-разметкой для такой формы.






Как видно из листинга, имена для элементов формы, с точки зрения PHP , являются элементами массива. Поэтому PHP -сценарий, который будет обрабатывать эту форму, будет воспринимать все множество текстовых полей этой формы как единый массив. К отдельным элементам можно обращаться по индексам или использовать перечисление при помощи команд list и each , как это сделано в следующем примере.

n"; ?>

Переключатели

Переключателями (checkbox ) в этой статье называются элементы, создаваемые тегам input со значением параметра type равным checkbox . Форма для использования переменного количества «переключателей » строится абсолютно так же. Обратите внимание, что выбор конкретного значения переключателя (то есть значение свойства value) не важен. Пример приведен в листинге ниже:






Однако обработка такой формы отличается от обработки, описанной для текстовых полей. В данном случае необходимо определить, включил или нет посетитель сайта тот или иной переключатель. Если включил — то соответствующий элемент массива существует, если нет — то отсутствует. В следующем листинге приведен пример PHP сценария, который распечатывает включенные переключатели:

Радио-кнопки

Перед тем как описывать обработку радио-кнопок необходимо вспомнить, как они работают. Суть радио-кнопок (элементы созданные тегами input со значением параметра type равным radio ) заключается в том что, выбирая одну кнопку, пользователь автоматически снимает выделение с другой кнопки из этого же набора. Кнопки объединяются в набор очень просто: у всех кнопок в наборе одно и тоже имя.

А вот значения (то есть параметры value ) у кнопок в наборе — разные. И на сайт будет отправлено значение выбранной кнопки с именем набора. Так же как и в случае с текстовыми полями и переключателями имена наборов радио-кнопок должны оформляться как имена элементов массива в PHP. Пример такой формы приведен в следующем листинге:

// первый набор кнопок
// второй набор кнопок
// третий набор кнопок

Обработка радио-кнопок объединяет идеи, использование при обработке, как текстовых полей, так и переключателей. Если автор html-страницы не установил значение по умолчанию, а пользователь не выбрал определенную кнопку в наборе радио-кнопок, то данный элемент будет отсутствовать в массиве (как для переключателей).

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

HTML форма отправки данных

Форма на странице формируется тегами

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

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

Итак, простейшая форма отправки может содержать следующий код:


Значение А:
Значение Б:

Элементы формы и их параметры:

action="myform.php" – атрибут "action" определяет, какой php-файл будет обрабатывать отправляемые данные. В этом примере, данные будут отправлены в файл "myform.php", находящийся в той же директории что и страница с формой. Если этот атрибут не указать явно, данные формы будут отправлены по адресу страницы самой формы.

method="post" – параметр method определяет метод передачи данных POST или GET. Более подробно об этом в статье "Отличия методов POST или GET" . Если не указывать атрибут явно, по умолчанию будет использоваться метод GET.

Текст "Значение А:" и "Значение Б:" добавлен только с целью оформления и понятности формы для пользователя. Добавлять это для передачи данных не обязательно, но для того, чтобы пользователю стало понятно, что вводить, стоит указывать.

Теги используются для формирования различных управляющих элементов формы.

type="text" – атрибут "type" определяет вид поля. В зависимости от того, какой тип указан, меняется и внешний вид элемента, и его назначение. Значение атрибута "text" указывает, что в браузере элемент будет отображаться однострочным текстовым полем, куда пользователь сможет ввести свою строку.

name="data1" – атрибут "name", указывает имя, вернее индекс данных в массиве, полученных сервером. Это обязательный параметр, по которому в php-обработчике можно будет затем получить доступ переданному значению. Имя может быть выбрано произвольно, однако, удобнее когда это значение имеет какой-то понятный смысл.

type="submit" – тег с таким значением параметра "type" будет отображаться на странице как кнопка. На самом деле на форме можно обойтись и без кнопки. Если, например, в форме есть текстовые поля, то отправку можно осуществить, просто нажав "Ввод" на клавиатуре. Но наличие кнопки делает форму более понятной.

value="Отправить" – в данном случае (для type="submit") определяет только надпись на кнопке. Для type="text", например, это будет текст, который будет выведен в текстовом поле.

В итоге, на странице этот код будет выглядеть приблизительно так:

Значение А:
Значение Б:

По нажатию на кнопку, будет выполнена отправка данных на указанную страницу, и если она существует и корректно работает, данные будут обработаны.

Обработка отправленных HTML формой данных в PHP

Отправленные описанным способом данные, помещаются в суперглобальные массивы $_POST, $_GET и $_REQUEST. $_POST или $_GET будут содержать данные в зависимости от того, каким методом осуществлялась отправка. $_REQUEST содержит отправленные данные любым из указанных методов.

$_POST, $_GET и $_REQUEST – это ассоциативные массивы, поля-индексы которых совпадают с атрибутами "name" тегов . Соответственно, для работы с данными в файле myform.php можно присвоить переменным значения элементов такого массива указав в качестве индекса имя поля:

// для метода GET
$a = $_GET["data1" ];
$b = $_GET["data2" ];

// для метода POST
$a = $_POST["data1" ];
$b = $_POST["data2" ];

// при любом методе
$a = $_REQUEST["data1" ];
$b = $_REQUEST["data2" ];

Проверка заполнения полей формы

Иногда при получении данных нужно проверить, не отправил ли пользователь пустую форму. Для этого можно использовать функцию empty .

if (empty ($_REQUEST["data1" ])) {
echo "Поле не заполнено" ;
} else {
echo "Поле было заполнено" ;
$a = $_REQUEST["data1" ];
}

Обычно этого решения достаточно. Если нужно вводить текст, то будет понятно, введен он или нет. Однако, если пользователь намеренно для вычислений введет ноль, то функция empty покажет, что значения нет. Поэтому для таких ситуаций лучше использовать функцию isset . Она будет явно проверять, заданно ли значение или нет.

if (isset ($_REQUEST["data1" ])) {
echo "Поле было заполнено" ;
$a = $_REQUEST["data1" ];
} else {
echo "Поле не заполнено" ;
}

В этом уроке PHP рассматриваются базовые понятия языка: обработка форм с отправкой запроса в веб-страницы, основные управляющие конструкции php при обработке форм, запись данных из формы PHP в файл, функция даты в PHP date().

1. Напомним, что все файлы php тестируются только при запущенном Денвере и только из адресной строки браузера. Запускать файлы php двойным щелчком нельзя!

2. Запустите Денвер.

Упражнение 1. Обработка простой формы

В данном уроке PHP рассмотрим обработку формы на HTML-странице, создание переменных PHP для полей формы.

1. Создайте форму, как на рис. 3.1. Подразумевается, что при нажатии на кнопку Отправить заказ данные из формы будут переданы администратору, а клиент на экране увидит ответ Заказ обработан . Если Вы затрудняетесь в написании формы, тогда реализуйте код, приведенный ниже рисунка, и сохраните его в папке php_2 под именем forma_bob.html Напоминаем, что адрес обработчика формы записывается в атрибуте action тега form .

Рисунок 3.1

2. Для того, чтобы пользователь получил ответ после отправки данных, необходимо создать обработчик формы на языке php. Создайте код, приведенный ниже, и сохраните его в папке php_2 под именем zakaz.php

3. Проверьте работоспособность обработчика. Для этого запустите файл forma_bob.html через браузер, набрав в адресной строке браузера адрес http://localhost/php_2/forma_bob.html

4. В поля формы введите любые цифры и нажмите кнопку Отправить заказ . Результат на рис. 3.2.

Рисунок 3.2

Переменные формы

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

Вы можете получить доступ к содержимому поля tireqty следующими способами:

$tireqty //короткий стиль

$_POST[‘tireqty’] //средний стиль

$HTTP_POST_VARS[‘tireqty’] //длинный стиль

Мы будем использовать длинный стиль для ссылок на переменные формы, но для простоты использования строить короткие версии применения. Это удобный и безопасный способ манипулирования данными, который эффективно работает во всех системах, независимо от выбранных версий и настроек.

Копируя содержимое одной переменной в другую, мы применяем операцию присваивания, для обозначения которой в языке PHP используется знак равенства (= ). Приводимая ниже строка кода создает новую переменную с именем $tireqty и переносит содержимое $_POST[‘tireqty’] в эту новую переменную:

$tireqty=$_POST[‘tireqty’]

Так как этот сценарий не генерирует никаких выходных данных, нет никакой разницы, будет он помещен выше или ниже дескриптора . Обычно этот блок размещается в начале сценария.

5. В файле zakaz.php измените код следующим образом и проверьте работоспособность формы. Результат на рис. 3.3. Цифры могут отличаться в зависимости от того, какие данные Вы ввели.

Рисунок 3.3

Упражнение 2. Создание калькулятора для формы «Автозапчасти от Боба»

В этом уроке PHP рассмотрим основные арифметические функции PHP для расчетов.

1. Файл forma_bob.html сохраните под именем forma_bob_2.html

2. Файл zakaz.php сохраните под именем zakaz_2.php

3. В файле forma_bob_2.html форму «Автозапчасти от Боба» измените так, чтобы она имела вид, как на рис. 3.4. Не забудьте изменить имя обработчика на zakaz_2.php . Если затрудняетесь, то можете реализовать код, приведенный ниже.

Рисунок 3.4

4. Создайте новую обработку для формы в файле zakaz_2.php , используя знания, полученные из предыдущих уроков. Обработка должна содержать следующие выходные данные и условия:

1. Стоимость каждого товара определяется константой. Константа на PHP задается функцией define. Пример define("POKRPRICE",10); Первый параметр функции - это имя константы, которое пишется прописными буквами, второй параметр - значение константы.

2. Логическая операция ИЛИ обозначается ||

3. Логическая операция И обозначается && .

4. Операции сравнения: больше > , меньше < , больше или равно >= , меньше или равно <=

5. Функция, которая считывает время с компьютера date("H:i, j F")

6. Функция, которая форматирует количество знаков после запятой number_format . Пример number_format($sumnalog,2) . Первый параметр - переменная, у которой форматируем знаки, второй параметр - количество знаков после запятой.

7. Если Вы затрудняетесь с созданием обработки формы, может воспользоваться кодом, приведенным ниже (рис. 3.8):

Рисунок 3.8

Упражнение 3. Запись данных из формы в текстовый файл

В нашем уроке PHP также рассматриваем запись данных из формы в текстовый файл и функцию даты date() при обработке формы.

1. В файле-обработчике формы «Автозапчасти об Боба» после последней закрывающей фигурной скобки добавьте код.

Рисунок 3.9

2. Проверьте работу программы. Текстовый файл orders.txt создается автоматически, просмотрите его содержимое.

КОНТРОЛЬНОЕ ЗАДАНИЕ

После изучения данного урока PHP предлагается выполнить контрольное задание для закрепления полученных знаний.

Рисунок 3.10

1. Создать форму, как на рис. 3.10.

2. Создать обработку формы, которая будет выводить результаты заказа, как на рис. 3.11 (результаты будут отличаться в зависимости от введенных в форму данных.

3. Результаты заказа должны записываться в отдельный текстовый файл.

Список заказа должен отражать следующее:

  • Вид товара.
  • Стоимость 1 шт. товара.
  • Количество заказанных товаров.
  • Общую стоимость заказа без доставки, налога на продажи и скидок.
  • Стоимость доставки.
  • Величину налога с продажи.
  • Скидку в процентах и рублях.
  • Стоимость заказа с учетом доставки, налога с продаж и скидки.
  • Адрес доставки.

Условия задачи:

  1. Стоимость товаров:
    • ручки - 10 руб.
    • книги - 100 руб.
    • сувенира - 1000 руб.
    • компьютера - 10000 руб.
  2. Налог с продаж - 18%. Налог прибавляется к общей стоимости всех товаров с учетом скидки.
  3. Стоимость доставки - 500 руб. Стоимость доставки прибавляется к общей стоимости всех товаров в учетом скидки и налога с продаж.
  4. Скидки:
    • При заказе ручек или книг меньше 5 шт. скидка - 5%, от 5 до 10 шт. - 10%, выше 10 шт. - 20%;
    • При заказе сувениров или компьютеров от 10 до 20 шт. скидка - 10%, от 20 до 30 шт. - 20%, выше 30 шт. - 40%.

Зачастую на Web – сайтах можно встретить страницы с размещенными на них HTML - формами. Веб-формы – удобный способ получения информации от посетителей вашего сайта. Пример тому – , – которая обеспечивает обратную связь с посетителями и разработчиками сайта. Формы так же удобны и для разработчиков сайта при разработке CMS, которая позволяет поддерживать главное свойство сайта - актуальность. Данная статья посвящена основам создания HTML-форм, их обработке и способам передачи данных из экранных форм в PHP-сценарии.

1) Создание простой формы

Теги

и
задают начало и конец формы. Начинающий форму тег
содержит два атрибута: action и method . Атрибут action содержит адрес URL сценария, который должен быть вызван для обработки сценария. Атрибут method указывает браузеру, какой вид HTTP запроса необходимо использовать для отправки формы; возможны значения POST и GET .

Замечание

Главное отличие методов POST и GET заключается в способе передачи информации. В методе GET параметры передаются через адресную строку, т.е. по сути в HTTP-заголовке запроса, в то время как в методе POST параметры передаются через тело HTTP-запроса и никак не отражаются на виде адресной строки.

$text = nl2br ($_POST [ "mytext" ]);
?>

Задача: Пусть необходимо создать выпадающий список с годами с 2000 по 2050.
Решение: Необходимо создать HTML форму c элементом SELECT и PHP – сценарий для обработки формы.

Обсуждение:

Для начала создадим два файла: form.html и action.php . В файле form.html будет содержаться html-форма с выпадающим списком. Причем значения в списке можно указать двумя способами:

I. Ввод данных вручную:

II. Ввод данных через цикл:

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

Описание:

Создадим HTML-форму для отправки файла на сервер.




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

Затем необходимо написать сценарий обработчик action.php . Перед написание обработчика необходимо определиться в какой каталог мы будет копировать файл:

if(isset($_FILES [ "myfile" ])) // Если файл существует
{
$catalog = "../image/" ; // Наш каталог
if (is_dir ($catalog )) // Если такой каталог есть
{
$myfile = $_FILES [ "myfile" ][ "tmp_name" ]; // Времменый файл
$myfile_name = $_FILES [ "myfile" ][ "name" ]; // Имя файла
if(! copy ($myfile , $catalog )) echo "Ошибка при копировании файла " . $myfile_name // Если неудалось скопировать файл
}
else mkdir ("../image/" ); // Если такого каталога нет, то мы его создадим
}
?>

Замечание

Если вы доверяете пользователям закачивать на ваш сервер любые файлы, нужно быть предельно осторожным. Злоумышленники могут внедрить «нехороший» код в картинку или файл и отправить на сервер. В таких случаях нужно жестоко контролировать загрузку файлов.

Данный пример демонстрирует создание каталога и копирование файла в этот каталог на сервер.

Также хотел бы продемонстрировать пример с элементом checkbox . Этот элемент немного отличается от других элементов тем, что если не один из элементов checkbox ’a не выбран, то суперглобальная переменная $_POST вернет пустое значение:


Синий
Черный
Белый

if (!empty($_POST [ "mycolor" ])) echo $_POST [ "mycolor" ]; // Если выбран хоть 1 элемент
else echo "Выберите значение" ;
?>

Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.

Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.

Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.

Создаем форму отправки данных в html

Первая строка будет следующей

Это очень важный элемент формы. В нем мы указываем каким способом будут передаваться данные и какому файлу. В данном случае все передачется методом POST файлу send.php. Программа в этом файле соответственно должна принять данные, они будут содержаться в post массиве, и отправить их на указанный email адрес.

Вернемся к форме. Вторая строка будет содержать поле для ввода ФИО. Имеет следующий код:

Тип формы text, то есть пользователь сможет ввести или скопировать сюда текст с клавиатуры. Под параметром name содержится название формы. В данном случае это fio, именно под таким именем будет передаваться все, что пользователь введен в данноу поле. Параметр placeholder указывает на то, что будет записано в этом поле в виде пояснения.

Следующая строка:

Здесь практически все то же самое, но имя для поля указано email, а пояснении указано, чтобы пользователь в эту форму ввел свой адресс электронной почты.

Следующей строкой будет кнопка "отправить":

И последней строкой в форме будет тэг

Теперь соберем все вместе.





Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:





Создаем файл, принимающий данные из HTML формы

Это будет файл с именем send.php

В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:

$fio = $_POST["fio"];
$email = $_POST["email"];

Перед названиями переменных в php ставиться знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method="post". Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров - функций php.

Первая функция преобразует все символы, которые пользователь попытается добавить в форму:

При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ "<" в "<". Также он поступить с другими символами, встречающимися в html коде.

Вторая функция декодирует url, если пользователь попытается его добавить в форму.

$fio = urldecode($fio);
$email = urldecode($email);

Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:

$fio = trim($fio);
$email = trim($email);

Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того, насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.

Проверка данных, передаваемых от HTML формы в файл PHP

Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:

echo $fio;
echo "
";
echo $fio;

Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.

Отправляем полученные данные из формы HTML на почту при помощи PHP

Для отправки данных на почту нужно воспользоваться функцией mail в PHP.

mail("на какой адрес отправить", "тема письма", "Сообщение (тело письма)","From: с какого email отправляется письмо \r\n");

Например, нужно отправить данные на email владельца сайта или менеджера [email protected].

Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.

mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n");

Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.

if (mail("[email protected]", "Заказ с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{
echo "сообщение успешно отправлено";
} else {
}

Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:

$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
//echo "
";
//echo $email;
if (mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{ echo "сообщение успешно отправлено";
} else {
echo "при отправке сообщения возникли ошибки";
}?>

Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.

Помещаем HTML и PHP код отправки формы в один файл

В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.

Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.

Давайте посмотрим как изменить PHP код в файле send.php:



Форма заявки с сайта


//проверяем, существуют ли переменные в массиве POST
if(!isset($_POST["fio"]) and !isset($_POST["email"])){
?>





} else {
//показываем форму
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
if (mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n")){
echo "Сообщение успешно отправлено";
} else {
echo "При отправке сообщения возникли ошибки";
}
}
?>

Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы - "если существует, то показать форму". А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке

. Форма должна ссылаться на эту же страницу, например index.php. В код я добавил заголовок страницы.

Частые ошибки, возникающие при отправке PHP формы с сайта

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

ini_set("display_errors","On");
error_reporting("E_ALL");

Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.

Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.

Еще одна частая ошибка, когда появляется оповещение "Сообщение успешно отправлено", а письмо не приходит на почту. В этом случае нужно внимательно проверить строку:

if (mail("[email protected]", "Заказ с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))

Вместо [email protected] должен быть email адрес на который нужно отправить письмо, а вместо [email protected] должен быть существующий email данного сайта. Например для сайта сайт это будет . Только в этом случае письмо с данными из формы будет отправлено.