Отправка get форм из программы на vb


Содержание

Работа с формами | Метод GET и POST в PHP

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

Во всех случаях у пользователя должно быть право что-то написать и на что-то нажать. Для этого и существуют формы.

Работа с формами в PHP и HTML

Формы обозначаются тегом form:

Атрибут method указывает каким методом будет производиться отправка формы. Существуют 2 метода – GET и POST. Подробнее от этом читайте чуть ниже, пока в краце расскажем об основных элементах формы:

Текстовое поле — Input text

Текстовое поле, в которое можно вводить информацию. Атрибут name – имя текстового поля, value – значение. Выглядят вот так:

Кнопка — Input Submit

Кнопка, используется для отправки форм. Выглядит вот так:

Текстовой блок — Textarea

Текстовой блок, обычно используется для написания сообщений большого размера. Атрибут rows, cols – длина и ширина.

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

Метод GET и POST при отправке форм

Методы GET и POST указываются в атрибуте method формы при ее инициализации:

Метод GET передает информацию в адресе страницы, метод POST – в заголовках. Чтобы лучше понять что такое метод GET и POST напишем скрипт, который будет отправлять наше имя и сообщение на сервер, а сервер выводить сообщение на экран.

В PHP данные полученные методом GET хранятся в переменной $_GET. Данные переданные методом POSTхранятся в переменной $_POST.

Напишем в начале код для работы с методом GET, потом методом POST.

Отправка get форм из программы на vb

Модератор: Brickgroup

Эмуляция отправки WEB формы через XmlHttp в VBScript

ALX_2002 » 31.12.2007 (Пн) 1:42

Заранее извиняюсь за название темы. Надеюсь админы почитают — скажут как переименовать или сами переименуют.
В общем решил реализовать класс эмуляции отправки формы из VBScript через XmlHttp. В принципе примеров полным полно. Но ни где подроно не разобрано как отправлять файлы. Да и универсального класса ни где не находил. Вот и решил написать + сделать у формы такие же свойства как у обычного HTMLFormElement.

Весь код расписал с подробными комментариями

Вот пример отправки файла на сайт http://www.zalil.ru

Кто опробует — отпишитесь пожалуйта

Код: Выделить всё ‘Описание класса FormClass

‘Пример создания: «Set WebForm = New WebFormClass»

‘Form.Action ‘ Свойство — URL на который будут отправлены данные. (чтение/запись)
‘Form.AddField ‘ Процедура — Добавление поля.
‘Form.AddFile ‘ Процедура — Добавление файла.
‘Form.Boundary ‘ Свойство — Разделитель между данными (чтение)
‘Form.Enctype ‘ Свойство — Тип кодирования формы (Для отправки полей — «application/x-www-form-urlencoded». Для отправки полей и файлов — «multipart/form-data») (чтение/запись)
‘Form.Method ‘ Свойство — Метод отправки данных (GET / POST)
‘Form.VarBody ‘ Свойство — Сформированные данные для отправки (чтение/запись)

‘Пример отправки файла на сайт http://www.zalil.ru

Dim WebForm
‘/// Создаём новый класс формы
Set WebForm = New WebFormClass
‘/// Указываем куда будем отправлять данные
WebForm.Action = «http://www.zalil.ru/upload/»
‘/// Устанавливаем метод передачи POST
WebForm.Method = «POST»
‘/// Для того чтобы передались файлы устанавливаем тип кодирования multipart/form-data
WebForm.Enctype = «multipart/form-data»
‘/// Добавляем файл
WebForm.AddFile «file», «C:\boot.ini»
‘/// Запускаем процедуру отправку
Submit WebForm

