Обработване на HTML форми

Скрити полета


Ако уеб страницата съдържа няколко форми, можете да поставите скрити полета, които ще ви помогнат да идентифицирате коя форма е необходимо да бъде обработена, като й зададете име. Чрез скритите полета можете да контролирате коя форма кога да се покаже и кога да се обработи. В скритите полета можете да включите информация, която не искате да се показва на потребителя, например вашето име, датата на която е създадена формата, може да ги ползвате за предаване на временни или сесийни данни от една форма към друга или пък да съхраните информация, която вече е била вписана от потребителя.

Скритите полета не са видими във формата, но са видими в сорс кода на страницата, поради което в тях не бива да се вписва важна информация.
<!-- hidden_fields.php-->
<!DOCTYPE html>
<html>
<head>
<title>Скрити полета</title>
</head>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
<body bgcolor="#ff66ff">
<font face="verdana">
<div align="center">
<b>
<?php
if (isset($_POST['back1']) && ($_POST['back1'] == 'process_form')){
process_form();
}
else{
display_form();
}
function display_form(){
echo <<<EOF

<form action="$_SERVER[PHP_SELF]" method="post">
Оценете страницата
<br><br>
<input type="radio" name="rating" value="отлично създадена"/>Отлична
<input type="radio" name="rating" value="много добре създадена" />Мн.добра
<input type="radio" name="rating" value="много досадна" />Досадна
<input type="radio" name="rating" value="безнадеждно скучна"/>Скучна
<input type="radio" name="rating" value="... я стига глупости"/>Я не ме занимавай с глупости

<input type="hidden" name="back1" value="process_form">
<input type="hidden" name="creation_date" value="December`3000" />
<br><br>
<input type="submit" value="Гласувай" />
<input type="reset" value="Изчисти" />
</form>
EOF;
 }
function process_form(){
 if(isset($_POST["rating"])){
 echo "Тази страница е" . " " . $_POST["rating"] . "!";
}
}
?>
</b>
</div>
</body>
</html>

hidden_fields_1.png

hidden_fields_3.png

hidden_fields_2.png

HTML форми и масиви


HTML формите, които позволяват на потребителя да направи повече от един избор, се създават с помощта на тага <select> (като му се постави атрибута "multiple") и <input types = “checkbox”>. Вместо РНР да генерира една променлива за множеството избори, е по-добре за тази цел да се използва масив. За да създадете масив, добавяте квадратни скоби към имената на таговете <select> и <input>.
Например:

<select name="books[]">
<input type=checkbox name="science[]" value="Химия на емоциите и поведението">

Когато потребителят кликне върху бутона submit, РНР ще създаде масив, чийто елементи ще са изборите, които потребителят е направил.
<!--select2.html-->
<!DOCTYPE html>
<html>
<head>
<title>Множество избори</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>

