<MyRusakov.ru />

Вёрстка сайта с нуля 2.0

Вёрстка сайта с нуля 2.0

Система "Вёрстка сайта с нуля 2.0" содержит в себе не только сами видеоуроки по адаптивной вёрстке сайтов с примерами, но и вспомогательную систему для более эффективного обучения.

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

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

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

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

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

Для начала давайте создадим форму на HTML:

<html>
<head>
  <title>Форма</title>
</head>
<body>
  <form name = 'myform' action = 'req.php' method = 'post'>
    Ваш логин: <input type = 'text' name = 'login' />
    <br />
    Ваш пароль: <input type = 'password' name = 'pass' />
    <br />
    <input type = 'submit' value = 'Войти' />
  </form>
</body>
</html>

Это пример классической формы авторизации пользователя, которую, уверен, многие из Вас многократно заполняли на самых разных сайтах. Давайте теперь обсудим один важный момент: как отправляются данные? Существует два метода (мы с Вами будем только два рассматривать) - это GET и POST. Главное их отличие - это вид отправки: открытый (GET) и закрытый (POST). Самый лучший способ понять, в чём разница - это открыть данный HTML-код в браузере и нажать кнопку "Войти". Посмотрите на адресную строку, а потом поставьте другой метод, снова пройдите и вновь посмотрите на адресную строку. Отличие будет бросаться в глаза мгновенно.

Соответственно, в PHP существуют два массива: $_GET и $_POST, которые содержат данные, полученные каждым из этих методов. Также есть массив $_REQUEST, который содержит данные $_GET и $_POST одновременно. Я Вам советую использовать метод POST и массив $_POST, хотя, безусловно, зависит от ситуации, но в большинстве случаев делают именно так.

Теперь давайте обработаем данные. Давайте реализуем простой скрипт (в файле "req.php"):

<?php
  $login = $_POST['login'];
  $pass = $_POST['pass'];
  if (($login == "Admin") && ($pass == "AdminPass"))
    echo "Привет, Admin!";
  else echo "Доступ закрыт";
?>

В данном скрипте мы получаем данные, полученные из формы методом POST (из массива $_POST, хотя с таким же успехом могли получить эти данные из $_REQUEST). Дальше проверяем логин и пароль и выводим: "Привет, Admin!" или "Доступ закрыт". Разумеется, чтобы создать систему авторизации пользователей на сайте, необходимо ещё узнать о cookie или о сессиях (в принципе, тоже cookie), но о них мы поговорим несколько позднее, потому что у нас впереди ещё очень много важных тем.

Аналогично, считываются и обрабатываются абсолютно любые данные из форм. То есть всё, что Вам нужно - это знать имя переменной (задаётся в HTML-форме) и дальше использовать массивы $_POST, $_GET и $_REQUEST.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (83):

sync.o sync.o 13.05.2011 14:03:17

Вот Вы пишете "абсолютно любые", а массив через форму не передается(( А было бы неплохо...

Ответить

Admin Admin 13.05.2011 14:06:33

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

Ответить

sync.o sync.o 13.05.2011 14:23:38

да я пробовал hidden, выдает просто "Array", а содержание массива теряется

Ответить

Admin Admin 13.05.2011 14:26:44

Разумеется теряется. Вы же наверняка пишите что-нибудь наподобие этого: <input type = 'hidden' value = '<?php echo $array;?>' /> А надо преобразовывать массив в строку, где элементы могут идти, например, через запятую. А чтобы получить массив, надо эту строку обратно преобразовать в массив. Функции explode() и implode() с этими двумя задачами прекрасно справляются.

Ответить

sync.o sync.o 13.05.2011 14:31:10

спасибо! я так и думал, что без строк тут не обойтись)) Кстати, вот и функция implode() реально пригодилась)

Ответить

Lev Lev 22.09.2011 11:10:22

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

Ответить

Adrenalin Adrenalin 19.12.2011 00:10:34

Михаил! А как сделать уведомления (админу) о новых комментариях? И, возможно ли сделать это, если комменты записываются не в базу данных, а у файл?

Ответить

Admin Admin 19.12.2011 00:13:02

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

Ответить

dunper dunper 26.12.2011 12:10:14