Sub Submit(WebForm)
‘/// Создаём объект отправки данных
Dim XMLHTTP
Set XMLHTTP = CreateObject(«MSXML2.XMLHTTP»)
‘/// Открываем соединение с URL
XMLHTTP.Open WebForm.Method, WebForm.Action, False
‘/// Если тип передачи данных POST, то добавляем к пакету заголовки
If WebForm.Method = «POST» Then
‘/// Если отправляем с кодированием «multipart/form-data», то добавляем информацию о разделителе данных
If WebForm.Enctype = «multipart/form-data» Then
XMLHTTP.setrequestheader «Content-type», WebForm.Enctype & «; boundary=» & WebForm.Boundary
Else ‘/// В ином случае добавляем информацию о том, что данные отправляются формой
XMLHTTP.setrequestheader «Content-type», WebForm.Enctype
End If
End If

‘/// Отправляем запрос
XMLHTTP.Send WebForm.VarBody
‘/// Смотрим статус ответа
Select Case XMLHTTP.Status
‘/// Если 200 — OK. Данные переданы успешно
Case 200
Dim InternetExplorer
Set InternetExplorer = CreateObject(«InternetExplorer.Application»)
InternetExplorer.Visible = True
InternetExplorer.Navigate «about:blank»
Do
WScript.Sleep 100
Loop Until InternetExplorer.readystate = 4
InternetExplorer.document.write XMLHTTP.responsetext
Case Else
MsgBox XMLHTTP.Status & » » & StatusText, vbCritical, «Ошибка при передаче данных !»
End Select
End Sub

‘/// Класс формы
Class WebFormClass
Private Fields, Files
Private PropertyEnctype, PropertyMethod, PropertyBoundary, PropertyAction

Private Sub Class_Initialize()
Fields = Array()
Files = Array()
PropertyEnctype = «application/x-www-form-urlencoded»
PropertyMethod = «GET»
PropertyBoundary = String(27, «-«) & GenerateBoundary
PropertyAction = «about:blank»
End Sub

Public Property Let Action(Value)
PropertyAction = Value
End Property

Public Property Get Action()
Action = PropertyAction
If PropertyMethod = «GET» Then
Dim Params
Params = VarBody
If VarBody <> «» Then Action = Action & «?» & Params
End If
End Property

Public Property Get Boundary()
Boundary = PropertyBoundary
End Property

Public Property Get Method()
Method = PropertyMethod
End Property

Public Property Let Method(Value)
Value = UCase(Value)
If Value = «GET» Or Value = «POST» Then PropertyMethod = Value
End Property

Public Property Get Enctype()
Enctype = PropertyEnctype
End Property

Public Property Let Enctype(Value)
Value = LCase(Value)
If Value = «multipart/form-data» Or Value = «application/x-www-form-urlencoded» Then PropertyEnctype = Value
End Property

Public Sub AddField(Name, Value)
SetElement Fields, Name, Value
End Sub

Public Sub AddFile(Name, Value)
SetElement Files, Name, Value
End Sub

