Форма ввода php

Опубликовано 2012.01.15

Язык программирования PHP позволяет делать и обрабатывать пользовательские формы фактически любой сложности. В этой статье я научу вас создавать и обрабатывать формы.Для начала рассмотрим принцип работы форм и из чего они состоят. Форма представляет собой html код с различными полями ввода, которые заполняет пользователь. После нажатия кнопки отправки формы происходит передача значений всех полей формы обработчику этой формы. Отправка осуществляется методом POST или GET. По умолчанию используется GET. Рассмотрим простой пример,форма отправки имени,фамилии и номера телефона: Файл forma.html
  1. <form action="action.php" method="post" enctype="multipart/form-data">
  2. Ваше имя: <input type="text" name="name" /><br />
  3. Ваша фамилия: <input type="text" name="surname" /><br />
  4. Ваш телефон: <input type="text" name="phone" /><br />
  5. <input type="submit" value="Отправить форму" />
  6. </form>
В теге form указан путь к обработчику и метод передачи данных. Параметр enctype позволяет передавать через форму файлы. Например если нам нужно приложить к форме какой-нибудь документ-то этот атрибут обязателен. Тэги input - это элементу формы. Какой элемент-зависит от атрибута type. Теперь код обработчика. Файл action.php
  1. //Принимаем постовые данные
  2. $name=$_POST['name'];
  3. $surname=$_POST['surname'];
  4. $phone=$_POST['phone'];
  5.  
  6. //вывод на экран
  7. echo $name.' '.$surname.' ваш номер телефона '.$phone;
Это простейший пример php формы.В реал конечно же никому не интересно заполнять форму лишь для того, чтобы потом посмотреть что же вы заполнили... Чаще всего полученную информацию заносят в базу данных,отправляют на почту или записывают в файл. Мы рассмотрим все три случая. Начнем с простого-запись в файл. Менять будем только обработчик.

Форма с записью результата в файл

Оставляем нашу форму как есть и заносим в файл имя, фамилию, телефон и IP адрес посетителя.
  1. //Принимаем постовые данные
  2. $name=$_POST['name'];
  3. $surname=$_POST['surname'];
  4. $phone=$_POST['phone'];
  5.  
  6. //обращаемся к глобальной переменной SERVER
  7. $ip=$_SERVER['REMOTE_ADDR'];
  8.  
  9. //формируем строку для записи
  10. $str=$name.' '.$surname.', '.$phone.', '.$ip.'\r\n';
  11.  
  12. //открываем файл для записи.Если файл не существует-он будет создан
  13. $fopen = fopen('my_form_reports.txt', 'a+');
  14. //записываем строку
  15. fputs ($fopen, $str);
  16. //закрываем файл
  17. fclose ($fopen);
Вот и всё. Тестируйте.

Форма с записью результата в базу данных MySql

В случае с базой чуть посложнее. Тут очень важен момент безопасности. Данные необходимо профильтровать и лишь потом занести в БД, иначе злоумышленник может провести SQL инъекцию и уничтожить вашу базу данных.Обязательно используйте функцию mysql_real_escape_string. Пишем обработчик:
  1. //принимаем данные
  2. $name=$_POST['name'];
  3. $surname=$_POST['surname'];
  4. $phone=$_POST['phone'];
  5.  
  6. //соединяемся с БД
  7. mysql_connect('localhost', 'user_name', 'user_password');
  8. mysql_select_db('db_name');
  9.  
  10. //обязательно экранируем нежелательные символы функцией mysql_real_escape_string
  11. $sql="insert into `table_name` (name,surname,phone,ip) values
  12. (
  13. '". mysql_real_escape_string($name)."',
  14. '". mysql_real_escape_string($surname)."',
  15. '". mysql_real_escape_string($phone)."',
  16. '".$_SERVER['REMOTE_ADDR']."'
  17. )";
  18. $res=mysql_query($sql);
Будет лучшим использовать библиотеку PDO. Код будет выглядеть следующим образом:
  1. $name=$_POST['name'];
  2. $surname=$_POST['surname'];
  3. $phone=$_POST['phone'];
  4. //соединение с базой
  5. $db = new PDO('mysql:dbname=db_name; host=localhost',"user_name","user_password");
  6.  
  7. //далее сам запрос
  8. $sql="insert into `table_name` (name,surname,phone,ip) values (:name,:surname,:phone,:ip)";
  9. $sth=$db->prepare($sql);
  10. $sth->bindValue(':name', $name);
  11. $sth->bindValue(':surname', $surname);
  12. $sth->bindValue(':phone', $phone);
  13. $sth->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
  14. $sth->execute();
Обратите внимание,что при использовании PDO наши переменные не проходили никакой проверки. Но это не является уязвимостью. Библиотека PDO самостоятельно очистит всё лишнее и выполнит запрос. Чтоб узнать результат запроса-допишите в конце следующий код:
  1. $error=$sth->errorInfo();
  2. print_r($error);

Форма с отправкой e-mail средствами php

Опять правим форму. На этот раз экранируем ненужные символы для безопасного отображения в браузере. Используется для этого функция htmlspecialchars.
  1. //Принимаем постовые данные
  2. $name=$_POST['name'];
  3. $surname=$_POST['surname'];
  4. $phone=$_POST['phone'];
  5.  
  6. //Тут указываем на какой ящик посылать письмо
  7. $to = "email@yandex.ru";
  8. //Далее идет тема и само сообщение
  9. $subject = "Тема письма";
  10. $message = "
  11. Письмо отправлено из моей формы.<br />
  12. Пользователь указал:<br />Имя: ".htmlspecialchars($name)."<br />
  13. Фамилия: ".htmlspecialchars($surname)."<br />
  14. Телефон: ".htmlspecialchars($phone);
  15. $headers = "From: MySite.ru <site-email@mysite.ru>\r\nContent-type: text/html; charset=utf8 \r\n";
  16. mail ($to, $subject, $message, $headers);
  17. </site-email@mysite.ru>
Вот и всё. Если делаете форму, доступную для посетителей сайта-обязательно используйте капчу. Качайте исходники, разбирайтесь. Пишите комментарии, задавайте вопросы.