Михаил, как сделать вывод данных из mysql таблицы, отфильтрованной на основе формы (фильтр на чекбоксах и выпадающих списках)? Обработать форму нужно в отдельном файле или можно тут же?

Ответить

Admin Admin 26.12.2011 12:32:17

Обрабатывать форму можно, где угодно. А для вывода из базы на основе форму нужно делать на основе генерации SQL. Генерируете SQL запрос (через множество IF на проверку чекбоксов), выполняете и выводите результат.

Ответить

dunper dunper 17.01.2012 11:36:05

Можно сделать так, чтобы значения формы не сбрасывались в дефолт при отправке на обработку (обработка в том же файле)?

Ответить

Admin Admin 17.01.2012 11:50:38

Сохранять значения, например, в сессию, а потом их подставлять в форму.

Ответить

Adrenalin Adrenalin 17.01.2012 14:22:11

Михаил, а можно узнать какую конкретно строчьку нужно прописать в коде комментариев, для уведомления о новых комментах мне на Email? Все комменты записываются в файл .txt

Ответить

Admin Admin 17.01.2012 19:27:24

В скрипте-обработчике просто шлёте письмо с необходимыми данными через функцию mail().

Ответить

Adrenalin Adrenalin 17.01.2012 23:17:40

Помоги создать эту строчьку с функцией mail() Мыло напиши любое. Я не догнал. Вот обработчик: <?php $dirct="papka"; $otznam=$HTTP_POST_VARS['nom'].time(); $hdl = fopen("$dirct/$otznam", "w+"); fwrite($hdl,strip_tags($HTTP_POST_VARS['otziv'])); strip_tags(строка, '<a><b><i><u>'); fclose($hdl); Header("Location: http://tviksi.ru/igru.html"); ?>

Ответить

Admin Admin 18.01.2012 12:11:12

Перед Header("...") вызовите функцию mail(). Как пользоваться этой функцией, написано здесь: http://myrusakov.ru/email-php.html

Ответить

grisha grisha 18.01.2012 15:12:37

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

Ответить

Admin Admin 18.01.2012 15:21:39

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

Ответить

grisha grisha 19.01.2012 19:41:11

не получается, я пишу форму -> принемаю данные -> записываю в базу и все равно выводится не понятно что. Можете в крации написать скрипт? или же статью, я думаю не мне одному будет интересно.

Ответить

Admin Admin 19.01.2012 20:01:54

Здесь в самом простейшем случае будет порядка 150 строк. Сами понимаете, что в комментарий этой не вставить. Выводится непонятно что, потому что неправильно выводите значит. Почитайте про язык SQL и PHP. Не выборочно (как многие), а всё подряд. А выборочно читают уже очень опытные люди, у которых за плечами годы практики. Вам же нужно тщательно всё и детально изучать, начиная с самого тривиального и двигаться вглубь материала.

Ответить

grisha grisha 19.01.2012 20:14:45

хорошо, подскажите пожалуйста вот тут не правельно да? $c = $_POST['comment']; \\здесь я принял данные из формы, а как теперь записать в бд??? $mysqli->query('INSERT INTO comment (comment) values(что написать здесь?)'); Заранее спасибо!

Ответить

Admin Admin 19.01.2012 20:23:42

Правильно принимаете. Запрос: "INSERT INTO `comment` (`comment`) VALUES ('$c')"

Ответить

grisha grisha 19.01.2012 21:06:57

Благодарю

Ответить

grisha grisha 19.01.2012 21:14:32

и последний вопрос, я делаю выборку и мне выдает Array ( [comment] => привет [data] => 0000-00-00 00:00:00 ) вот так, как сделать чтобы выдовалось просто "привет" и дату отправки?

Ответить

Admin Admin 19.01.2012 21:21:02

echo Название_массива["comment"];

Ответить

grisha grisha 19.01.2012 21:53:54

echo $row["comment"]; не получилось

Ответить

grisha grisha 19.01.2012 21:56:23

аа не , не все получилось. Спасибо

Ответить

ArturPanteleev ArturPanteleev 17.04.2012 18:58:13

Никто не знает в чем проблема? Делал для админки возможность удаления банеров, вот код: $file_list = scandir("$_SERVER[DOCUMENT_ROOT]\admin\banera"); foreach($file_list as $value) { if (($value<>'.') && ($value<>'..')) {echo " <br> <input type='checkbox' name='$value' value='delet'> $value";}}; проблема такая: каждому элементу массива $_POST передается значние delet, которое должно передаваться только отмеченным чекбоксам, в чем тут может быть загвоздка?