Private Function SetElement(ArrayRef, Name, Value)
For Element > If ArrayRef(Element > ArrayRef(Element > Exit Function
End If
Next
ReDim Preserve ArrayRef(UBound(ArrayRef) + 1)
ArrayRef(UBound(ArrayRef)) = Array(Name, Value)
End Function

Public Property Get VarBody()
If PropertyMethod = «POST» And PropertyEnctype = «multipart/form-data» Then
Const DefaultBoundary = «—»
Dim Stream
Set Stream = CreateObject(«ADODB.Stream»)
Stream.Type = 2
Stream.Mode = 3
Stream.Charset = «Windows-1251»
Stream.Open

Dim FieldHeader, FieldsBody

For Each Field In Fields
FieldHeader = «Content-Disposition: form-data; name=»»» & Field(0) & «»»»
FieldsBody = FieldsBody & DefaultBoundary & PropertyBoundary & vbCrLf & FieldHeader & vbCrLf & Field(1) & vbCrLf
Next

For Each File In Files
If LoadFile(File(1), Data) Then
FileHeader = DefaultBoundary & Boundary & vbCrLf & «Content-Disposition: form-data; name=»»» & File(0) & «»»; filename=»»» & File(1) & «»»» & vbCrLf & «Content-Type: octet/stream» & vbCrLf & vbCrLf
Stream.WriteText FileHeader
Stream.Position = 0
Stream.Type = 1
Stream.Position = Stream.Size
Stream.write Data
Stream.Position = 0
Stream.Type = 2
Stream.Position = Stream.Size
End If
Next

Stream.Position = 0
Stream.Type = 2
Stream.Position = Stream.Size
Stream.WriteText vbCrLf & DefaultBoundary & PropertyBoundary & DefaultBoundary

Stream.Position = 0
Stream.Type = 1

VarBody = Stream.Read
Else
For Each Field In Fields
VarBody = VarBody & Escape(Field(0)) & «=» & Escape(Field(1)) & «&»
Next
For Each File In Files
VarBody = VarBody & Escape(File(0)) & «=» & Escape(File(1)) & «&»
Next
if Len(VarBody) > 0 Then VarBody = Left(VarBody, Len(VarBody) — 1)
End If
End Property

Private Function LoadFile(Path, Data)
On Error Resume Next
Dim Stream
Set Stream = CreateObject(«ADODB.Stream»)
Stream.Type = 1
Stream.Mode = 3
Stream.Open
Stream.LoadFromFile Path
If Err.Number <> 0 Then Exit Function
Data = Stream.Read
LoadFile = True
End Function

Private Function GenerateBoundary()
Dim Char
Dim N
For N = 1 To 12
Randomize
Char = Chr(CLng(Rnd * 25) + 97)
If N Mod 2 Then Char = UCase(Char)
GenerateBoundary = GenerateBoundary & Char
Next
End Function
End Class

Создание и обработка форм в PHP

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

Создание формы

Форма состоит из тега

Илон Маск рекомендует:  Что такое код matherr

Заметьте, каждый элемент формы имеет атрибут name . Кнопка имеет тип submit — это означает, что нажатие на кнопку приведёт к отправке формы.

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


При нажатии на кнопку форма отправляется на сервер. Значит, теперь мы можем получить эти данные с помощью PHP. А находятся они в суперглобальном массиве $_GET, причём значение атрибута name — это ключ массива.

Итак, добавим к нашей форме простенький PHP-обработчик:

Попробуйте написать какой-нибудь текст и отправить форму. Текст из формы вывелся на экран! Круто, да? Теперь мы можем принимать информацию от пользователя, обрабатывать её и возвращать результат на экран.

Методы GET и POST

Когда вы заходите на любой сайт, вы делаете это методом GET. Вернее, ваш браузер сообщает серверу, что заход осуществляется методом GET. Когда вы переходите по страницам сайта — каждая страница запрашивается методом GET.

Однако у этого метода есть один недостаток — $_GET параметры видны в адресной строке. Наверное вы заметили, что при отправке формы URL сайта меняется на что-нибудь вроде site.ru/?firstname=111&form1=Отправить+форму .

Если внимательно приглядеться к URL, вы увидите, что GET параметры передаются прямо в адресной строке в виде ключ1=значение1 & ключ2=значение2 & ключ3=значение3.

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

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

Для изменения метода нужно добавить форме атрибут method со значением post . Разумеется, данные теперь попадут в массив $_POST, а не в $_GET:

Принцип выбора метода формы простой. Если предполагается, что пользователь будет вводить какие-то общедоступные неприватные данные (напишет в поиске Купить BMW ) — можно использовать GET. Если же пользователь должен ввести свои личные данные (имя, почта, пароль и т.п.) — используем метод POST.

Изменение обработчика формы

При желании вы можете отправлять форму не на текущий URL, а на какой-нибудь другой. Для этого достаточно указать путь к скрипту в атрибуте action :

Форма отправки данных в PHP (POST, GET)

Чтобы организовать передачу данных на сервер с помощью формы, потребуется реализовать HTML форму, в которую посетители сайта будут вводить свою информацию и PHP код, назначение которого в принятии и обработке полученных данных на сервере.

HTML форма отправки данных

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

* Для HTML5 так же существует возможность размещать теги полей формы не внутри тегов формы, а в любом месте на странице. При этом для каждого такого поля нужно указывать атрибут «form», чтобы определить с какой формой отправки он должен взаимодействовать.

Итак, простейшая форма отправки может содержать следующий код:

Элементы формы и их параметры:

action=»myform.php» – атрибут «action» определяет, какой php-файл будет обрабатывать отправляемые данные. В этом примере, данные будут отправлены в файл «myform.php», находящийся в той же директории что и страница с формой. Если этот атрибут не указать явно, данные формы будут отправлены по адресу страницы самой формы.

method=»post» – параметр method определяет метод передачи данных POST или GET. Более подробно об этом в статье «Отличия методов POST или GET». Если не указывать атрибут явно, по умолчанию будет использоваться метод GET.

Текст «Значение А:» и «Значение Б:» добавлен только с целью оформления и понятности формы для пользователя. Добавлять это для передачи данных не обязательно, но для того, чтобы пользователю стало понятно, что вводить, стоит указывать.

Теги используются для формирования различных управляющих элементов формы.

type=»text» – атрибут «type» определяет вид поля. В зависимости от того, какой тип указан, меняется и внешний вид элемента, и его назначение. Значение атрибута «text» указывает, что в браузере элемент будет отображаться однострочным текстовым полем, куда пользователь сможет ввести свою строку.

name=»data1″ – атрибут «name», указывает имя, вернее индекс данных в массиве, полученных сервером. Это обязательный параметр, по которому в php-обработчике можно будет затем получить доступ переданному значению. Имя может быть выбрано произвольно, однако, удобнее когда это значение имеет какой-то понятный смысл.

type=»submit» – тег с таким значением параметра «type» будет отображаться на странице как кнопка. На самом деле на форме можно обойтись и без кнопки. Если, например, в форме есть текстовые поля, то отправку можно осуществить, просто нажав «Ввод» на клавиатуре. Но наличие кнопки делает форму более понятной.

value=»Отправить» – в данном случае (для type=»submit») определяет только надпись на кнопке. Для type=»text», например, это будет текст, который будет выведен в текстовом поле.

В итоге, на странице этот код будет выглядеть приблизительно так:

По нажатию на кнопку, будет выполнена отправка данных на указанную страницу, и если она существует и корректно работает, данные будут обработаны.

Обработка отправленных HTML формой данных в PHP

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

$_POST, $_GET и $_REQUEST – это ассоциативные массивы, поля-индексы которых совпадают с атрибутами «name» тегов . Соответственно, для работы с данными в файле myform.php можно присвоить переменным значения элементов такого массива указав в качестве индекса имя поля:

// для метода GET
$a = $_GET[ ‘data1’ ];
$b = $_GET[ ‘data2’ ];

// для метода POST
$a = $_POST[ ‘data1’ ];
$b = $_POST[ ‘data2’ ];

// при любом методе
$a = $_REQUEST[ ‘data1’ ];
$b = $_REQUEST[ ‘data2’ ];

Проверка заполнения полей формы

Иногда при получении данных нужно проверить, не отправил ли пользователь пустую форму. Для этого можно использовать функцию empty.

if ( empty ($_REQUEST[ ‘data1’ ])) <
echo ‘Поле не заполнено’ ;
> else <
echo ‘Поле было заполнено’ ;
$a = $_REQUEST[ ‘data1’ ];
>

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

if ( isset ($_REQUEST[ ‘data1’ ])) <
echo ‘Поле было заполнено’ ;
$a = $_REQUEST[ ‘data1’ ];
> else <
echo ‘Поле не заполнено’ ;
>

Отправка get форм из программы на vb

Принцип отправки данных может отличаться в различных ситуациях. Рассмотрим эти ситуации.

Отправка GET-запроса

GET-запрос характеризуется тем, что данные могут отправляться в строке запроса:

Для отправки берем свойства объекта user и формируем из их значений сроку с параметрами: «name=» + user.name + «&age=»+user.age . Затем эта строка добавляется к строке запроса в методе open(«GET», «http://localhost:8080/postdata.php?»+body)

Предполагается, что данные отправляются скрипту на языке php postdata.php, который может иметь, например, следующее содержание:

Конкретная технология стороны сервера тут не важна. И в качестве тестирования можно взять любую другую технологию. Например, ASP.NET MVC. Метод контроллера в ASP.NET MVC, который принимает данные, мог бы выглядеть следующим образом:

Кодирование параметров

Все отправляемые в GET-запросе параметры разделяются знаком амперсанда(&). Но что, если какой-нибудь параметр имеет знак амперсанда. Например,

В этом случае при получении параметров скрипт на стороне сервера может неправильно обработать данные и неправильно извлечь параметры. Поэтому, чтобы кодировать все передаваемые данные, нужно применять функцию encodeURIComponent() :

При этом строка «Tom&Tim» будет кодирована в следующую строку: «Tom%26Tim».

При необходимости мы можем выполнить обратное декодирование с помощью функции decodeURIComponent() :

POST-запросы

Отправка данных в POST-запросах будет немного отличаться:

Для отправки данных методом POST надо установить заголовок Content-Type с помощью метода setRequestHeader() . В данном случае заголовок имеет значение application/x-www-form-urlencoded .

Отправка форм. FormData

Начиная со спецификации XMLHttpRequest2 в JavaScript появился новый объект — FormData , который позволяет сериализовать данные формы для ее последующей отправки. При этом нам даже необязательно создавать форму в коде html, мы можем создать ее динамически в JavaScript:

Для добавления данных у объекта FormData используется метод append(‘имя_параметра’, значение) . При этом никакие заголовки указывать не надо.

Также мы можем определить форму в html и использовать ее для отправки:


Для сериализации всех полей формы нам достаточно передать объект формы в конструктор FormData: var formData = new FormData(form);

Учимся работать с GET и POST запросами

Здравствуйте дорогой читатель Блога RS! Сегодня мы с Вами будем разбирать get и post запросы. Так же поговорим о формах в html.

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

Илон Маск рекомендует:  Что такое код sem_remove

GET запрос

Вы могли заметить, что на большинство сайтов можно лицезреть вот такие адреса:

Тут, даже не зная php, можно догадаться, что мы обращаемся к файлу index.php Но то, что идет после знака вопроса, мало кто знает. Все довольно просто: ?blog=2 это объявление глобальной переменной «$_GET[‘blog’]» с значением «2». Таким образом я в скрипт передаю переменную которая отвечает за вывод информации из базы данных. Давайте напишем небольшой скрипт в котором Вы все наглядно увидите:

Мы используем оператор условий if() в качестве условия стоит вот такая строчка:

isset() позволяет узнать существует ли переменная которая указана в скобках, то есть условие которое я описал в коде звучит так: Если существует переменная $_GET[‘blog’] то вывести содержимое этой переменной на экран. Вот что получилось:

Думаю понятно Создается глобальная переменная $_GET с идентификатором который мы объявили в адресной строке (в данном случае с идентификатором «blog»)

Теперь хочу пояснить один момент. Предположим нам необходимо объявить две переменные, как это сделать? Первая переменная объявляется после знака вопроса «?» Вторая же переменная объявляется после такого знака «&» (Если честно не знаю что это за знак ), вот пример объявление трех переменных:

Условие звучит так:

Если существует глобальная переменная $_GET[‘a’] и глобальная переменная $_GET[‘b’] и глобальная переменная $_GET[‘с’] то вывести их на экран, вот результат:

Формы

Прежде чем мы перейдем к post запросам, необходимо разобрать, что такое формы? Почему нужно? Потому что глобальная переменная $_POST[»] создается именно через формы. Что такое форма? Это поля для ввода какой-нить информации пользователем. Поля бывают в одну строчку, большие поля, так же бывают радио кнопочки, чек боксы. Разберем все по порядку.

У формы есть атрибуты, перечислю самые распространенные:

  • name=»имя» — Этим атрибутом прописывается имя формы, на мой взгляд не обязательный атрибут, но все же всегда заполняю
  • action=»Ссылка на файл» — Этим атрибутом определяется файл обработчик, а именно файл куда Вы посылаете данные
  • method=»post» — Собственно атрибут который говорит форме, что необходимо отправлять post запросы. Так же Вы через формы можете отправлять и get запросы, выставив свойство get а не post.

Давайте создадим форму:

В качестве файла обработчика я поставил файл test.php так как именно в нем пишу для Вас примеры. Метод отправки я поставил post так как именно этим методам пользуются в 99.9% случаях. Так же я присвоил нашей форме имя — form

Теперь окунемся в мир элементов формы. Первым делом Вы должны понять, что почти все элементы являются тегом отличие лишь в атрибуте type у этих тегов. Давайте я перечислю используемые элементы форм:

Я уверен, что вы не раз встречали такие поля, так что тут как говорится: «no comments»

Теперь давайте составим небольшую тренировочную анкету, с которой будем работать далее. Наша задача составить небольшую анкетку которая поведает нам имя заполнявшего, пол, из какой он страны, любимый цвет и поле текста где пользователь может добавить что-нить о себе. Вот что у меня получилось:

  • Для поля ФИО я использовал одностроковое поле ввода. Атрибут name обязателен для заполнения, почему? Объясню ниже
  • Для Выбора пола я использовал радио кнопки, заметьте что атрибут name у них один и тот же. Это сделано для того что бы выбрать можно было лишь один пункт.
  • Страна проживания выводится списком, у списка есть атрибут name у пунктов же ( ) этого атрибута быть не должно.
  • Любимые цвета выбираются чек боксами. Каждый чек бокс имеет свой атрибут name. Сделано для того чтобы выбрать можно было несколько пунктов.
  • О себе принимает вид большого поля. Заметьте, что я использую атрибуты rows и cols. cols определяет сколько видимых символов может влезть по горизонтали, а rows определяет сколько пользователь увидит строк. С помощью этих атрибутов мы определяем ширину и высоту области.
  • Для кнопки, атрибут name не обязателен, но не для этого примера, в этом примере этот атрибут понадобится. Если в теге кнопки написать атрибут value=»» и в ведя в этот атрибут, например слово «отправить анкету» (value=»отправить анкету») то надпись на кнопке примет значение атрибута value.

Обратите внимание, что почти у каждого тега есть атрибут value, для чего он? В него записываются данные которые Вы собираетесь перенести на другую страницу. Надеюсь понятно

Теперь если запустить этот код в браузере, то мы увидим следующее:

У формы я использовал атрибут action со значением test.php это означает, как я уже говорил, что данные из формы передадутся в файл test.php.

POST запрос

Теперь напишем php код который позволит нам увидеть введенную нами информацию. Где хранятся данные? В случае с get запросом, наши данные лежали в глобальной переменной $_GET[»]. При post запросе, данные будут лежать в глобальной переменной $_POST[»]. В квадратных скобках, необходимо прописывать, как и в случае с глобальной переменной get, идентификатор. Вопрос, где этот идентификатор взять? Вот для чего нам необходим атрибут name у элементов форм! Именно эти имена и служат нам ключом в глобальном массиве post. Ну что ж, приступим к описанию скрипта:

Написанное нами условие if гласит: Если существует глобальная переменная $_POST[‘submit’] то выводим данные на экран. Эта глобальная переменная создается в случае если мы нажали на кнопку отправки, вот для чего в данном примере необходим атрибут name в кнопке. Вы вполне можете задаться вопросом, почему же у кнопки атрибут name не обязательный? Все довольно просто. Обычно программист не отслеживает нажатие кнопки, а отслеживает посланные данные. Для корректной работы, например формы контактов, необходимо отследить не нажатие кнопки, а правильность ввода информации, и узнать вводили ли эту информацию вообще. В нашем же примере мы не проверяли посланные данные, а просто отследили нажатие кнопки, для упрощение примера. Вот что у нас получилось:

Заключение

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

Использование методов GET и POST

Применение методов GET и POST в PHP трудно переоценить, поскольку эти методы встречаются практически на каждом сайте. Прежде чем изучать ниже описанный материал, советую ознакомится с html тегом . Рассмотрим каждый из этих методов в подробности.

Метод GET

Метод GET использует для передачи данных строку URL. Возможно, Вы обращали внимание на длинные и непонятные URLы. Например: function.php?login=Alex&email=dezyakin . В данном случае данные обрабатываются в function.php. После знака вопроса » ? » идет перечисление передаваемых параметров (параметр разделяются знаком «&») со значениями: параметру login присвоено значение Alex, а переменной email значение dezyakin. Данные будут хранится в суперглобальном массиве $_GET . Приведем пример использования метода GET представлен ниже:

Результат выполнения выше описанного кода представлен на рисунке ниже:

Обратите внимание на то, как мы считываем значения из суперглобального массива $_GET: $_GET[‘имя_переменной’] . В нашем примере имена переменных были объявлены в форме (name=login и name=email).

Совет:
Прежде чем обрабатывать полученные значения советую проверять их на существование через функции isset(имя_переменной) или empty(имя_переменной) — эти функции были рассмотрены в предыдущем уроке 2: переменные в PHP. Например:

В форме можно указать имя файла, который будет обрабатывать передаваемые значения. Делается это с помощью атрибута формы action , которому можно присвоить адрес этого файла. По умолчанию этот файл присвоен текущему файлу (т.е. обрабатывается в файле, где и расположена форма). Приведем пример, в котором данные из формы передаются на обработку в файл srcipt.php :

В файле script.php должен содержатся какой-то обработчик информации, иначе информация будет передана в пустую.

Метод GET обладает множеством недостатков:

  • Пользователь видит значения передаваемых параметров;
  • Пользователь может легко подделать передаваемые параметры;
  • Неудобная передача бинарной информации (приходится кодировать в текстовый формат);
  • Объем передаваемых данных ограничен — 8 Кбайт;

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

Метод POST

Метод POST отличается от GET тем, что данные передаются в закрытой форме. Существует суперглобальный массив $_POST , из которого можно считывать данные следующим образом: $_POST[‘имя_переменной’] . Например:

Илон Маск рекомендует:  border-bottom-color в CSS

Результат выполнения выше описанного кода представлен на рисунке ниже:

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

Примечание:
1) Объем передаваемых значений методом POST по умолчанию ограничен и равен 8 Мбайт. Чтобы увеличить это значение нужно изменить директиву post_max_size в php.ini.

2) В ранних версиях PHP вместо коротких названий суперглобальных массивов $_GET и $_POST использовались более длинные имена: $HTTP_GET_VARS и $HTTP_POST_VARS . По умолчанию они выключены в php 5, но Вы можете их включить в конфигурационном файле php.ini с помощью параметра register_long_arrays . В php 6 версии эти длинные названия будут недоступны.

3) Перед обработкой переменных из $_POST , советую проверять переменные на их наличие, также как это делалось с методом GET .

