Формы, часть 1, “Форма обратной связи на PHP”

« Предыдущая запись
 
  Следующая запись »
 

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

HTML-код формы

Для начала рассмотрим простой html-код, который содержит всё что нам надо для формы обратной связи.

<form method='post' action="" name="formname" target="_self"> 
    <p>
       <label for="name">Контактное лицо:</label><br>
       <input name="name" maxlength="50" type="text" size="10">
    </p>
    <p>
       <label for="mailfrom">E-mail для связи:</label><br>
       <input name="mailfrom" type="text" size="10" value="Email">
    </p>
    <p>
       <label for="message">Сообщение:</label><br>
       <textarea rows="5" cols="14" name="message"></textarea>
    </p>
    <p>
       <input name="submit" type="submit" value="Отправить">
    </p>
</form>

Итак, вот собственно html форма. Она содержит две строки для ввода имени и адреса почты, одно поле для сообщения и собственно кнопку отправить.

Первая строка, тег form. В нём содержатся все элементы формы. Тег может содержать параметры:

  1. Method. Указывается протокол HTTP. GET или POST. Нужен второй.
  2. Action. Указывается адрес скрипта, который будет обрабатывать форму. Если параметр отсутствует, или не указан (как в листинге), то форма будет обращаться к этой же странице.
  3. Name. Имя формы. Сейчас нам уникальное имя формы не актуально.
  4. Target. Аналогичен таргету у тега ссылки a.
  5. Enctype. Нужен только в том случае, когда через форму отправляется ещё и файл. В этом случае указывается значение multipart/form-data.

В форме у всех трёх элементов, куда вводится информация, имеются рядом теги label с указанным именем поля (значение поля name у полей идентично полю for у тега label). По большому счёту создавать тег лейбл не обязательно.

Далее, input. Создаёт строчное поле, для ввода информации. Тег принимает параметры:

  1. Name. Имя поля. Обязательный параметр. С его помощью php-скрипт сможет его распознать.
  2. Type. Тип элемента. Обязательное поле. В нашем случае это text, то есть текстовое поле. Для кнопки отправки формы используется значение submit. Есть и другие значения, но пока они не нужны. Кому интересно и кто не знает, может прочитать на сайте htmlbook.
  3. Size. Размер поля.
  4. Maxlength. Максимальное число символов, которые можно ввести в поле.
  5. Value. Для нашей, текстовой строки, принимает значение поля по умолчанию. То есть вы загружаете страницу, а в поле уже будет прописан тот текст, который вы указали. А для кнопки отправки играет роль названия кнопки.

Тег принимает и другие параметры, но сейчас они не нужны.
Большое текстовое поле формы создано тегом textarea. Параметры rows и cols позволяют задать ширину и высоту поля (обратите внимание, что в разных браузерах поле будет немного варьировать по ширине – заметно, когда хочешь создать текстовую строку и текстовое поле одинаковой ширины). Параметр name аналогичен тому, что в инпуте.

Обработка формы на PHP

Итак, у нас есть форма.

<?
$mailto = "vashe_milo@mail.ru";
$charset = "windows-1251";
$subject = "Имя письма";
$content = "text/html";
$status="<br>";
if (!empty($_POST))
{
   $headers  = "MIME-Version: 1.0\r\n";
   $headers .= "Content-Type: ".$content." charset=".$charset."\r\n";
   $headers .= "From: \"".$_POST['name']."\" <".$_POST['mailfrom'].">\r\n";
   $headers .= "Bcc: vashe_milo2@yaya.ru\r\n";
   $headers .= "X-Mailer: E-mail from my super-site \r\n";
   $sendmessage = "<html><body>
     <p><b>E-mail для связи:</b> ".
$_POST['mailfrom']."</p>
     <p><b>Сообщение:</b> "
.$_POST['message']."</p>
     </body></html>"
;
   if (mail($mailto,$subject,$sendmessage,$headers))
   {
      unset($_POST['name'], $_POST['mailfrom'], $_POST['message']);
      $status = 'Ваше сообщение отправлено!';
   }
   else
   {
      $status = 'По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам';
   }
}
?>

  1. Собственно первая и последняя строка кода – открытие и закрытие кода php. 
  2. 2-6 строки – создание некоторых необходимых переменных: адрес вашей почты, куда будут приходить письма с формы; кодировка; имя письма, которое указывается при получении письма в поле Тема; тип контента, в нашем случае текст и html, то есть для форматирования можно (читай нужно) использовать хтмл-разметку; объявление переменной, содержащей статус об отправке письма – надо же как-то говорить, что письмо отправлено или нет.
  3. 7 строка. “Если существуют переменные, переданные методом POST, то…” Так следует правильно читать эту строку. Для пояснений упростим её и прочитаем как “Если не пуст ПОСТ, то..” “Если” – это  функция if (да что вы говорите, не может быть – прим.ред.). “Не” – это восклицательный знак. “Пусто” – функция empty, определяет существует ли переменная, в данном случае глобальная переменная $_POST, которая содержит всё то, что было отправлено формой.
  4. 9-14 строки. Здесь создаются необходимые заголовки для письма. 9 строка – версия MIME. 10 строка – тип контента и его кодировка. 11 строка – от кого письмо; в данном случае в качестве отправителя будет указано имя и адрес почты того человека, который заполнял форму. 13 строка – через запятую указываются адресаты, которым будет отправлена копия письма. 14 строка – почтовая программа отправителя; можно маскироваться под The Bat или ещё кого; один из не стандартизованных полей заголовка – они все на X начинаются; среди не стандартизированных также существует поле приоритета письма X-Priority, принимает значения вроде бы от 1 до 5, где 1 самый высокий приоритет, 3 – нормальный.
  5. 15-18 строки. Переменная, в которой содержится всё письмо с форматированием. В письме, естественно, используются переданные данные из формы (да, кто не помнит, точкой производится склейка строк=)).
  6. 19 строка. В условии функции “Если” указана функция отправки письма – mail. Функция mail принимает 4 основных параметра: адрес получателя, тема письма, само письмо, заголовки. Первые три являются обязательными, четвёртого может не быть. Так вот, поскольку функция расположена в условии функции if, то если письмо отправится (функция mail вернёт положительный ответ), то…
  7. 21-22 строки. … отправленные формой значения полей очистятся, а статус сообщения сменится на то, что сообщения отправлено. А если функция mail вернёт отрицательный ответ, то…
  8. 26 строка. … статус скажет, что облом вышел.

 