Ответить

Admin Admin 17.04.2012 19:46:15

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

Ответить

ArturPanteleev ArturPanteleev 18.04.2012 07:44:39

Тогда почему в файле обработчике, прописав: foreach($file_list as $value) { if (($_POST[$value]='delet') && ($value<>'.') && ($value<>'..')) { unlink("$_SERVER[DOCUMENT_ROOT]/admin/banera/$value");echo "$_POST[$value]"; } } я получаю удаление всех файлов(даже если ничего неотмеченно)? Специально ввел echo "$_POST[$value]" чтобы проверить значение и везеде выводит delet(для каждого элемента массива, ставил я галочку или нет)

Ответить

Admin Admin 18.04.2012 18:43:53

Выведите print_r($_POST) в самом начале скрипта и посмотрите, действительно ли приходят. Уверен, что нет, если Вы нигде не ошиблись.

Ответить

ArturPanteleev ArturPanteleev 18.04.2012 19:10:48

Array ( [googlec886694543f3d6ce_html] => delet [login_ini] => delet [qqq_php] => delet ) вот что выводит при отмечании чекбоксов

Ответить

Admin Admin 18.04.2012 19:12:07

Вот эти 3 чекбоса и выделены, значит, всё работает правильно, и все ошибки уже непосредственно в Ваших циклах или в том, что перед ними.

Ответить

Сорокин Сорокин 23.05.2012 22:00:44

Михаил. Что следует сделать если задача состоит а том , что при нажатии на кнопку должен выполнится php скрипт который берет данные из бд и выводит их в текстовом поле. Кнопок на странице несколько. То есть страница не должна обновляться, а просто обновляться текстовое поле. Больше всего интересуют как связать скрипт с текстовым полем.

Ответить

Admin Admin 23.05.2012 22:53:02

http://myrusakov.ru/javascript-post.html

Ответить

lev_100russ lev_100russ 03.06.2012 00:08:05

Здравствуйте Михаил! Подскажите пожалуйста как соединить HTML с PHP??? Если можно, то напишите подробный код! Вашу статью по соединению файлов читал, но про HTML не понял! Взарание Спасибо!

Ответить

Admin Admin 03.06.2012 00:41:29

<?php тут PHP-код ?>Тут HTML-код

Ответить

lev_100russ lev_100russ 03.06.2012 14:28:06

Но куда вставлять PHP код? Между тегами body в HTML файле?

Ответить

Admin Admin 03.06.2012 14:32:20

В любое место, где он нужен, хоть прямо внутри тега.

Ответить

lev_100russ lev_100russ 03.06.2012 14:36:06

Спасибо! Просто где-то читал вы писали, что нельзя внедрять PHP в HTML

Ответить

Admin Admin 03.06.2012 14:36:54

Можно, но крайне нежелательно.

Ответить

lev_100russ lev_100russ 03.06.2012 14:50:22

А как тогда сделать по другому? Вот например у меня Отдельные файлы CSS и JavaScript соединены с HTML с помощью кода написанного в HTML между тегами HEAD! Можно ли сделать также с PHP??

Ответить

Admin Admin 03.06.2012 14:53:48

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

Ответить

Сложеникин Сложеникин 15.10.2013 20:52:50

Михаил, здравствуйте. сделал отдельно файл html, отдельно req.php в той же папке. в html php не прописывал. все работает. или я вас неправильно понял или еще что...спасибо вам за сайт- благодарю пользуясь возможностью.

Ответить

White_Coder White_Coder 02.12.2012 13:59:37

Здравствуйте, Михаил! Вот, пишу форму обратной связи. Всё ОК, только возникли небольшие проблемы. Вот тут тестовая страница (я тут эксперимент) http://sites-platon.ru/server/form.html. Вот php код, ошибка в 7-ой строчке: <?php $to = $_POST['e-mail']; $sub = $_POST['Tema']; $M = $_POST['M']; $N = $_POST['Name']; $F = $_POST['File']; $Z = $M,"<br>","От ",$N,"<br>",$F; mail($to, $sub, , $Z); ?>

Ответить

Admin Admin 02.12.2012 18:43:00