<div style= "width: 305px; 
height: 490px; 
background-image: 
linear-gradient(to right, white 0%, #0059b3 100%), url('ex2.png'); 
background-position: top right; 
background-repeat:no-repeat; 
background-blend-mode: overlay; border:2px solid black; ">

<form action="select2_handle.php" method="POST" style="width: 300px; ">
<fieldset style="margin-left: 10px;">
<legend style="color: #001f4d;">Вашето желание</legend><br>

<label style="color:red;">Изберете континент:</label><br><br>
<span style="font-size:12px; text-decoration-line:underline; text-decoration-style:wavy;">
<i>За да направите няколко избора едновременно, 
кликнете върху клавиш Ctrl от клавиатурата, докато селектирате.</i></span><br><br>
<select name="location[]" multiple style="background-color: #e0e0d1;">
<option>Европа</option>
<option>Антарктида</option>
<option>Африка</option>
<option>Северна Америка</option>
</select><br><br>

<label style="color:red;">Изберете държава:</label><br><br>
<input type="checkbox" name="place[]" id="България" value="България" />
<label for="България">България</label><br> 
<input type="checkbox" name="place[]" id="Южен полюс" value="Южен полюс" />
<label for="Южен полюс">Южен полюс</label><br>
<input type="checkbox" name="place[]" id="Египет" value="Египет" Checked/>
<label for="Египет">Египет</label><br>
<input type="checkbox" name="place[]" id="САЩ" value="САЩ" />
<label for="САЩ">САЩ</label><br>
<input type="checkbox" name="place[]" id="Канада" value="Канада"/>
<label for="Канада">Канада</label><br><br>

<input type="submit" value="Избери" />
<input type="reset" value="Изчисти" />
</fieldset>
</form>
</div>


</body>
</html>
Съдържанието на файла, обработващ формата:
<!--select2_handle.php -->
<!DOCTYPE html>
<html>
<head>
<title>Форми и масиви</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body >
<br />
<fieldset style="width:300px;">
<legend><b>Избрахте континентите:</b></legend>

<?php
//Обработва данните от select2.html
if (is_array($_POST['location'])){
print "<table  style='width:200px; border: 1px solid black;'><tr style='border: 1px solid black;'>";
foreach ( $_POST['location'] as $value ){
print "<td style='border: 1px solid black;'>$value</td>";
}
print "</tr></table>";
}
?>
</fieldset>

<fieldset style="width:300px;">
<legend><b>Избрахте държавите:</b></legend>

<?php
extract($_POST);
if (is_array($place)){
print "<table  style='width:200px; border: 1px solid black;'><tr style='border: 1px solid black;'>";
foreach ( $place as $value ){
print "<td style='border: 1px solid black;'>$value</td>";
}
print "</tr></table>";
}
?>
</fieldset><br><br>

</body>
</html>
select2_form.png
Форма за множество избори

select2_handle.png
Обработена форма за множество избори

HTML форми, работещи с изображение като submit бутон


За да превърнем изображение в бутон submit, е необходимо да приложим вместо <input type= "submit">, <input type= "image" >, да включим src за местоположението на изображението и име за полето:
<input type="image" src="път_до_изображението" name="име_на_изображението"/> 
Когато потребителят кликне върху изображението, формата ще бъде изпратена към сървъра, заедно с координатите на пиксела от изображението, върху който потребителят е кликнал. В РНР скрипта, координатите са представени като две променливи image_name_x и image_name_y (image_name е името, назначено на атрибута name, на полето за въвеждане (input type)) . Ще създадем форма, която ще се изпрати за обработка към сървъра, чрез кликване върху изображение, вместо върху бутон “submit”.
<!--image_button.html -->
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>Бутон-изображение</title>
<meta charset="utf-8">
<style>
 .button{
 background-color: #4CAF50;
    border: none;
    color: white;
    padding: 8px 16px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 14px;
    margin: 2px 1px;
    -webkit-transition-duration: 0.4s; /* Safari */
    transition-duration: 0.4s;
    cursor: pointer;
}
.button {
    background-color: yellow; 
    color: black; 
    border: 1px solid #4CAF50;
}
.button:hover {
    background-color: #4CAF50;
    color: white;
}
.img {
 display: inline-block;
 border: 1px solid #009900;
 -webkit-transition-duration: 0.4s; /* Safari */
    transition-duration: 0.4s;
    cursor: pointer;
}
.img:hover{
    background-color: #FFD5A2;  
}
</style>
</head>
<body>
<div style="width: 345px; height: 675px; background-color:#CCFF33; font: verdana; margin-left: 5px; ">
<fieldset style="width:200px;margin-left:8px;">
<legend >Избери пица::</legend> 
<form method="post" action="image_button.php" >

<input type="checkbox" name="topping[]" id= "Маргарита" value="Маргарита"/>
<label for="Маргарита">Маргарита</label><br> 
<input type="checkbox" name="topping[]" id= "Прошуто" value="Прошуто"/>
<label for="Прошуто">Прошуто</label><br>
<input type="checkbox" name="topping[]" id= "Ал Тоно" value="Ал Тоно"/>
<label for="Ал Тоно">Ал Тоно</label><br>
<input type="checkbox" name="topping[]" id= "Диаволо" value="Диаволо"/>
<label for="Диаволо">Диаволо</label><br>
<input type="checkbox" name="topping[]" id= "Куатро формаджи" value="Куатро формаджи"/>
<label for="Куатро формаджи">Куатро формаджи</label><br>

<p>Кликни върху изображението, за да поръчаш!<br /><br></p>

<input class="img" type="image" name="pizzas" src="pizza_chef.png" /><br /><br />
<input type=reset value="Изчисти" class="button"/>
</form>
</fieldset>
</div>

</body>
</html>
image_button.png
Изображение вместо бутон Submit

Скриптът, който ще обработва формата:
<!--image_button.php -->
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset=utf-8>
<title>Определяне на координатите</title>
<style>
.my{
width: 200px;
background-image: url('pizza.png'); 
background-repeat:no-repeat;
background-position: top right;
margin-top:10px; 
margin-right:30px;  
}

</style>
</head>
<body>

<?php
echo "<fieldset class=\"my\">";
echo "<legend>Вие избрахте:</legend>";
if ($_POST['topping']){
echo "<ol>";
foreach ( $_POST['topping'] as $value ){
print "<li>$value</li>";
}
echo "</ol>";
}
echo "<hr style=\"color:red;\">";
echo "Кликнахте върху точка с координати: <br />";
$coord1 = $_POST['pizzas_x'];
$coord2 = $_POST['pizzas_y'];

echo "x=$coord1, y=$coord2 ";
echo "</fieldset>";
?>
 
</body>
</html>
image_button_click.png
Проверка за това дали формата е приета или не е, можете да направите и с функцията empty():

if (!empty($coord1 )) {
//действие
}


Self обработване на HTML форма


Може да искате да комбинирате документ, съдържащ HTML форма и РНР скрипт, който обработва формата, в един файл. Това се прави чрез назначаване на масива $_SERVER['PHP_SELF'] (Управляващи структури) към атрибута action на HTML формата. Когато потребителят кликне върху бутона submit на формата, action атрибута се обръща към URL-а на същата страница, в която се намира и формата. В този случай е необходима проверка дали формата е била подадена за обработка (дали е кликнато върху бутона submit).
<!--form_self.php -->
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset=utf-8>
<title></title>
<style>
:focus {
    background-color: #D8F781;
}
 .button{
 background-color: #4CAF50;
    border: none;
    color: white;
    padding: 8px 16px;
    text-align: center;
    text-decoration: none;
    display: inline-block;
    font-size: 14px;
    margin: 2px 1px;
    -webkit-transition-duration: 0.4s; /* Safari */
    transition-duration: 0.4s;
    cursor: pointer;
}
.button {
    background-color: #FFFFFF; 
    color: #088A08; 
    border: 1px solid blue;
}
.button:hover {
    background-color: #FA5858;
    color: white;
}
div::before{
 content: url('heart.png') "Вашите данни са: ";
 background-repeat:no-repeat;
 background-position:bottom left;
 border-bottom: 1px dotted blue;
 
}
div{
 width:216px;
 height: 40px;
 color:#088A08;
 background-color:#D8F781;
 padding:5px;
 
}
</style>
</head>
<body>

<fieldset style="width:200px;">
<legend style="color:#0000FF;"></legend><br>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST">

<label style="color:#088A08;">Име:</label><br>
<input type="text" size=15 name="firstname" placeholder="Име" required autofocus><br><br>

<label style="color:#088A08;">Телефонен номер: </label><br>
<input id="phone" type="tel" size=15 name="phone" placeholder="0000 00 00 00" required autofocus><br><br>

<input class="button" type="submit" name="submit" value="Напред >>" style="padding: 5px; margin-right: 10px;">
<input class="button" type="reset" value="Изчисти" style="padding: 5px;">
</form>
</fieldset>
<div></div> <br>

<?php 
/*Дефинираме променливите от формата и им задаваме като
стойност празен низ*/
$firstname= $phone= "";

//Проверява дали е кликнато върху бутона submit
if ( isset($_POST['submit'])){
 
$firstname= $_POST['firstname'];
$phone=$_POST['phone'];

echo "Вашето име е" . " " . "<b>" . stripslashes(trim(htmlspecialchars ($firstname))) . "<b>" . "<br>";
echo "Телефонният ви номер е" . " " . "<b>" . stripslashes(trim(htmlspecialchars ($phone))) . "<b>" . "<br>";
print "Пътят до файла е: ". htmlspecialchars($_SERVER["PHP_SELF"]);

//Задаваме имената на променливите за достъп до базата данни  
$host = "localhost";
$user = "user";
$password = "password";
$DBName = "PolyDB";
$table_name = "Потребители";

//Свързваме се към MySQL сървъра и пишем заявката 
//за вписване на данните от формата в БД
$link = new mysqli($host, "user", "password", "PolyDB") or die ("Невъзможно свързване");
$sql = "INSERT INTO $table_name (ID, Име, Телефон) 
VALUES ('0', '$firstname', '$phone')";

if ($link->query($sql) === TRUE) { 

echo "<br><br>Данните са успешно записани в БД.";
echo "<br><br>Вашето потребителско име е" . " " . "<span style = \"color: #EC2929;\"><b>$firstname </b></span>". ".<br/>";
echo "Вашият телефон е" . " " . "<span style = \"color: #EC2929;\"><b>$phone </b></span>". ".<br/>";
}
else{

 echo "<span style = \"color: #0000FF;\">Данните не могат да бъдат вписани в БД!</span><br/><br/>". $link->error; 
}
$link->close();
}
?>
</body>
</html>
form_self.png
Self обработване на HTML страница

Как да създадете таблица в базата данни: Бази от данни.

Пренасочване на потребител


А, ако сайтът ви е преместен на ново място? Необходимо е да го пренасочите към новия адрес в зависимост от някои условия, като например дали потребителят се е логнал, дали помни паролата си и т.н..
Пренасочването на потребителя към нова страница е лесно с РНР. Това се прави с функцията header(), за да модифицираме HTTP хедъра, изпрратен от сървъра.
<!-- redir.php-->
<?php

//Пренасочва потребителя към желаната дестинация
 header( 'Location: https://disneyland.disney.go.com' );

 //Извежда съобщение за грешка, ако пренасочването не може да се извърши
 die(); 
 
?>
Хедърната информация трябва да бъде изпратена към браузъра преди какъвто и да е HTML текст, т.е. header() функцията трябва да се изпълни първа в скрипта.

Друг пример:
<!-- redirect.php-->
<?php
//Heredoc синтаксис за извеждане на съдържанието на формата
$str = <<<EOD

<html lang="en-US">
<head>
 <meta charset=utf-8>
<title>Пренасочване на потребител</title>
</head>
<body bgcolor="#33ff33">
<form action="http://localhost/phpbegin/redirect_1.php" method="post">
<b>
Избери машина за търсене:<br><br>
</b>
<select name="new_url">
<option value="" />
<option value="http://www.google.com" />Google
<option value="http://www.yahoo.com" /> Yahoo!
<option value="https://duckduckgo.com"//>DucDduckgo!
</select><br><br>
<input type="submit" value=" Пренасочване>>" />
</form>

</body>
</html>
EOD;

echo $str;
?>
Файлът, осъществяващ пренасочването:
<?php
//redirect_1.php
extract($_POST);
if ($_POST['new_url']){

header("Location: $new_url");
}
else{
 echo "Пренасочването не може да се осъществи.";
}
?>
redirect.png
Пренасочване на потребител

sign.png

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

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