HTML форми и РНР (Част 3)

Как РНР управлява HTML формите?


Обработка на данните по метода GET


За всеки параметър на HTML формата, РНР създава глобална променлива със същото име. Ще създадем HTML форма, в която потребителя ще въвежда име и фамилия. Данните, въведени от потребителя, ще се изпращат към .php файл, който ще извежда съобщение.
Съдържание на файла 1form.html:

<!Doctype html>
<html>
<head>
<title>HTML Форма</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>

<form  action="1HandleForm.php" method="GET" 
target="_blank" >

Име: <br/><input type=text name="firstname" 
/> <br/><br/>

Фамилия: <br/><input type=text name="lastname" 
/> <br/><br/>

<input type=submit name="submit"  
formenctype="multipart/form-data" value="Напред >>"/>

</form>

</body>
</html>
Ето и съдържанието на файла 1HandleForm.php, който обработва данните, получени от формата:

<!DOCTYPE html>
<html>
<head>
<title>Резултати от формата</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>
<?php
session_start();//стартира се сесия 
/*Тази страница получава и обработва данните от „form.html” */
if (isset($_GET['submit'])) {
    $firstname = $_GET['firstname'];
    $lastname = $_GET['lastname'];
   //Съхранява стойността на променливата $firstname
    $_SESSION['firstname']= $_GET['firstname']; 
   //Следващите четири реда служат за премахване 
   //на евентуални интервали в променливите
   //$firstname, $lastname, $email и $comments   
    trim ($firstname);
    trim ($lastname);
   echo ('Здравейте, ' . htmlspecialchars($firstname) . 
'!' . "<br />\n");
   echo ('Вашата фамилия е: ' . htmlspecialchars($lastname) 
. "<br />\n");
  
}

//Пише сесийните данни и завършва сесията
session_write_close (); 
?>
</body>
</html>
  • Имаме текстово поле (1form.html) с име firstname, РНР създава променливата $firstname.
    Имаме текстово поле с име lastname, РНР създава променливата $lastname.

  • Стойностите, които се назначават към създадените от РНР променливи, са същите като стойностите, които потребителят е вписал в съответните текстови полета, когато попълва формата.

  • След като потребителя запълни формата и натисне бутона “Напред >>”, стойностите, въведени в текстовите полета ще бъдат изпратени към PHP скрипта, който ще обработва данните от формата (в нашия пример, към файла 1HandleForm.php). Браузърът знае къде да изпрати данните, благодарение на атрибута action от тага <form>, но той трябва да знае как да изпрати данните към сървъра. Как става това или методът, по кайто данните се изпращат за обработване към сървъра, се определя от атрибута metod, който също принадлежи на тага <form>.

  • Популярните методи за изпращане на данни към сървъра са GET и POST. Подразбиращият се метод е GET, т.е. ако в тага <form> не е посочен метод, ще се приложи методът GET. GET методът казва на браузъра да изпрати URL-кодиран стринг към сървъра.

В адресната лента на браузъра, след кликване върху бутона “Напред >>”, ще видим:

http://localhost/phpbegin/1HandleForm.php?firstname=edelw&lastname=edelw&submit=Напред+>>

1HandleForm_php
Обработване на форма по метода GET

Браузърът взема входните данни, кодира ги и ги добавя към URL адреса. РНР декодира стринга, премахва знаците +, & и други кодиращи знаци (ако има такива), създава глобалните променливи $_GET[“firstname”], $_GET[“lastname”] и $_GET[“submit”] и им назначава стойности на базата на въведеното от потребителя.

GET методът се прилага при търсене на информация или управление на статични страници.

GET метода изпраща въведеното във формата към URL адреса:

GET_tabl.png
Обработване на форма по метода GET

Обработка на данните по метода POST


Ако методът, който ще служи за изпращане на данните към сървъра е POST, браузърът изпраща кодирано съобщение към HTTP хедъра и данните, въведени от потребителя не се появява в URL адреса.
Ще работим отново с файловете 1form.html и 1HandleForm.php, но е необходимо да се промени метода за обработка на данните от GET на POST (във файла 1form.html) и глобалните променливи във файла 1HandleForm.php.

1HandleForm_post.png
Обработване на форма по метода POST

Началото на HTML формата се поставя с тага <form>. Файлът, който ще обработва данните, въведини във формата е назначен като стойност на атрибута action (в случая това е файлът 1HandleForm.php). Методът, чрез който данните ще бъдат предадени за обработка, се определя от стойността на атрибута metod (в случая е POST). Входните данни се изпращат към HTTP хедъра.
След като потребителят въведе името и фамилията си в текстовите полета и кликне върху бутона “Напред >>”, браузърът взема данните и ги изпраща към сървъра. Сървърът ги задържа, докато РНР скрипта достигне до атрибута action. РНР взема входните данни, кодира ги и създава променливите $_POST[“firstnsme”] (името на първото текстово поле) и $_POST[“lastname”](името на второто текстово поле), назначава им стойностите, въведени от потребителя и променливата $_POST[“submit”].

За да онагледим, ще приложим командата curl (инструмент за пренасяне на данни от и към сървъра) в командния ред на Ubuntu:
curl -v -s -X POST http://localhost/phpbegin/1HandleForm.php --data "firstname=edelw&lastname=edelw&submit=Напред+>>" -D- /dev/null -s

curl_POST.jpg
Изход от curl по метода POST

Информация за това какво означава всяка една приложена опция, можете да откриете в документацията на инструмента curl. Това става, като в командния ред въведете:

man curl

или

curl –help

POST_tabl.png
Обработка на данните по метода POST

Получаване на данни от HTML форма чрез функцията extract()


Друг начин, по който можем да получим данните, въведени от потребителя е да приложим РНР функцията extract(), която получава входните данни, съхранени в глобалната променлива $_REQUEST (съдържа масив от входните данни, получени чрез методите GET и POST ).
Флагът EXTR_SKIP се поставя, за да може, ако има вече дефинирани променливи със същите имена, те да не бъдат заместени. В този случай променливите $firstname, $lastname и $submit, се създават от функцията extract().
В този случай съдържанието на файла 1form.html e същото, а съдържанието на файла 1HandleForm.php ще бъде:

<!DOCTYPE html>
<html>
<head>
<title>Резултати от формата</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>
<?php

session_start();//стартира се сесия 
/*Тази страница получава и обработва данните от „form.html” */

extract($_REQUEST, EXTR_SKIP);  //Получава входните данни

   echo ('Здравейте, ' . htmlspecialchars($firstname) . '!' . "<br />\n");
   echo ('Вашата фамилия е: ' . htmlspecialchars($lastname) . "<br />\n");

session_write_close (); //Пише сесийните данни и завършва сесията
?>
</body>
</html>

sign.png

Няма коментари:

Публикуване на коментар