Надо вместо запятых точки использовать.

Ответить

White_Coder White_Coder 02.12.2012 19:05:28

unexpected ','

Ответить

White_Coder White_Coder 02.12.2012 19:06:14

Всё, разобрался! Спасибо!

Ответить

JusyaOoops JusyaOoops 10.01.2013 12:18:59

У меня вопрос к теме об авторизации пользователя, мы в html документе обращаемся к php, только вот при введении Admin и пароля AdminPass у меня выходит вся программа php файла целиком, а это <?php $login = $_POST['login']; $pass = $_POST['pass']; if (($login == "Admin") && ($pass == "AdminPass")) echo "Привет, Admin!"; else echo "Доступ закрыт"; ?> Почему так?

Ответить

JusyaOoops JusyaOoops 10.01.2013 12:25:52

Можете не отвечать, я разобралась)))))

Ответить

Yuliya Yuliya 05.03.2014 11:52:59

А я не разобралась. Подскажите, пожалуйста, что сделать

Ответить

Юрий В Юрий В 26.05.2013 01:04:57

а правда, что "action" надо указывать не имя файла обработчика, а его полный URL?

Ответить

Admin Admin 26.05.2013 10:49:39

Нужно указывать имя и расширение, а полный путь указывать необязательно.

Ответить

tikkiwiki tikkiwiki 13.05.2014 11:45:07

Нет, достаточно одно имя если обработчик и форма находится на одном уровне.

Ответить

Plan1977 Plan1977 14.06.2013 13:30:23

Михаил! А как и где используется параметр формы name. То есть если я присвоил форме имя (<form name='NAME' action='test.php'>) где я смогу его использовать и как?

Ответить

Admin Admin 14.06.2013 17:35:43

В JavaScript.

Ответить

Plan1977 Plan1977 14.06.2013 20:41:29

Тогда следующий вопрос. Возможно ли на странице сайта использовать сразу две формы с разными action? переменные с обоих форм будут уходить на страницу указанную в action? Или как то по другому?

Ответить

Admin Admin 14.06.2013 21:26:20

Можно, но отправить можно только одну форму.

Ответить

Plan1977 Plan1977 15.06.2013 09:06:26

То есть на страницу обработчика формы будут переданы только те переменные которые указаны в форме со сработавшим action? (думаю понятно обьяснил) А переменные другой формы с этой же страницы НЕ передадутся?

Ответить

Admin Admin 15.06.2013 10:29:37

Да, всё верно.

Ответить

torpedko torpedko 24.06.2013 14:42:41

михаил, у меня есть вот такой код <form name = "" action = "$radio" method = "post"><input type = "radio" name = "page" value = "action" />action <input type = "radio" name = "page" value = "arcade" />arcade <input type = "radio" name = "page" value = "fighting" />fighting <input type = "radio" name = "page" value = "RPG" />RPG <input type = "radio" name = "page" value = "strategy" />strategy <input type = "radio" name = "page" value = "simulator" />simulator <input type = "radio" name = "page" value = "sport" />sport <input type = "radio" name = "page" value = "racing" />racing <form> как сделать так чтобы под каждое radio перемення $radio меняла свое значение ссылкой на файл обработки данных? буду очень благодарен!!!

Ответить

Admin Admin 24.06.2013 19:06:51

Не вижу здесь никакой переменной $radio и не ясен вопрос.

Ответить

torpedko torpedko 24.06.2013 20:37:51

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

Ответить

Admin Admin 24.06.2013 21:20:24

Если Вы хотите менять action в зависимости от выбранного radio, то нужно использовать JavaScript.

Ответить

emulexx emulexx 04.07.2013 05:38:54

Здравствуйте, Михаил! Подскажите пожалуйста, как сделать проверку обязательных и необязательных полей формы (точнее только необязательных). Имеется форма регистрации - Логин, пароль, почта, город. Первые три обязательны для заполнения, последнее нет, проверяю все поля регулярными выражениями, всякими проверками на корректность ввода. А как сделать чтобы при незаполненном поле Город скрипт передавал бы базе данных только первые три поля, а город оставлял бы пустым?

Ответить

Admin Admin 04.07.2013 07:35:21

В PHP надо проверять empty(переменная_город).

Ответить

Avery Avery 24.07.2013 11:20:03

