PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
  • Галерея
Календарь
Январь (2021)
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
В продаже

  • Что нового?

    • Тест №2
    • Тест №1 для разработчиков
    • PHP 5.6 RC1
    • SQL. Как cкопировать данные одной колонки в другую, в той же таблице
    • GRUB изменить порядок загрузки OS в Linux
    • SSH - вход на сервер без ввода пароля
    • PhpMyAdmin - проблема с загрузкой большого файла на сервер
  • Комментарии

    • тут нечего не понятно
    • Может уже пора на WebStorm переходит...
    • Здравствуйте. 10 лет пользуюсь др...
    • Была такая проблема, решалась пе...
    • Возможно с течением времени этот...
  • TOP-5

    • Метод POST (2939570)
    • Привет, МИР! (906979)
    • Метод GET (661683)
    • Операторы (601627)
    • Firefox уже запущен, но не отвечает... (346896)

Передача данных через форму, передача данных между страницами сайта, отправка формы.

Главная » Уроки PHP » Передача данных через форму, передача данных между страницами сайта, отправка формы.
PHP урок № 229

Отправка данных из формы обработчику событий.

Пожалуй, это один из первых вопросов, возникающий у человека, начинающего изучать PHP. Первые шаги по созданию сайта обеспечат вам этот вопрос. Это актуально, т.к. взаимосвязь между страницами, создаваемыми для сайта, и объединение этих страниц в одно целое и есть по существу "сайт". Так как же происходит передача данных между страницами сайта.
В одном из уроков я уже поднимал тему отправки данных с сайта. Это были сообщения с сайта на почтовый адрес (email). Тема называлась Форма для отправки сообщения с сайта, можно ознакомится кому интересно. Сейчас рассмотрим немного другую связь-связь между страницами, хотя там тоже она есть.
И так, есть форма, в которую заносятся данные. Возникает вопрос: "Для чего может понадобиться отправка данных на другую страницу сайта?" Если рассматривать приложение авторизации пользователя на сайте в браузере, то это представляется так:
  1. пользователь вводит данные, логин и пароль и т.д. в форму авторизации
  2. после чего нажимает кнопку "Отправить" или "Войти", уж у кого как
  3. ему приходит ответ, если конечно он правильно всё заполнил, типа "Спасибо, что вы нас посетили".
Вот в общем три основных части из чего состоит авторизация пользователя на сайте. Но это только со стороны пользователя, который видит это всё в браузере. Для создателя сайта это выглядит по другому и может представляться так (один из вариантов):
  1. пользователь вводит данные, логин и пароль и т.д., в форму регистрации
  2. после чего нажимает кнопку отправить или зарегистрироваться, уж у кого как
  3. данные передаются для проверки обработчику, это и есть другая страница, хотя и не всегда другая. Обработчик может находится и на той же странице, что и форма отправки данных.
  4. ему приходит ответ, если конечно он правильно всё заполнил, типа "Спасибо, что вы нас посетили".
Здесь третьим пунктом идёт обработчик события, того события, которое произошло после нажатия кнопки "Зарегистрироваться", а именно - отправка данных. Эти данные проверяются в "обработчике событий". Обработчик событий (в данном примере)- это программный код PHP, который сверяет присланные ему данные из формы с теми данными, которыми обладает база данных и которыми по логике обработки он (обработчик) наделён.

Листинг № 1 - Форма отправки данных обработчику (файл page1.php).

<form  method="post" action="page2.php">
Логин:
<input name="login" type="text" value="">
Пароль:
<input name="pass" type="text" value="">
<input name="go" type="submit" value="Войти">
</form>
Обратите внимание на первую строку в листинге №1. Атрибуту action тега form, присвоено значение page2.php. Это говорит нам, что данные из формы будут отправлены обработчику под именем page2.php. Здесь ещё можно добавить, что обработчик этот должен находится в той же директории, что и страница, отправляющая данные.
Рис.1
Если обработчик находится в другой директории, то значение атрибута action надо изменить и прописать относительный путь. Например: /admin/foto/page.php2 - это путь от корневой директории сайта. Если обработчик находится в папке выше, следовательно, надо прописать на сколько выше таким знаком ../ . Он обозначает - подняться на одну директорию выше относительно директории, в которой находится файл. Пример: ../foto/page.php2
Рис.2