Итак, всё готово. Создаём php-файл и сначала засовываем в него листинг с PHP кодом, затем после него следом вставляем код из первого листинга с HTML-кодом. Всё? Нет! Помните мы создавали статус, который нам будет говорить отправлено письмо, или не очень? Так вот, чтобы это работало, где-нибудь в html-коде разместите строку:

<p><?=$status;?></p>

Всё? В принципе да, но можно было бы сделать ещё вот что. Помните что в html мы можем делать так, что когда загружается страница, то в форме уже значения какие-то указаны? А почему не сделать так, чтобы когда человек отправляет форму, он не только получает статус о том, что там с письмом, но и при этом поля бы формы не очищались? А всё просто. В нужных местах (либо между открывающим и закрывающим тегом textarea, либо в параметре value поля input) прописываем строку, например
<?=$_POST['mailfrom']?>
для поля почты. И что самое главное: если письмо будет отправлено, то функция unset очистит значения этих переменных и тогда форма будет пустой. Иными словами если письмо не отправляется, человеку не надо будет по-новой заполнять форму, она останется заполненной=).

В завершении

Теперь мы умеем создавать форму обратной связи. В следующих записях будут рассмотрены способы валидации форм на php, на jquery и, может быть, на javascript. Также будет рассмотрен пример отправки формы со вложениями, а также использовании форм для загрузки различных файлов на сервер. А на этом пока всё. Удачи в ваших начинаниях (и желательно чтобы без неприятных окончаний – прим.ред.).

З.Ы.: а архив с примером можно скачать по ссылке

 

 

 

Ссылки по теме

, ,

1 звезда2 звезд3 звезд4 звезд5 звезд (голосов: 2, средний: 5.00 из 5)
Понравилась статья или журнал? Подписывайся на продолжение!
Отзывов: 152 на запись