Здравствуйте, Михаил! Есть 4 кнопки radio, как узнать какая из них именно нажата?

Ответить

Admin Admin 24.07.2013 18:38:17

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

Ответить

Ddrop Ddrop 22.11.2013 14:31:48

Добрый день, Михаил! Делаю по вашим видио урокам сайт, на котором представлено 3 различных услуги, соответственно под каждую услугу своя html страничка с подключённой к ней (include ("forma.php");) общей формой. Теперь сам вопрос : как передать в базу данных, вместе с именем и телефоном, ещё и статичную переменную, которая характерезует данную услугу и задана на каждой страничке своя ??? З.Ы: я так понимаю надо передавать через <input type="hidden" name="variant" /> но как не пробовал, не получается..

Ответить

tikkiwiki tikkiwiki 22.11.2013 16:19:09

Алексей, Создайте БД, изучайте SQL и mySQL. 1.http://myrusakov.ru/sql-mysql-raznica.html 2.http://myrusakov.ru/mysql-connect.html 3.http://myrusakov.ru/mysql-query.html

Ответить

Ddrop Ddrop 22.11.2013 16:54:09

Я создал БД, и записываю туда имя и телефон из формы. Вот хотел узнать как в одну и ту же форму передавать значения , зависящие от страницы, к которой подключена форма

Ответить

alexandrdante alexandrdante 24.11.2013 16:20:21

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

Ответить

ae_coupe ae_coupe 16.12.2013 00:53:03

Михаил, проверял работоспособность php при помощи денвера, в этой же директории создал файл html, в котором хранится сама форма, при проверке(которую сто раз запускал при php) вижу только отработку php, формы не появляется. Совмещать PHP с html не стоит жеж, делать отдельными файлами?

Ответить

tikkiwiki tikkiwiki 16.12.2013 10:27:39

Дима, PHP и HTML совмещать можно, ничего в этом пагубного нет.

Ответить

ae_coupe ae_coupe 16.12.2013 23:47:34

Александр, естественно попробовал и совместить, у меня php отрабатывает параллельно, т.е сразу выбрасывается результат по php, предварительно не отработав код html. Вставляю перед body

Ответить

ae_coupe ae_coupe 18.12.2013 02:27:32

Михаил, просьба ответить на вопрос, не могу дальше идти. "Проверял работоспособность php при помощи денвера, в этой же директории создал файл html, в котором хранится сама форма, при проверке(которую сто раз запускал при php) вижу только отработку php, формы не появляется. Совмещать PHP с html не стоит жеж, делать отдельными файлами?"

Ответить

tikkiwiki tikkiwiki 18.12.2013 11:06:55

Дима, если у Вас есть вопросы, пишите в службу поддержки.

Ответить

Yuliya Yuliya 11.03.2014 11:49:52

Здравствуйте. Помогите, пожалуйста! У меня при нажатии на кнопку формы код не выполняется, а выводится всё содержимое php-файла, либо окно загрузки файла (зависит от браузера).

Ответить

tikkiwiki tikkiwiki 11.03.2014 11:51:44

Здравствуйте, Юлия. Прочтите данную статью: http://myrusakov.ru/html-open-txt.html

Ответить

Yuliya Yuliya 11.03.2014 13:01:32

Спасибо за ответ. Галочка у пункта "Скрывать расширения для зарегистрированных типов файлов" у меня не стояла. Не подскажете, в чём ещё может быть причина? php-файлы у меня работают. Не работают, когда идёт ссылка на них именно из формы. Не хотела вас тревожить, но просидев половину дня в поисковике и не найдя ответа, всё-таки решилась.

Ответить

tikkiwiki tikkiwiki 27.03.2014 11:29:11

Юлия, очень важно запускать к примеру Ваш index.html с формой через адресную строку,а не двойным кликом мыши. Тогда информация, которая будет отравлена с этой формы к примеру в обработчик action.php будет получена правильно и обработается, а не отобразится исходный код Вашего обработчика.

Ответить

Yuliya Yuliya 03.04.2014 14:54:13

Спасибо огромное!!!

Ответить

Dante5 Dante5 12.03.2015 01:00:16

а как проверить поле textarea перед записью в базу на любой вид ссылок и в тегах [a]<a> и без них и вырезать чтобы оставался только чистый текст

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.