Скрити полета
Ако уеб страницата съдържа няколко форми, можете да поставите скрити полета, които ще ви помогнат да идентифицирате коя форма е необходимо да бъде обработена, като й зададете име. Чрез скритите полета можете да контролирате коя форма кога да се покаже и кога да се обработи. В скритите полета можете да включите информация, която не искате да се показва на потребителя, например вашето име, датата на която е създадена формата, може да ги ползвате за предаване на временни или сесийни данни от една форма към друга или пък да съхраните информация, която вече е била вписана от потребителя.
Скритите полета не са видими във формата, но са видими в сорс кода на страницата, поради което в тях не бива да се вписва важна информация.
<!-- 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>
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>
|
|---|
| Форма за множество избори |
|
|---|
| Обработена форма за множество избори |
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>
|
|---|
| Изображение вместо бутон 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>
|
|---|
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>
|
|---|
| 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 "Пренасочването не може да се осъществи.";
}
?>
|
|---|
| Пренасочване на потребител |
|
|
Няма коментари:
Публикуване на коментар