Следующий четвертый урок будет посвящен: типам данных в php.


Работа с сервлетами для чайников. GET / POST

В прошлой статье Создание сервлетов для чайников. Пошаговое руководство я описал, как создать сервлеты и попытался объяснить, как это работает. В этой статье мы научим наши сервлеты работать с UI через HTTP-запросы GET и POST.

На самом деле, этих запросов намного больше, но для чистоты эксперимента мы разберём только два основных.

    GET — обрабатывает адресную строку, которая получается при вызове сервлета. Например, site.com/example?action=test& > В Java-сервлете запросы POST и GET обрабатывают соответствующие методы doPost(); и doGet().

    Для чистоты объяснения принципов обработки запросов мы создадим:

  • простой объект класса Bot, который будет иметь имя, серийник и id
  • страницу, на которую мы будем выводить данные объекта
  • страницу, на которой мы будем менять данные объекта
  • сервлет, который будет обрабатывать соответствующие запросы

Создаём синглтон-класс Bot с тремя полями, а также, геттерами, сеттерами и перегруженным toString():

Пометим сервлет в xml-документе web.xml:

Пишем вот такую страницу bot.jsp (пока просто копируем, потом разберём):

Эта страница выводит нам данные бота.

обрабатывает аргумент «bot», при чём мы даём понять, что это объект класса Bot. $ и прочие подобные — это переменные, которые мы берём из полученного в аргументе объекта (это будет в сервлете).

