PHP уроки
ПРОСТО самая лучшая обучалка PHP!
  • Студия LPHPRU
  • Уроки PHP
  • Контакты
  • Помощь
Меню
  • PHP - с чего начать?
  • Уроки PHP
  • Функции PHP
  • Массивы
  • Denwer
  • MySQL
  • Информация
  • Dreamweaver уроки
  • JQuery уроки
Календарь
Июнь (2023)
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
2627282930  

  • Что нового?

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

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

    • Метод POST (2946433 )
    • Привет, МИР! (911226 )
    • Метод GET (667805 )
    • Операторы (606044 )
    • Firefox уже запущен, но не отвечает... (353682 )

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

Главная» Array » Передача данных через форму, передача данных между страницами сайта, отправка формы.
PHP урок № 229
Отправка данных из формы обработчику событий.
Пожалуй, это один из первых вопросов, возникающий у человека, начинающего изучать PHP. Первые шаги по созданию сайта обеспечат вам этот вопрос. Это актуально, т.к. взаимосвязь между страницами, создаваемыми для сайта, и объединение этих страниц в одно целое и есть по существу "сайт". Так как же происходит передача данных между страницами сайта.
В одном из уроков я уже поднимал тему отправки данных с сайта. Это были сообщения с сайта на почтовый адрес (email). Тема называлась Форма для отправки сообщения с сайта, можно ознакомится кому интересно. Сейчас рассмотрим немного другую связь-связь между страницами, хотя там тоже она есть.
И так, есть форма, в которую заносятся данные. Возникает вопрос: "Для чего может понадобиться отправка данных на другую страницу сайта?" Если рассматривать приложение авторизации пользователя на сайте в браузере, то это представляется так:
пользователь вводит данные, логин и пароль и т.д. в форму авторизации
  • после чего нажимает кнопку "Отправить" или "Войти", уж у кого как
  • ему приходит ответ, если конечно он правильно всё заполнил, типа "Спасибо, что вы нас посетили".
  • Вот в общем три основных части из чего состоит авторизация пользователя на сайте. Но это только со стороны пользователя, который видит это всё в браузере. Для создателя сайта это выглядит по другому и может представляться так (один из вариантов):
    пользователь вводит данные, логин и пароль и т.д., в форму регистрации
  • после чего нажимает кнопку отправить или зарегистрироваться, уж у кого как
  • данные передаются для проверки обработчику, это и есть другая страница, хотя и не всегда другая. Обработчик может находится и на той же странице, что и форма отправки данных.
  • ему приходит ответ, если конечно он правильно всё заполнил, типа "Спасибо, что вы нас посетили".
  • Здесь третьим пунктом идёт обработчик события, того события, которое произошло после нажатия кнопки "Зарегистрироваться", а именно - отправка данных. Эти данные проверяются в "обработчике событий". Обработчик событий (в данном примере)- это программный код PHP, который сверяет присланные ему данные из формы с теми данными, которыми обладает база данных и которыми по логике обработки он (обработчик) наделён.
    Листинг № Array - Форма отправки данных обработчику (файл 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
    Листинг № Array - Пример обработчика событий в 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. Следовательно, этой переменной можно присвоить значение. Как раз это значение и вписывает пользователь в поле, которое предоставлено на странице и которое видит в браузере.
    Другой способ отправки.
    Изменим форму отправки и зададим уже заведомо известные данные, т.е. чтоб пользователь мог выбрать из списка, то что подходит.
    Листинг № Array - Форма отправки данных по выбору из списка. (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>
    Выглядит это так:
    Листинг № Array - Обработчик данных. Вывод на монитор.(page2.php)
    <?php 

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

    ?>
    Как форма взаимодействует с базой данных
    Я как то не мог сразу сообразить, какой пример описать. Решил, что наглядно и полезно будет представить форму регистрации пользователя, ну в очень уж облегчённом виде )). Только для демонстрации связи с базой данных формы.
    Для реального сайта она вряд ли подойдёт хотя...
    Листинг № Array - Дамп БД. Таблица 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@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 */;
    Ниже листинг файла конфигурации, проще сказать подключения к базе.
    Листинг № Array - Файл 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
    Листинг № Array - Форма взаимодействия с базой данных
    <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_\.]+@[-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
    Администрация сайта
    Array
    Обсудить на форуме.
    • lphp.ru © 2009-2023