Как РНР управлява 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=Напред+>>
![]() |
---|
Обработване на форма по метода GET |
Браузърът взема входните данни, кодира ги и ги добавя към URL адреса. РНР декодира стринга, премахва знаците +, & и други кодиращи знаци (ако има такива), създава глобалните променливи $_GET[“firstname”], $_GET[“lastname”] и $_GET[“submit”] и им назначава стойности на базата на въведеното от потребителя.
GET методът се прилага при търсене на информация или управление на статични страници.
GET метода изпраща въведеното във формата към URL адреса:
![]() |
---|
Обработване на форма по метода GET |
Обработка на данните по метода POST
Ако методът, който ще служи за изпращане на данните към сървъра е POST, браузърът изпраща кодирано съобщение към HTTP хедъра и данните, въведени от потребителя не се появява в URL адреса.
Ще работим отново с файловете 1form.html и 1HandleForm.php, но е необходимо да се промени метода за обработка на данните от GET на POST (във файла 1form.html) и глобалните променливи във файла 1HandleForm.php.
![]() |
---|
Обработване на форма по метода POST |
След като потребителят въведе името и фамилията си в текстовите полета и кликне върху бутона “Напред >>”, браузърът взема данните и ги изпраща към сървъра. Сървърът ги задържа, докато РНР скрипта достигне до атрибута 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 |
Информация за това какво означава всяка една приложена опция, можете да откриете в документацията на инструмента curl. Това става, като в командния ред въведете:
man curl
или
curl –help
Друг начин, по който можем да получим данните, въведени от потребителя е да приложим РНР функцията extract(), която получава входните данни, съхранени в глобалната променлива $_REQUEST (съдържа масив от входните данни, получени чрез методите GET и POST ).
Флагът EXTR_SKIP се поставя, за да може, ако има вече дефинирани променливи със същите имена, те да не бъдат заместени. В този случай променливите $firstname, $lastname и $submit, се създават от функцията extract().
В този случай съдържанието на файла 1form.html e същото, а съдържанието на файла 1HandleForm.php ще бъде:
man curl
или
curl –help
![]() |
---|
Обработка на данните по метода 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>
|
Няма коментари:
Публикуване на коментар