Отметим, что ссылка Update переводит на адрес bot?action=update содержит данные для GET-запроса.

Также, у нас будет страница, которая отправляет изменённые данные бота (update.jsp):

Мы также получаем данные бота и вставляем их в поля, меняем их и отправляем изменённые данные в POST-запросе. Отметим, что POST-запрос инициируется через отправку формы

Простейшая форма отправки данных на почту при помощи HTML и PHP

Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.

Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.

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

Создаем форму отправки данных в html

На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.

Первая строка будет следующей

Теперь соберем все вместе.

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

Создаем файл, принимающий данные из HTML формы

Это будет файл с именем send.php

В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:

$fio = $_POST[‘fio’];
$email = $_POST[’email’];

Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method=»post». Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров — функций php.

Первая функция преобразует все символы, которые пользователь попытается добавить в форму:

$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);

При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ » $fio = urldecode($fio);
$email = urldecode($email);

Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:

$fio = trim($fio);
$email = trim($email);

Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.

Проверка данных, передаваемых от HTML формы в файл PHP

Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:

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

Отправляем полученные данные из формы HTML на почту при помощи PHP

Для отправки данных на почту нужно воспользоваться функцией mail в PHP.

mail(«на какой адрес отправить», «тема письма», «Сообщение (тело письма)»,»From: с какого email отправляется письмо \r\n»);

