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

Преди да разгледаме въпроса с предаване на формата към сървъра, нека изясним начина, по който контактуват помежду си клиентската машина и сървърът. В много случаи предназначението на HTML формите е да се изпратят данни към сървъра. Сървърът преработва данните и ги изпраща като отговор до потребителя.

Клиент-сървър архитектура


Обикновено клиентът изпраща молба за услуга, а сървърът доставя тази услуга. Услугата може да е доставяне на някакъв ресурс, като например данни, файл, обект, време и др. Идеалната платформа клиент-сървър е независима от хардуера и операционната система.

Как взаимодействат в интернет клиентът и сървърът? Ето една примерна схема:

client_server.png
Повече информация за URI, URL и URN, може да получите на адрес: http://www.faqs.org/rfcs/rfc3986.html

Ето и нещо забавно:
html-page.jpg
php-page.jpg

Методите Get и Post


Когато се избира методът, с който ще работи формата, трябва да се има предвид следното:
  • Методът GET ограничава обема на предадената информация (около 2000 знака).

  • Информацията, изпратена от формата с метода GET е видима за всички (всички имена на променливи и стойности се показват в адресната лента на браузъра, което може да се окаже неблагоприятно за сигурността (всеки човек може да види въведената във формата парола, например).

  • Можете да прилагате метода GET, когато някой ще получава данни от ваше приложение, но ще прилагате метода POST, когато някой вмъква, ъпдейтва или изтрива данни от ваше приложение.

Добавяне на метод във формата

  1. Отворете файла form.html в текстовия редактор.
  2. Въведете ред 9 от скрипта по-долу:
    <!Doctype html>
    <html>
    <head>
    <title>HTML Форма</title>
    <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    </head>
    <body>
    
    <form  action="HandleForm.php" method="post" target="_blank">
    
    Име: <br/><input type=text name="firstname" /> <br/><br/>
    
    Фамилия: <br/><input type=text name="lastname" /> <br/><br/>
    
    Имейл адрес: <br/><input type=text name="email"/><br/><br/>
    
    Коментар: <br> <textarea name ="comments" ></textarea><br/><br/>
    
    <input type=submit name="submit"  
    formenctype="multipart/form-data" value="Напред!"/>
    
    </form>
    
    </body>
    </html>
    
    
  3. Съхранете файла.

Получаване на данни от HTML форма

Създадохме HTML форма. Необходимо е да напишем скрипт за файла, който ще получава и обработва данните, въведени от потребителите в екранната форма на form.html.

  1. Отворете текстовия редактор и създайте нов документ.
  2. Дайте наименование на файла HandleForm.php
  3. Съхранете го в папката, в която сте съхранили form.html.

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

  • В РНР скрипта, глобалната променлива $_POST е асоциативен масив, който държи всички двойки ключ-стойност на POST метода от HTML формата (в случая това са: name=”firstname”, name=”lastname”, name=”email”, name=”comments”). Функцията isset ($_POST["submit"]) връща TRUE, ако във формата се съдържа бутон “submit” и когато формата е приета (т.е. върху бутона е кликнато).

  • В командата echo операторът точка (.) обединява два стринга.
    Функцията htmlspecialchars () (вместо нея може да приложите функцията htmlentities()) конвертира всички специални знаци: http://www.ascii.cl/htmlcodes.htm Това конвертиране е необходимо, за да се предотвратят т.нар. Кръстосани атаки (Cross-site Scripting attack (XSS)).
    Именно за предотвратяване възможността за XSS атака е необходимо валидиране, нормализиране и филтриране на всички входящи данни (този въпрос няма да го разглеждам, поне не сега).

  • За да разгледате кода на върнатата от сървъра HTML страница, кликнете с десен клавиш на мишката в прозореца на браузъра и от контекстното меню да изберете View Page Source.

view_source.JPG

Въвеждане на данни


Ще създадем РНР файл, който извежда приветствие на екрана.
  1. Отворете текстовия редактор.
  2. Създайте нов документ hello.php.
  3. Въведете:
    <!DOCTYPE html>
    <html>
    <head>
    <title>Използване на променливи</title>
    <meta http-equiv="Content-Type" content="text/html"; 
    charset="UTF-8">
    </head>
    <body>
    <?php
    
    $FirstName="Edelw";
    
    print ("<h2><center><b>Hello, $FirstName!</b></center></h2><br>");
    
    /* Страницата може да съдържа допълнителен код 
    след оператора print.*/
    
    ?>
    </body>
    </html>
    
  4. Съхранете файла.
  5. Качете го на сървъра.
  6. Отворете го в браузъра.

hello_1.JPG

Създадохме динамична страница, която печата стойността на променливата $FirstName. Ако се промени стойността на променливата, резултатът ще бъде различен.


but.png sign.png

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

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