Листинг № 2 - Пример обработчика событий в PHP (файл page2.php). Вывод данных на монитор.

<?php 

 
echo "Логин: " .$_POST['login']."<br>";
 echo 
"Пароль: " .$_POST['pass']."<br>" ;

?>
В листинге 2, показан простой обработчик. Он ничего не делает с данными, которые ему присланы со страницы page1.php. Он лишь выводит их в браузер на своей странице. Ну, в принципе, задача выполнена. Данные со страницы page1.php переданы на страницу page2.php.
При отправке данных используется метод POST. Данные сохраняются в суперглобальном массиве $_POST. Для того, чтобы их вывести на страницу, надо указать имя переменной в квадратных скобках, примерно так: $_POST['login'] - такая переменная содержит данные, отправленные из поля под именем login в нашей форме. Метод указывается в атрибуте method, тега form.
Таким же образом можно передать данные из любой формы. Суть заключается в том, чтобы присвоить полю формы имя(name)= login - так определили имя login, знак "равно" присваивает. Значит теперь у некой формы есть имя login, а для php это стало переменной $login. Следовательно, этой переменной можно присвоить значение. Как раз это значение и вписывает пользователь в поле, которое предоставлено на странице и которое видит в браузере.

Другой способ отправки.

Изменим форму отправки и зададим уже заведомо известные данные, т.е. чтоб пользователь мог выбрать из списка, то что подходит.

Листинг № 3 - Форма отправки данных по выбору из списка. (page1.php)

<form  method="post" action="page2.php">
<label>
    <select name="data" id="select">
      <option value="Alex">name</option>
      <option value="Parov">surname</option>
      <option value="19.11.2009">data</option>
    </select>
  </label>
<label>
  <input type="submit" name="button" id="button" value="Отправить">
</label>
</form>
Выглядит это так:

Листинг № 4 - Обработчик данных. Вывод на монитор.(page2.php)

<?php 

 
echo "Выбранные данные: " .$_POST['data']."<br>";

?>

Как форма взаимодействует с базой данных

Я как то не мог сразу сообразить, какой пример описать. Решил, что наглядно и полезно будет представить форму регистрации пользователя, ну в очень уж облегчённом виде )). Только для демонстрации связи с базой данных формы.
Для реального сайта она вряд ли подойдёт хотя...

Листинг № 5 - Дамп БД. Таблица user (db_backup.sql)

-- phpMyAdmin SQL Dump
-- version 3.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Окт 05 2013 г., 03:21
-- Версия сервера: 5.5.25
-- Версия PHP: 5.3.13

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `test`
--

-- --------------------------------------------------------