Например, нужно отправить данные на email владельца сайта или менеджера example@mail.ru.

Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.

mail(«example@mail.ru», «Заявка с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»);

Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.

if (mail(«example@mail.ru», «Заказ с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: example2@mail.ru \r\n»))
<
echo «сообщение успешно отправлено»;
> else <
echo «при отправке сообщения возникли ошибки»;
>

Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:

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

Помещаем HTML и PHP код отправки формы в один файл

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

Создание и обработка форм в PHP

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

Создание формы

Форма состоит из тега

Заметьте, каждый элемент формы имеет атрибут name . Кнопка имеет тип submit — это означает, что нажатие на кнопку приведёт к отправке формы.

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

При нажатии на кнопку форма отправляется на сервер. Значит, теперь мы можем получить эти данные с помощью PHP. А находятся они в суперглобальном массиве $_GET, причём значение атрибута name — это ключ массива.

Итак, добавим к нашей форме простенький PHP-обработчик:

Попробуйте написать какой-нибудь текст и отправить форму. Текст из формы вывелся на экран! Круто, да? Теперь мы можем принимать информацию от пользователя, обрабатывать её и возвращать результат на экран.

Методы GET и POST

Когда вы заходите на любой сайт, вы делаете это методом GET. Вернее, ваш браузер сообщает серверу, что заход осуществляется методом GET. Когда вы переходите по страницам сайта — каждая страница запрашивается методом GET.

Однако у этого метода есть один недостаток — $_GET параметры видны в адресной строке. Наверное вы заметили, что при отправке формы URL сайта меняется на что-нибудь вроде site.ru/?firstname=111&form1=Отправить+форму .

Если внимательно приглядеться к URL, вы увидите, что GET параметры передаются прямо в адресной строке в виде ключ1=значение1 & ключ2=значение2 & ключ3=значение3.

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

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

Для изменения метода нужно добавить форме атрибут method со значением post . Разумеется, данные теперь попадут в массив $_POST, а не в $_GET:

Принцип выбора метода формы простой. Если предполагается, что пользователь будет вводить какие-то общедоступные неприватные данные (напишет в поиске Купить BMW ) — можно использовать GET. Если же пользователь должен ввести свои личные данные (имя, почта, пароль и т.п.) — используем метод POST.

Изменение обработчика формы

При желании вы можете отправлять форму не на текущий URL, а на какой-нибудь другой. Для этого достаточно указать путь к скрипту в атрибуте action :

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL