<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

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

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

Подписавшись по 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> и без них и вырезать чтобы оставался только чистый текст

Ответить

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