Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Уроки PHP - урок 1 - Работа с формами

08/12/2019, by Ivan

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

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

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

Создадим папку class и в него поместим файл simpleCMS.php в котором будет содержаться наш класс управления сайтом, а также создадим файл index.php, который будет запускать это управление. И еще создадим пустую папку под наши сообщения, а также файл стилей style.css. Получатся такие файлы и папки:

class/simpleCMS.php

messages/

index.php

style.css

Содержание файла simpleCMS.php следующее:

<?php
class simpleCMS {  // класс упрвленения
  public function display_public() { // метод вывода сообщений
  
  }
  public function display_admin() { // метод ввода сообщения
	
  }
  public function write($p) { // метод записи сообщения
  
  }  
}
?>

Пока оставим методы пустыми, позже будем дописывать туда код.

Файл style.css:

*{
  margin: 0;
  padding: 0;
}

body{ 
  font: 12px "Lucida Grande",  Sans-Serif;
  background: #ccc;
}

#page-wrap{ 
  width: 500px; 
  margin: 50px auto; 
  padding: 20px; 
  background: white; 
}

h1, h2, h3{ 
  font: 28px Georgia, Serif; 
  border-bottom: 1px dotted #ccc;
  margin: 0 0 10px 0; 
}

.clear{ 
  clear: both; 
}

input[type="text"], textarea{ 
  padding: 3px; 
  border: 1px solid #666; 
  width: 350px;	
  margin: 0 0 15px 0; 
}

input[type="text"]{ 
  font: 28px Georgia, Serif; 
}

textarea { 
  height: 100px; 
  font: 12px "Lucida Grande", Sans-Serif; 
}

label 	{ 
  background: #666; 
  color: white; 
  padding: 2px 6px; 
}

.post{ 
  margin: 0 0 20px 0; 
}

Файл index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Изучаем PHP</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  	<div id="page-wrap">
    <?php
    
      include_once('class/simpleCMS.php'); // подключаем файл с классом
      $obj = new simpleCMS(); // создаем объект класса управления 
  ?>
   </div>
  </body>
</html>

Давайте разберемся как это будет работать. Вместе с загрузкой сайта, будет загружаться файл index.php, сейчас он будет выглядеть пустым, мы добавили класс и создали объект. У этого объекта есть методы, которые мы будем вызывать в нужный нам момент. Этот нужный нам момент мы будем определять проверяя условия оператором if.

Давайте пока отвлечемся от созданных файлов и разберемся с глобальными переменными $_GET и $_POST.

Глобальная переменная $_GET

У HTML-форм есть атрибут метод (method='get' или method='post'), в зависимости от выбранного метода данные с формы  будут записаны в глобальную переменную $_GET или $_POST. Давайте рассмотрим пример:

<form action="welcome.php" method="get">
Имя: <input type="text" name="fname" />
Возраст: <input type="text" name="age" />
<input type="submit" />
</form> 

Когда мы нажимаем на кнопку submit, то мы переходим на страницу:

http://sitename/welcome.php?fname=Peter&age=37

Таким образом формируется переменная $_GET, то есть после знака вопроса значения этой переменной:

<?php
print $_GET['fname'];
print $_GET['age'];
?>

Переменная $_GET это массив значений из URL. Таким образом мы можем передавать данные с одной странице на другую даже не используя формы, например если на странице:

http://sitename/example.php?number=45

Вы выполните этот скрипт:

<?php
  print $_GET['number'];
?>

То будет выведено число с URL.

Глобальная переменная $_POST

Переменная $_POST используется в формах также как и переменная $_GET. Давайте рассмотрим аналогичный пример.

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

<form action="welcome.php" method="post">
Имя: <input type="text" name="fname" />
Возраст: <input type="text" name="age" />
<input type="submit" />
</form> 

Когда мы нажимаем на кнопку submit, то мы переходим на страницу:

http://sitename/welcome.php

Теперь мы можем обратиться к переменной $_POST:

<?php
print $_POST['fname'];
print $_POST['age'];
?>

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

А теперь давайте создадим форму добавления сообщения. Добавлять сообщение мы будем используя метод POST, а вот управлять сайтом мы будем используя методы GET:

public function display_admin() { // метод ввода сообщения	
  $content = '';
  $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // $_SERVER['PHP_SELF'] возвращает имя файла из которого был вызван класс
  $content .= '<label for="title">Имя:</label><br />';
  $content .= '<input name="title" id="title" type="text" maxlength="150" />';
  $content .= '<div class="clear"></div>';
  $content .= '<label for="bodytext">Сообщение:</label><br />';
  $content .= '<textarea name="bodytext" id="bodytext"></textarea>';	
  $content .= '<div class="clear"></div>';	
  $content .= '<input type="submit" value="Добавить сообщение" />';	
  $content .= '</form>';		
  $content .= '<p><a href="/index.php">Вернуться на главную</a></p>';    
  return $content;  
}

Измените метод display_admin() вышеуказанным кодом.  Этот код будет выводиться когда нужно будет добавить запись. Но по умолчанию должны выводиться сами записи. Давайте договоримся, что форма будет выводиться, когда в URL будет переменная admin = 1. То есть URL будет такой:

http://test/index.php?admin=1

Поэтому давайте изменим наш файл index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
  <head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Изучаем PHP</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
  	<div id="page-wrap">
    <?php
    
      include_once('class/simpleCMS.php'); // подключаем файл с классом
      $obj = new simpleCMS(); // создаем объект класса управления

	  
      if( $_GET['admin'] == 1 ){ // если есть в URL переменная admin
	    print $obj->display_admin(); // если есть переменная, то отображаем форму
	  }else{
	    print $obj->display_public(); // если переменной нет, то отображаем сообщения
	  }
     
    ?>	  
	</div>
  </body>
</html>

И теперь изменим наш метод вывода сообщений на странице index.php без параметра:

  public function display_public() { // метод вывода сообщений
    $content = '';
	$content .= '<p><a href="/index.php?admin=1">Добавить сообщение</a></p>';
    return $content;
  }

Добавим ссылку на страницу с параметром, чтобы перейти туда.

Если при загрузки страницы у вас появляются кракозябры, тогда вам нужно создать файл .htaccess (в системе windows это может быть проблематично, поэтому скопируйте уже существующий файл и сделайте его пустым) и добавить в него эту строку:

AddDefaultCharset utf-8

Это заставит ваш сервер работать с UTF-8.

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

$content .=	'<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';

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

Прикрепленные файлы