--
-- Структура таблицы `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `user_id` int(6) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `pass` varchar(30) NOT NULL,
  `email` varchar(30) NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `user`
--

INSERT INTO `user` (`user_id`, `name`, `pass`, `email`) VALUES
(1, 'SETTER', '12345', '[email protected]'),
(2, 'LPHPRU', '54321', '[email protected]'),
(3, 'ww', 'ee', '[email protected]');

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
Ниже листинг файла конфигурации, проще сказать подключения к базе.

Листинг № 6 - Файл config.php

<?php 
$HOST 
= "localhost";
$USER = "root";
$PASS = "";
$DB = "test";
$PREFIX = "";


    if(!
mysql_connect("$HOST", "$USER", "$PASS")) exit(mysql_error());
    else {echo 
"";}
    
    if (!
mysql_select_db($DB)) exit(mysql_error());
    else{echo 
"";}
    
    
mysql_query('SET NAMES cp1251;');

?>
Ну и наконец сам скрипт взаимодействия с mysql

Листинг № 7 - Форма взаимодействия с базой данных

<style type="text/css">
sup{
	color:red;	
}
</style>
<?php
// Подключаемся к базе данных
require_once "config.php";
$langth = 30;
$arr = array(
    
'Не все значения заполнены.',
    
'Пароли не совпадают.',
    
'Ошибка! Длина строки выше '. $langth,
    
'email - не верно написан',
    
'Поздравляем! Вы успешно зарегистрированы.', 

);


if(
$_POST['go'] == 'Регистрация'){
    foreach(
$_POST as $key => $val){
        
// Проверяем, чтоб все поля были заполнены.
        
if(empty($val)){
            
$error = $arr[0];
        } else {
            
// Проверяем длинну значений формы
            
if(strlen($val) > $langth){
                
$error = $arr[2];
            }    
        }
    }
    
    
extract($_POST);
    
    
// Совпадают ли пароли
    
if($pass != $pass2){
        
$error = $arr[1];
    }
    
    
// Проверяем email на соответствие шаблону
    
if(!preg_match("|^[-0-9a-z_\.][email protected][-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)){
        
$error = $arr[3];
    } 
    
    
// Если ошибок нет - 
    // заносим нового пользователя в БД
    
if(empty($error)){
        
$query = mysql_query("INSERT INTO user VALUES('', '".$name."', '".$pass."', '".$email."')");
        if(!
$query){$error = mysql_error();}
        
$error = $arr[4];
    }
    
}
echo 
$error;    
?>
<!--
Здесь данные из формы отправляются скрипту-обработчику, который находится в этом
же файле.
  Это сделано только для примера. Реально обработчик должен находиться в другом
файле.
-->

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
  <table border="0" cellpadding="5">
    <tr>
    <td align="right">Логин<sup>*</sup>:</td>
    <td> </td>
    <td align="left"><input name="name" type="text"></td>
  </tr>
  <tr>
    <td align="right">Пароль<sup>*</sup>:</td>
    <td> </td>
    <td align="left"><input name="pass" type="text"></td>
  </tr>
  <tr>
    <td align="right">Пароль (повторить)<sup>*</sup>:</td>
    <td> </td>
    <td align="left"><input name="pass2" type="text"></td>
  </tr>
  <tr>
    <td align="right">E-mail<sup>*</sup>:</td>
    <td> </td>
    <td align="left"><input name="email" type="text"></td>
  </tr>
  <tr>
    <td align="right"></td>
    <td></td>
    <td align="left"><input name="go" type="submit" name="go" value="Регистрация"></td>
  </tr>
  <tr>
    <td align="right"> </td>
    <td> </td>
    <td align="left"> </td>
  </tr>
  </table>
</form>

Урок закончен.

SETTER © LPHP.RU
Администрация сайта
19.11.2009 13:03:13

Обсудить на форуме.
Понравился урок? Не пропусти следующий!
Рекомендованные уроки этого раздела:
  • Проверка квадратного уравнения
  • Как вставить картинку в скрипт PHP.
  • Как сделать счетчик загрузок для файлов.
  • PHP сессия. Передача массива данных.

Напишите свой комментарий
Ваше имя
Сообщение
Введите цифры с картинки:
 

Комментарии

чингиз 13.10.2012 12:36:22
спс за уроки
Александр 15.09.2013 17:59:59
Очень полезно, но маловато.( Хотелось бы узнать больше о возможностях использования форм в php и его синтаксис. Однако, всё понятно с первого раза, большое спасибо за статью.)
павел 04.10.2013 19:22:45
Хотелось бы узнать: как форма взаимодействует с базой данных.
Ульяна 27.02.2014 18:17:09
Ой, как я вам благодарна за такие замечательные уроки!! все очень понятно, и вообще все здорово))) Тысяча плюсов к карме и наилучшие пожелания!!! Если не сложно только, помогите, пожалуйста: я сохранила базу данных и с расширением sql, и с php, но когда я пытаюсь запустить последний описанный файл (у меня - forma-bd.php) - пишет, что потерял базу test. С чем может быть связано? И еще. В коде обязательно писать все, что до CREATE TABLE? (Я про файл бд)
  • Яндекс.Метрика Здесь находится аттестат нашего WM идентификатора 185571665285
  • "LPHPRU" © 2009-2021