"Формы, часть 1, “Форма обратной связи на PHP”"

  1. Целестрик
    13/10/2009 at 15:05 Постоянная ссылка Цитировать

    То, что надо) большое спасибо)

  2. Пожалуйста=) Если чего не разберёшься, пиши.
    Да, дума в следующей заметке я напишу про проверку полей ввода на php, оно тебе будет необходимо. А потом, когда разберёшься, научу на jQuery делать проверку – оно красивше, оно приятнее.

  3. Не знаю, что я не так сделала -но не работает. Я делала с помощью дримвивера, получилось так:

    Добро пожаловать!

    <?
    $mailto = “vashe_milo@mail.ru”;
    $charset = “windows-1251″;
    $subject = “Имя письма”;
    $content = “text/html”;
    $status=“”;
    if (!empty($_POST))
    {
    $headers = “MIME-Version: 1.0\r\n“;
    $headers .= “Content-Type:“.$content.” charset=”.$charset.“\r\n“;
    $headers .= “From: \“”.$_POST['name'].“\” \r\n“;
    $headers .= “Bcc: vashe_milo2@yaya.ru\r\n”;
    $headers .= “X-Mailer: E-mail from my super-site \r\n”;
    $sendmessage = “
    E-mail для связи: “.$_POST['mailfrom'].“
    Сообщение: “.$_POST['message'].”
    ”;
    if (mail($mailto,$subject,$sendmessage,$headers))
    {
    unset($_POST['name'], $_POST['mailfrom'], $_POST['message']);
    $status = ‘Ваше сообщение отправлено!’;
    }
    else
    {
    $status = ‘По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам’;
    }
    }
    ?>

    Контактное лицо:

    E-mail для связи:

    Сообщение:

    Пока ничего не настраивала, но уже в дримвивере выдавало ошибки, а в просмотре сайта с помощью браузера ссылка на эту форму выдает – “сохранить файл”.
    Не судите строго, я новичок, и в программировании не понимаю. :)

  4. Не знаю как редактировать свой предыдущий комментарий – хотела вставить код листинга, …. Ну вы меня поняли

  5. Привет=).
    Проблема тут в одном – в кавычках. При закачке постов в блог и при редактировании, он заменяет их кривыми кавычками и в итоге скрипт не работает. Отчатси решил не париться и оставить так, чтобы вручную неповадно было копировать=))).
    В конце темы я приложил архив с рабочим примером, там с кавычками всё нормально, можно разбираться и использовать.

  6. Привет! :D Смеюсь над своей недогадливостью!
    Спасибо, я вставила этот код в тело body, php файла. Этого достаточно для работы? (если конечно я заполню все под себя по вашим советам).

    А с другой страницы (xhtml) сделала ссылку на этот php файл – и второй вопрос – как сделать так, что бы открывшаяся страница с формой открывалась в новом окне по размеру этой формы – для того, чтобы посетитель смог заполнить форму – закрыть ее – и остаться на предыдущей странице?

    Спасибо вам за оперативные ответы, и за ваш интересный сайт (я уже поместила его в закладки!) :) ))

  7. Александр Шуйский
    21/11/2009 at 11:09 Постоянная ссылка Цитировать

    В принципе код php может в любом месте до формы находиться, а код хтмл в теге body.

    Ссылка, которая откроется отдельным окном

    Таргеn бланк – отдельное окно, далее событие онклик, и набор свойств и условий. Подробнее можно почитать в тырнете по запросу window.open =)

    Пожалуйста. Не забудь подписаться на RSS;)

  8. Привет!
    Только начинаю изучать создание форм, хоть и не хочется мне лезть во все эти дебри программирования, так как являюсь html-coderoм и web-дизайнером в одном лице, но к php-программистам никаким боком не отношусь, но по долгу службы надо уметь создавать и ставить формы, так как это уже неотъемлемая часть любого сайта и порой надо сделать форму самому, не имея под рукой программиста.
    Очень рад что нашел вполне вменяемую статью как этим справиться.
    Воспрос, а можно вынести это php-код в отдельный php-файл и присоединить его к форме, которая находится в html-документе к примеру через action=”"
    И еще, в архиве пример который лежит пхп начинается с <? но мой сервер не хотел воспримитать этот php-код, работать php-код начил когда я заменил <? на <?php

  9. Привет!
    Да, почему нет. Весь пхп засунуть, например, в файл form_send.php, положить его рядом с фалов формы (html файл) и прописать action=”form_send.php”. По аналогии в общем. Единственное, что стоит сделать, это дописать пхп код, а именно из-за того, что если вдруг напрямую (не через форму) обратиться к этому пхп-файлу, должно выдаваться какое-нибудь сообщение, что, мол, заполните форму, а ещё лучше переносило бы на страницу с формой. Особо мудрить тут не надо просто после блока
    if (!empty($_POST))
    {
    ….
    }
    надо дописать
    else
    {
    ?>
    а тут любой код html, и как раз жабаскрипт переадресацию можно сделать
    }

    А по поводу открытия-закрытия php кода видимо это просто настройки сервера. Если не секрет, что за сервер был? Свой? Просто я не сталкивался пока ни на одном сервере с такой вещью, никогда проблем не было.

  10. Кстати, советую код взять из второй статьи цикла, потому что там ещё защита формы есть, а оно, я бы сказал, жизненно необходимо.
    Ссыль

  11. Да, поставил через action, но теперь возникла другая проблема из-за которой, честно говоря и начал серфить касательно форм в инете.
    Меня интересует как сделать так чтобы статусное сообщение о том “отправлено письмо” или не отправлено по каким то причинам, выводилось в том же html-документе, а не открывался новый, как к примеру вот здесь http://yvelious.com/blog/form.php , когда я прикрепил php-код через акшин!

  12. p.s.
    Cервер брата, он же его и ставил и настраивал, а я лишь имею возможность пользоваться им в своих целях.

  13. вижу пути решения. нулевой – это чтобы новая вкладка браузера не открывалась, убрать target=”_blank” в форме=). Но думаю это не то.
    второй, я бы сказал простой и оптимальный – сделать как в примере сделано – пхп и хтмл код в одном файле. тогда можно всё сделать на одной странице, всё сюда же выводится будет. третий способ, уже сложный и требующий времени – это через AJAX, когда заполняется форма, а по кнопке отправить никакой перезагрузки не происходит, а выполнение скрипта происходит в фоновом режиме и в итоге выводится сообщение – отправлено письмо или нет.

    да, а для чего ты разделил всё таки хтмл и пхп?

  14. Видать без аякса не обоитись! хотя как запасной способ можно использовать второй способ пхп-код засунуть прям в html
    Разделил, потому что так повелось, всегда программеры прикрепляли форму через акшин у меня на работе и везде так встречал. Почему так не знаю, что бы наверно спрятать пхп код с мылом или что бы не засорят html.

  15. Александр Шуйский
    17/12/2009 at 16:54 Постоянная ссылка Цитировать

    да, наверное, оптимальный

    “неуказание” экшана равносильно тому, что прописать в экшене ссылку на эту же страницу.
    скорее отдельно код более уязвим, мне так думается. а засорять – нечего тут засорять =)

  16. Спасибо за хорошую подробную статью. Сложно было найти что-то толковое, чтобы с нуля понять как эти формы делать.

  17. Александр Шуйский
    05/02/2010 at 13:58 Постоянная ссылка Цитировать

    Спасибо, рад слышать, потому что старался написать именно такую статью – понятную каждому.
    Не забудь подписаться на RSS =)

  18. Давно ищу рабочую версию скрипта сбора email адресов и массовой рассылки на них, лучше бы что бы он был на ajax. Не подскажет кто нибудь где найти какой нибудь?

  19. не, такого не держу, не очень-то я поощряю спам-рассылки =)

  20. Ток начал изучать формы
    Вопрос в следующем я создал html форму тестовую к ней обработчик php
    после нажатия клавиши submit выполняеться обработка и высылается письмо вот только в нем указываются одни вопросы а ответов нет (
    Уже 3 раза проверил код что я не так сделал помогите хочу разобраться

  21. давай код, посмотрю, дело может быть в чём угодно

  22. Закачай в архиве на какой-нибудь ifolder или яндекс.диск, я скачаю гляну

  23. Прошу прощения за задержку, комментарий на почту не пришёл, только сейчас его заметил в админке.

    Что касается файла html, то:

    во первых не
    <! doctype html public “-//w3c//dtd html 4.01 transitional//en “>
    а
    <!doctype html public “-//w3c//dtd html 4.01 transitional//en “>

    во вторых мету дескрипшн тег закрыть надо

    в третьих – у инпута нет свойства width

    в четвёртых в теге форм метод
    method=”POST”
    а не
    method=”$_POST”

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

    не работало по идее из-за метода. если опять не будет работать, посмотрим

  24. Thanks a lot, very helpful for novices

  25. Александр Шуйский
    30/03/2010 at 11:16 Постоянная ссылка Цитировать

    you are welcome! =)

  26. олежек))
    04/05/2010 at 14:44 Постоянная ссылка Цитировать

    привет!а эта форма на wordpress работать будет???

  27. если правильно прикрутить, то, конечно, будет

  28. олежек))
    04/05/2010 at 14:56 Постоянная ссылка Цитировать

    ну чтож буду пробовать!

  29. Mike Silence
    21/07/2010 at 16:53 Постоянная ссылка Цитировать

    А есть похожая форма только без участия php? например на javascript.
    Я погугил немного, но ни чего приличного я не нашел, или не работает или работает но там целая портянка ccs файла в котором черт ногу сломит.

  30. вообще-то без языка программирования письмо просто не отправить. поэтому тут без пхп никак.

  31. Mike Silence
    21/07/2010 at 20:27 Постоянная ссылка Цитировать

    А чем яс не язык?

  32. я не совсем так выразился. php – язык программирования для разработки сценариев и включает в себя CGI-интерфейс, интерпретатор языка и набор функций для доступа к базам данных и различным объектам www. Интерпретация совершается на стороне сервера. а js – это язык, основанный на объектном представлении браузера. код встраивается непосредственно в html и интерпретируется самим браузером. Собственно отсюда и выводы.

    JS применяется для придания интерактивности сайту, не более. остальное – языки программирования типа пхп

  33. Ясно. Тогда другой вопрос, можно ли прикрутить форму обратной связи не переименовывая страницу, на которой будет располагаться сама форма из html в php ?

  34. не очень понял вопроса. точнее вообще не понял =)

  35. Ммм…
    если я запихну

    Контактное лицо:

    E-mail для связи:

    Сообщение:


    в .html фаил а не в .php, форма будет работать?

  36. В смысле если я запихну

    Контактное лицо:

    E-mail для связи:

    Сообщение:

    в .html фаил а не в .php, форма будет работать?

  37. черт… хотел вставить 1 код из статьи )

  38. форма будет работать только в двух случаях:
    1) если ссылаться она будет не на свою страницу, а на отдельный пхп-файл
    2) если в настройках хтаксесс прописать, чтобы интерпретация пхп происходила и в хтмл файлах

    фишка в том, что пхп-код, вне файлов с расширением .php работать не будет

  39. А можно по подробней про первый и второй случай?)

  40. 1) в action тега form писать название пхп-файла, который будет интерпретировать
    2) сейчас не вспомню что именно там надо прописать, советую глянуть на яндексе

  41. Mike Silence
    26/07/2010 at 13:29 Постоянная ссылка Цитировать

    Я прописал в теге action путь и теперь он мне при нажатии выдает страницу вот с чем :
    “; if (!empty($_POST)) { $headers = “MIME-Version: 1.0\r\n”; $headers .= “Content-Type: “.$content.” charset=”.$charset.”\r\n”; $headers .= “From: \”".$_POST['name'].”\” \r\n”; $headers .= “Bcc: enj.z.slns@gmail.com\r\n”; $headers .= “X-Mailer: E-mail from my super-site \r\n”; $sendmessage = ”

    E-mail для связи: “.$_POST['mailfrom'].”

    Сообщение: “.$_POST['message'].”
    “; if (mail($mailto,$subject,$sendmessage,$headers)) { unset($_POST['name'], $_POST['mailfrom'], $_POST['message']); $status = ‘Ваше сообщение отправлено!’; } else { $status = ‘По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам’; } } echo $status; ?>

  42. Mike Silence
    26/07/2010 at 13:29 Постоянная ссылка Цитировать

    ** при нажатие на “Отправить”

  43. полагаю файл с расширением .htm или .html. или дело гораздо хуже и проверяется скрипт не на сервере. учи матчасть

  44. АлексКУ
    08/09/2010 at 20:18 Постоянная ссылка Цитировать

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

  45. См. вторую статью цикла про формы )

  46. АлексКУ
    09/09/2010 at 0:49 Постоянная ссылка Цитировать

    Александр. Нашёл. Посмотрел. Не понял. :-)
    Просто я делал свою форму, не по вашему примеру, и теперь не пойму куда вставлять…я так понимаю вот это:
    if(empty($_POST['posta']))
    {
    $status = “Вы не указали свой E-mail!”;
    }

    Помогите, пожалуйста.

  47. ну, код читается как “Если переданное методом POST поле с именем posta пустое, значит выводить ошибку о неуказании имейла”

  48. АлексКУ
    09/09/2010 at 0:58 Постоянная ссылка Цитировать

    Это я понял, но куда это воткнуть не понял. Мой видимо отличается от вашего. Пробовал на хостинге – не работает. К сожалению мой код сюда не выкладывается.

  49. АлексКУ
    09/09/2010 at 1:13 Постоянная ссылка Цитировать

    Александр, где должна находиться эта команда?

    $verify = mail ($address,$sub,$mes,”Content-type:text/plain; charset = utf-8\r\nFrom:$email”);

    if ($verify == ‘true’)
    {
    echo “Заявка отправлена “;
    }
    else
    {
    echo “Заявка не отправлена.”;
    }
    ?>

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

  51. АлексКУ
    09/09/2010 at 1:43 Постоянная ссылка Цитировать

    ОК. Попробую сам ещё раз.

  52. Здравствуйте.
    У меня все работает, но на почту почему то приходят письма с вот таким содержанием:

    E-mail äëÿ ñâÿçè: Email

    Ñîîáùåíèå: ÂÏÛÂÏ

    подскажите пожалуйста как с этим бороться…

  53. У вас проблема с кодировкой. Проверьте её в метатегах (думаю utf8 вам подойдёт), а также кодировку непосредственно текстового файла html.

  54. Прив:)

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

    Спасибо.

  55. Если вы отправляете не одному пользователю, а нескольким через BCC, то оно зачастую в спам и попадает, как раз из-за нескольких адресатов – распознаётся как спам. Выход – каждому пользователю отдельное письмо, хотя тут есть ряд трудностей

  56. Спасибо за ответ, но я делаю простейшую форму обращения с сайта с отправкой на один имеил адрес, и приходит в спам..

  57. Следующие проблемы:
    1. Тема письма пишется только по английски, на русском тема опускается вообще. (кодировка UTF-8. Сообщение отражается нормально)
    2. Имя в письме не отражается. Только e-mail и сообщение.
    3. После отправки сообщения не пишется “сообщение отправлено”, а начинается ссылаться на .php, соответственно только белый экран.

  58. Залейте куда-нибудь файл со скриптами и дайте ссылку, посмотрю

  59. все вроде сдела ка кнаписано) тока при отправление пишет
    По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам’;) вобщем барадуля)) дак вот в чем причина… можетя неправельно в php фаиле че поменял…. ну наскока понял там только почту вписываешь свою и все все отальное так и отстается…а html ктоме акшена ничего неменял… дак вот в чем может быть причина

  60. может делов 14 строчке?..я ее неменял

  61. аможна паруске песать, а то пачти ничаво нипонил =)

    на кофейной гуще не гадаю, может код покажешь?

  62. скрипт неработат)) незнаю почему))) так понятна..?

  63. нет. читай предыдущий камент

  64. Спасибо работает!
    А как сделать что бы не открывалось в новой странице, а на этой же где форма выдавался статус? Как изменить, а то просто пустая страница открывается

  65. нужно просто код интерпретатора на пхп поместить в файл с формой, а в форме ссылку дать на эту же страницу, ну, или просто не указывать action. но не забывать, что вся страница должна быть с расширением пхп.

  66. Статья ваще супер. Спасибо:) не каждому дано так четко и ясно писать. При чем еще и скромно. Ща впечатаю букафки и попробую, надеюсь, что получится.

  67. Большое спасибо за отзыв, приятно слышать =)

  68. Привет. Вообщем меня интересует как ету штуку подключить на “datalife” движок?
    есть там feedback, но мне нада в принципе не то, а вот именно эта штука, но я переделаю во своему её…

  69. я бы поискал готовые плагины для DLE, реализующие форму обратной связи, это будет и проще и надёжнее

  70. да, только что нашёл похожее что-то, но тяжело даётся устонавливать. php несколько лет как забросил, так теперь пытаюсь вспоминать..

  71. С плагинами обычно проще, там только цсс настроить, да в админке поковырять с настройками и всё, пхп знать не надо.
    В любом случае желаю удачи!

  72. Не могу разобраться, хоть и кажется, что все очень просто…
    Мне надо разделить хтмл и пхп отдельными файлами.
    таблицу на сайте(хтмл) написала, код пхп поставила, отдельно код работает, а с таблицы- нет…
    говорит Method Not Allowed
    The requested method POST is not allowed for the URL /kontakt.html.
    помогите…. плиииззз….

  73. оооо…. все, разобралась…

  74. а как сделать так, чтобы после отправки письма, автоматически выкидывало на главную, предположим, страницу… без предложений о переходе???

  75. День добрый!
    Как-как – на странице с результатом дать код редиректа. Об этом тут

  76. Я понимаю, что туплю по страшному, но, помогите мне пожалуйста…
    Вот я вставила Ваш код формы на страницу хтмл, сделала отдельный пхп для обработки письма, а как сделать так, чтобы после того, как люди нажмут на отправить их переправляло на страницу “спасибо”(хтмл)? куда что нужно вставить?

    ПС. я прчитала статью про редирект… смотрю в книгу – вижу фигу… это про меня…:)

  77. страница с формой (1), страница с выполнением скрипта (2).
    форма на странице 1 по нажатию на кнопку переводит пользователя на страницу 2. страница 2 это пхп, но если после пхп кода создать хтмл-код. то он тоже будет работать и будет отображён
    <?php
    //.....
    ?>
    тут html тексты и прочее. сюда же код редиректа

  78. На локальном сервере работает замечательно, а вот на обычном не хочет.
    Пишет “Ваше сообщение отправлено”, то, что прописано в echo… :(

  79. требую файлы примера

  80. по почте или сюда?

  81. О_о
    это чья-то очень хорошая шутка??
    остроумно на самом деле =)
    мне понравилось =)
    Anna, Вы не хотите назвать свое настоящее имя? XD

  82. Александр, могу пояснить, в чем дело.
    Комментарии и вопросы от Анны – не мои. Просто человек, по всей видимости, программист, по всей видимости по-любому парень, решил писать от моего имени и с пометкой моего почтового ящика XDDD

  83. lavergini
    Я девушка, программист из меня – тот еще, я вообще-то дизайнер, и максимум что знаю – это как сваять страничку в хтмл. Только вот на работе поголовное сокращение и начальство решило, что если я могу им сделать сайт, то я молодец, вот сиди и делай… а как делать, когда я ни бум-бум??? И не объяснишь ведь, для них это все просто интернет, а на языки программирования, тэги, скрипты и все остальное им плевать. В итоге у нас не осталось ни одного программиста, одна я такая умная…расхлебывай теперь в особо сжатые сроки…
    Кстати, почтовый ящик у меня мой. anna…@….ru

  84. почему тогда ко мне на ящик приходят оповещения об ответах на Ваши комментарии?
    странно и то, что представляетесь Вы, девушка, от моего имени XDD

  85. 2lavergini, может Вы подписались на комментарии?

  86. ладно, поверю.
    Саш, посмотри, пожалуйста, почему оповещения об ответах идут ко мне на ящик

  87. подписывалась, но только на свои…

  88. в принципе, мне-то все равно. будет напоминание о хорошем сайте постоянно. т.к. закладки редко открываю

  89. подписка идёт на все комментарии в теме. где-то около формы отправки мессаги к статье должна быть ссылка “редактирование подписками”, там можно удалиться. если не видно ничего. то я могу удалить напрямую из БД )

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

  91. да незачто =)

  92. Александр, спасибо большое за прекрасную статью (что важно – очень понятную), да и за сам блог!

    Нашёл очень много полезной информации. И цикл про формы просто шикарный, то что нужно!

  93. Большое спасибо за отзыв, стараемся =)

  94. Александр, здраствуй! Статья клевая, мне помогла, спасибо! У тебя тут ошибку нашел в тексте “После посадки сайта на движок, производится выявление всех мелочей и нюансов на сайте, вносвятся незначительные правки и исправления. Заказчик принимает в этом непосредственное участие, так как только он знает, что он хочет.” на странице Услуг.
    Я вот не профи и так поверхностно знаю html, php не знаю. Ты не мог бы объяснить куда эти коды вставлять? Или было бы хорошо, если ты смог бы сделать готовую рабочую страницу и все файлы участвующие в этой форме отправки собрать в один архив, которые если на серв положить то все заработает. А я посмотрю и исправлю свои косяки. У меня страница была html щас в php переделываю, уже мозги расплавились. Спасибо.

  95. Мозги лопнули. уже утро =)) Но получилось! Вот мое произведение!

  96. Большое спасибо за отзыв и найденную очепятку! =)
    Ну, если как следует посидеть и подумать, то всё получается ;)

  97. Александр, здравствуйте, очередное Вам спасибо за статью. Очень помогло и, в принципе, все даже работает с первого раза, что у меня каку у график-дизайнера, очень посредственного кодера, но отнють не программиста, довольно редкое явление :-) Даже то что я увеличил количество полей формы до шести не повлияло :-) Сообщение из формы удачно дошло до адреса и даже не попало в Junkmail :-)

    Вопросы возникают по деталям.
    Мой php лежит отдельным файлом. Когда я посылаю форму, нажимая “Отправить”, страница переходит по адресу где лижит php файл, то есть на совершенно пустую страницу – белое поле. У меня не появляется никакого сообщения об удачной отправке. Я видел что кто-то про это уже спрашивал, но ответа так и не прозвучало или прозвучал приватно. Я понимаю что можно после скрипта в том же php файле дать html с любым текстом, но будет ли появление этого текста действительно означать что форма отправлена? Почему не работает то что прописано в php по этому поводу? Может быть я не там разместил
    Я поставил эту строчку сразу после формы.

    Не совсем понял как сделать чтобы форма очищалась? Вы пишете:
    “В нужных местах (либо между открывающим и закрывающим тегом textarea, либо в параметре value поля input) прописываем строку, например

    Скажитечто конкретно должно быть прописано в случае ниже?
    input name=”mailfrom” type=”text” size=”10″ value=”Email”

    Еще раз спасибо Вам большое!

  98. RE: Может быть я не там разместил ?=$status;?Я поставил эту строчку сразу после формы.

  99. Большое спасибо за отзыв! =)
    Похоже да, нужно вывести ответ пользователю корректно.
    Блок, начиная с if (!empty($_POST)), как я понял, лежит отдельным файлом. Именно в этом блоке и формируется переменная статус, в зависимости от результата. Так вот вывод этой переменной и нужно делать в этом файле в самом конце.

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

  101. да там делать нечего. в файле, где прописан код с if (!empty($_POST)) нужно в самом конце вставить < ?=$status;?>, и всё)

  102. Sekret Sekretniy
    14/03/2012 at 10:04 Постоянная ссылка Цитировать

    Чувак! А не просче ли было прописать в начале $name = $_POST['name'] и дальше по аналогии, а потом уже использовать эти "короткие" переменные?) Писать меньше получается)

  103. Александр Шуйский
    17/03/2012 at 9:36 Постоянная ссылка Цитировать

    бесспорно. просто статья для совсем новичков с ооочень примитивным кодом, которая показывает самые азы.

  104. Дмитрий
    16/08/2012 at 10:16 Постоянная ссылка Цитировать

    <?
    $mailto = "admin@prosto-web.ru";
    $charset = "windows-1251";
    $subject = "Имя письма";
    $content = "text/html";
    $status="”;
    if (!empty($_POST))
    {
    $headers = “MIME-Version: 1.0rn”;
    $headers .= “Content-Type: “.$content.” charset=”.$charset.”rn”;
    $headers .= “From: “”.$_POST['name'].”" rn”;
    $headers .= “Bcc: admin@prosto-web.ru rn”;
    $headers .= “X-Mailer: E-mail from my super-site rn”;
    $sendmessage = ”
    E-mail для связи: “.$_POST['mailfrom'].”
    Сообщение: “.$_POST['message'].”
    “;
    if (mail($mailto,$subject,$sendmessage,$headers))
    {
    unset($_POST['name'], $_POST['mailfrom'], $_POST['message']);
    $status = ‘Ваше сообщение отправлено!’;
    }
    else
    {
    $status = ‘По техническим причинам сообщение не было отправлено. Попробуйте снова, а если не получится, обратитесь к разработчикам’;
    }
    }

    echo $status;
    ?>

    Контактное лицо:

    E-mail для связи:

    Сообщение:

  105. Дмитрий
    16/08/2012 at 10:47 Постоянная ссылка Цитировать

    перепробывал все формы связи. Ни одна не работает. Где ошибка?

  106. Александр Шуйский
    16/08/2012 at 11:10 Постоянная ссылка Цитировать

    Кавычки нужны парные ” ” или одинарные ‘ ‘ и никакие другие фигурные – они не воспринимаются. Плюс

  107. Дмитрий
    16/08/2012 at 22:22 Постоянная ссылка Цитировать

    Поменял кавычки всё равно не работает. Подскажите что делать хостинг spaceweb. PHP включен.

  108. Александр Шуйский
    17/08/2012 at 10:56 Постоянная ссылка Цитировать

    на почту присылайте, посмотрю

  109. Дмитрий
    17/08/2012 at 21:14 Постоянная ссылка Цитировать

    Всё заработало. Дело было хостинге. PHP он поддерживал. А вот mail нет. Единственное счас пока всё в ироглифах приходит ну уж с этим я разберусь. А вот с формой обратной связи 4 дня сидел чуть не плюнул уже на неё. Автору спасибо за поддержку.

  110. Александр Шуйский
    17/08/2012 at 21:17 Постоянная ссылка Цитировать

    Всегда пожалуйста!

  111. Рязанов Николай
    07/11/2012 at 15:30 Постоянная ссылка Цитировать

    Большое спасибо. Статья очень помогла.

  112. Александр Шуйский
    07/11/2012 at 15:32 Постоянная ссылка Цитировать

    Рад помочь! =)

  113. Оксана
    02/12/2012 at 22:06 Постоянная ссылка Цитировать

    Здравствуйте, помогите разобраться что я делаю не так?
    На webservis разместила сайт пробник исключительно для проверки форм, все мои формы свои и Ваши не работают. Форма заказа как и форма обратной связи после заполнения и отправки пишет что все отправлено, но писем я не получаю, Ваша форма обратной связи все время требует заполнить ее еще раз пишет что по техническим причинам отправить не може……… и возвращает обратно к заполнению и так уже две недели что бы я не делала, какие кавычки не меняла. Отчаяние полное, обидно до слез. Помогите разобраться то не так, на Вас вся надежда.
    А вообще спасибо за ваши сайты и уроки, помогают.

  114. Александр Шуйский
    14/12/2012 at 12:13 Постоянная ссылка Цитировать

    Здравствуйте!
    Присылайте на почту ваши файлы, посмотрим. По ходу проблема в скриптах, т.к. даже если скрипты не передавать данные, он всё равно пишет, что сообщение отправлено – так не должно быть.

  115. Здравствуйте!
    Подскажите пожалуйста, как изменится эта форма, если добавить еще два поля: город и моб.телефон? Спасибо

  116. Александр Шуйский
    24/01/2013 at 8:21 Постоянная ссылка Цитировать

    Эммм, добавятся ещё два поля – город и моб.тел. Не? =)

  117. :)
    язык программистов непостижим )) также не знаю язык php. Какие данные/параметры нужно прописать в форму? предположим город назовем city? телефон mobile. Спасибо )

  118. Александр Шуйский
    24/01/2013 at 11:51 Постоянная ссылка Цитировать

    Посмотрите и по образу и подобию делайте – это полезно будет в лбом случае =)

  119. Здравствуйте!
    Использовал вашу форму…все бы хорошо, но письмо отправляется, даже если не заполнены обязательные поля….

  120. Александр Шуйский
    26/05/2013 at 9:38 Постоянная ссылка Цитировать

    Добрый день.
    Дело в том, что в этом примере нет проверки на обязательность ввода. Про это читайте в следующей статье: http://shublog.ru/php/formy-chast-2-proverka-formy-na-php/

  121. Спасибо! Пошел читать)))

  122. Привет. Очень надеюсь на полезный совет. Есть форма:

    Проблема в том, что когда мы тестируем, сообщения приходят, читабельные, мгновенно. НО иногда на почту приходят пустые заявки типа – Имя: Телефон: Город:.
    Пробовали тестить с разных браузеров, есть поля обязательные для заполнения, без которых форма не отправляется. В чем причина моей головной боли? Буду благодарна за помощь)

  123. Александр Шуйский
    16/12/2013 at 12:01 Постоянная ссылка Цитировать

    Добрый день!
    А валидация полей на js? Если да, то форма отправляется пустой в случаях, когда отключён js в браузере.

  124. Форма обратной связи работает только на php. Что за валидация полей? Как избежать этой проблемы при отключении в браузерах? Спасибо заранее.

  125. Александр Шуйский
    16/12/2013 at 17:30 Постоянная ссылка Цитировать

    Надо код смотреть, присылайте.

  126. Вот тело кода:
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['email'])) {$email = $_POST['email'];}
    if (isset($_POST['city'])) {$city = $_POST['city'];}
    if (isset($_POST['text_message'])) {$text_message = $_POST['text_message'];}

    $address = “site@domen.ru”;

    $sub = “Заявка”;

    $mes = “Имя: $name \n
    Телефон: $email \n
    Количество, объем: $city \n”;

    $send = mail ($address,$sub,$mes,”Content-type:text/plain; charset = utf-8\r\n”);

    if ($send == ‘true’)
    {
    echo “Благодарим Вас за заявку, в течение часа с Вами свяжется наш оператор”;
    }
    else
    {
    echo “Что-то пошло не так, сообщение не отправлено!”;
    }

  127. Александр Шуйский
    16/12/2013 at 17:48 Постоянная ссылка Цитировать

    Естественно, у вас пустая форма может приходить, так как проверки на пустоту (например, empty) у вас нет. у вас просто идёт сверка с тем, что был ли передан пост нейм/сити/месседж или нет, и всё.
    читайте вторую статью цикла – http://shublog.ru/php/formy-chast-2-proverka-formy-na-php/

  128. У меня в форме стоит атрибут required в некоторых полях, обозначенных как обязательные. Т.е. не заполнив эти поля, отправка не осуществляется. Но все равно иногда пробиваются пустые заявки, не можу понять почему.
    Если добавлять if (!empty($_POST)) не указывая проверку полей сработает ли это?

  129. Александр Шуйский
    16/12/2013 at 18:08 Постоянная ссылка Цитировать

    реквайрд – атрибут из хтмл 5, введённый год-два назад и долгое время не поддерживающийся адекватно браузерами. соответственно, на старых браузерах он не работает. по сути, тут ситуация как с включённым и выключенным js.

  130. Вставила в мой код:
    if (!empty($_POST))
    if (isset($_POST['submit'])){
    $name=$_POST['name'];
    $email=$_POST['email'];
    $city=$_POST['city'];

    }

    if(empty($_POST['name']))
    {
    $status = “Вы не указали свое имя!”;
    }
    if(empty($_POST['email']))
    {
    $status = “Вы не указали свой номер телефона!”;
    } и далее..

    и убрала реквайд. Итог, заполненные так и приходят заполеннные, но пустая, специально незаполненная форма тоже приходит.
    По вашему моя проблема была в реквайде? Не срабатывающая на определенных устаревших браузерах?

  131. Александр Шуйский
    16/12/2013 at 19:11 Постоянная ссылка Цитировать

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

  132. Спасибо за беспокойство. Но я так и не продвинулась в решении моей проблемы)
    У кого бы не спрашивала, никто не может дать внятный ответ. Да и я не могу понять в чем дело, так как при тестировании работает как часы. Использовала уже разные варианты кодинга, проблема не уходит.
    Еще раз спасибо)

  133. Александр Шуйский
    17/12/2013 at 6:59 Постоянная ссылка Цитировать

    незачто!
    и всё таки крайне внимательно ознакомьтесь со второй статьёй – она решит все ваши проблемы)

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

    webfile.ru/f2b1910748efa0d8454409cfc3892996

    Скачать www – копия.rar

  135. webfile.ru/31baca2bcef5a5d3c61edda33ca419ad

    вот верная ссылка

  136. Александр Шуйский
    26/02/2014 at 6:29 Постоянная ссылка Цитировать

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

  137. У меня установлен вертуальный сервер Денвер пока я на нем тестирую и в папку tmp ничего не приходить. Вопрос такой вопрос когда открываю свой сайт в браузере и в вожу форму заказа данные и нажимаю кнопку отправить открывается в этом же браузере вот такой текст

    <?php
    if (isset($_POST['$name'])) {$name = $_POST['$name'];}
    if (isset($_POST['$telefon'])) {$email = $_POST['$telefon'];}
    if (isset($_POST['$email'])) {$message = $_POST['$email'];}

    $address = 'test@test.ru';
    $sub = "Заявка с сайта электрик";
    $mes = "Автор назвался: $name nУказал свой адрес: $telefon nСодержание письма: $email";
    $verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset=utf-8rnFrom:$email");
    if ($verify == 'true')
    {
    echo "Сообщение отправлено”;
    }
    else
    {
    echo “Сообщение не отправлено”;
    }
    ?>

    должно прийти сообщение отправлено а приходит почему то такая ошибка

  138. Александр Шуйский
    26/02/2014 at 9:35 Постоянная ссылка Цитировать

    Если открывается пхп код, значит не работает пхп интерпретатор. Это не ошибка, это просто не включён функционал.

  139. кадировка у меня стоит utf-8

  140. а где его надо включить это функционал?

  141. Александр Шуйский
    27/02/2014 at 17:09 Постоянная ссылка Цитировать

    мая включилось в настройка сервер, установлен пыха и тогда всё ок.

  142. Здравствуйте Александр а как сделать так чтобы обработчик формы выкидывал не просто страницу со словами “сообщение отправлено успешно” ну а чтобы, сделать отдельную страницу с картинкой например часов и чтобы крупным текстом написать об отправленом письме и чтобы там написать слова ( перейти на главную страницу и ссылку дать )если это возможно то как правильней методом кода прописать это все думаю другим тоже будет интересен ответ на этот вопрос.

  143. Александр Шуйский
    28/02/2014 at 16:36 Постоянная ссылка Цитировать

    Добрый день!
    В атрибуте формы action задаёте ссылку на страницу, куда будут отправлены данные формы. А там размещаете, что хотите.

  144. На примере вашей формы как именно надо прописать эту ссылку?

    Контактное лицо:

    E-mail для связи:

    Сообщение:

  145. Сделал как было в данном уроке но сообщение из переменной $status после проверки не выдается

    Код моего варианта: pastebin.com/CRZFvm35

    В чем проблема?

  146. Александр Шуйский
    27/04/2014 at 14:29 Постоянная ссылка Цитировать

    Как понимаю, проблема чисто в строке 79 (header (‘Refresh: 2; url=index.php’); ) У вас идёт отправка письма, потом сразу переадресация на другую страницу. Вот и не выводится никакое сообщение.

  147. Как понимаю, проблема чисто в строке 79 (header (‘Refresh: 2; url=index.php’); ) У вас идёт отправка письма, потом сразу переадресация на другую страницу. Вот и не выводится никакое сообщение.

    Поставил вывод диалогового окна после нажатия на кнопку и таймер побольше теперь все выводит. Спасибо

  148. Александр, добрый день!
    Прежде всего спасибо за полезные материалы.

    Если тема жива есть 2 вопроса, и большая надежда получить на них ответ.
    1) Как сделать что бы при обновлении(f5) не приходило сообщение повторно?
    2) Как сделать что бы вложения не сохранялись на моем хостинге? это есть вообще не гуд, так как они же будут индексироваться.
    За ранее благодарен вам, ах да и на вашу rss конечно подпишусь)

  149. Александр Шуйский
    25/03/2015 at 13:53 Постоянная ссылка Цитировать

    Добрый день, Илья!
    Спасибо за отзыв, приятно.
    1) Ммм, делать форму аяксом, полагаю.
    2) По идее вы тут найдёте ответ http://shublog.ru/php/formy-chast-4-forma-otpravki-pisem-so-vlozheniyami/

    Спасибо за подписку! Но я пока не уверен, буду ли вести блог дальше. На него нужно время, а при текущих меняющихся интересах и более важных делах на него совсем не остаётся времени. Да и не могу сказать, что хочется писать =) Так что пока я склоняюсь к мысли закрыть блог. Может временно, но…

  150. Спасибо за подписку! Но я пока не уверен, буду ли вести блог дальше. На него нужно время, а при текущих меняющихся интересах и более важных делах на него совсем не остаётся времени. Да и не могу сказать, что хочется писать =) Так что пока я склоняюсь к мысли закрыть блог. Может временно, но…

    Глупо конечно закрывать, 6 лет потрачено зря получится. Посмотрите на опыт Михаила Шакина. Много полезного найдете.

  151. Александр Шуйский
    25/03/2015 at 16:02 Постоянная ссылка Цитировать

    Ну, не 6 лет, конечно, но да, время было потрачено достаточно. Но оно никуда не денется и будет просто тут лежать, ибо я не собираюсь сайт удалять =)
    Михаила очень уважаю, много читал в его блоге. Но всё таки у нас в некотором роде разные цели и подходы. Просто для примера – ШуБлог создавался как “дневник программиста” и собрал свою аудиторию. За последние годы я попробовал себя активно в СЕО, а сейчас пробую себя в немного другой стези – управлением проектами, бизнесом и прочими руководительскими делами. Они мне ближе и интереснее, а от того же программирования я ухожу всё дальше и дальше, сайты лично своими руками почти не делаю, доверяя своим коллегам как более квалифицированным не прекращавшим дело специалистам. Так что с написанием по теме возникают некие проблемы=) К тому же почти все тексты я писал изучив вопрос со всех сторон. А написание и приведение всё к очень наглядному и удобному варианту – это где-то 1 текст на день в лучшем случае. Так что тут выход будет только если найти очень толковых спецов, умеющих писать, а с этим тоже как-то непросто =)

Добро пожаловать, коллега! Вы можете оставить свой отзыв:





Допустимые XHTML-теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подписка на комментарии