PHP _SELF в атрибуті форми action. Як зробити алгоритм пошуку за кількома словами на PHP з БД Туалетна для чоловіків search php submit
Щоб організувати передачу даних на сервер за допомогою форми, потрібно реалізувати HTML форму, в яку відвідувачі сайту будуть вводити свою інформацію та код PHP, призначення якого в прийнятті та обробці отриманих даних на сервері.
HTML форма відправлення даних
Форма на сторінці формується тегами
, всередині яких містяться теги полів для введення текстової інформації, теги спеціальних компонентів (наприклад, поле зі списком), теги для поля вибору та завантаження файлу .* Для HTML5 також існує можливість розміщувати теги полів форми не всередині тегів форми, а в будь-якому місці на сторінці. При цьому для кожного такого поля потрібно вказувати атрибут "form", щоб визначити з якою формою надсилання він повинен взаємодіяти.
Отже, найпростіша форма відправки може містити такий код:
Елементи форми та їх параметри:
action="myform.php"– атрибут "action" визначає, який php-файл буде обробляти дані, що відправляються. У цьому прикладі дані будуть відправлені у файл "myform.php", що знаходиться в тій же директорії що і сторінка з формою. Якщо цей атрибут не вказати явно, ці форми будуть надіслані на адресу сторінки самої форми.
method="post"– method визначає метод передачі даних POST або GET. Докладніше про це у статті "Відмінності методів POST або GET". Якщо не вказувати атрибут явно, за умовчанням використовуватиметься метод GET.
Текст "Значення А:"і "Значення Б:"доданий тільки з метою оформлення та зрозумілості форми для користувача. Додавати це передачі даних не обов'язково, але для того, щоб користувачеві стало зрозуміло, що вводити, варто вказувати.
Теги використовуються для формування різних керуючих елементів форми.
type="text"– атрибут "type" визначає вигляд поля. Залежно від того, який тип зазначений, змінюється і зовнішній вигляд елемента та його призначення. Значення атрибута "text" вказує, що в браузері елемент відображатиметься однорядковим текстовим полем, куди користувач зможе ввести рядок.
name="data1"– атрибут "name", вказує ім'я, вірніше індекс даних у масиві, отриманих сервером. Це обов'язковий параметр, за яким у php-обробнику можна буде отримати доступ переданому значенню. Ім'я може бути обране довільно, проте, зручніше, коли це значення має якийсь зрозумілий зміст.
type="submit"- Тег з таким значенням параметра "type" відображатиметься на сторінці як кнопка. Насправді на формі можна обійтися без кнопки. Якщо, наприклад, у формі є текстові поля, відправку можна здійснити, просто натиснувши "Введення" на клавіатурі. Але наявність кнопки робить форму зрозумілішою.
value="(!LANG:Надіслати" !}– у цьому випадку (для type="submit") визначає лише напис на кнопці. Для type="text", наприклад, це буде текст, який буде виведено у текстовому полі.
У результаті, на сторінці цей код виглядатиме приблизно так:
За натисканням на кнопку буде виконано відправлення даних на вказану сторінку, і якщо вона існує і коректно працює, дані будуть оброблені.
Обробка відправлених HTML формою даних у PHP
Відправлені описаним способом дані, що містяться в суперглобальні масиви $_POST, $_GET і $_REQUEST. $_POST або $_GET міститимуть дані в залежності від того, яким методом здійснювалося відправлення. $_REQUEST містить надіслані дані будь-яким із зазначених методів.
$_POST, $_GET і $_REQUEST – це асоціативні масиви, поля-індекси яких збігаються з атрибутами "name" тегів . Відповідно, для роботи з даними у файлі myform.php можна присвоїти змінним значення елементів такого масиву вказавши як індекс ім'я поля:
// для методу GET
$a = $_GET[ "data1"];
$b = $_GET[ "data2"];
// для методу POST
$a = $_POST[ "data1"];
$b = $_POST[ "data2"];
// за будь-якого методу
$a = $_REQUEST[ "data1"];
$b = $_REQUEST[ "data2"];
Перевірка заповнення полів форми
Іноді при отриманні даних потрібно перевірити, чи користувач не відправив порожню форму. Для цього можна використовувати функцію empty.
if (empty ($_REQUEST["data1" ])) (
echo "Поле не заповнено";
} else (
echo "Поле було заповнено";
$a = $_REQUEST[ "data1"];
}
Зазвичай цього рішення достатньо. Якщо потрібно вводити текст, то буде зрозуміло, чи введений він чи ні. Однак, якщо користувач навмисно для обчислень введе нуль, то функція empty покаже, що значення немає. Тому для таких ситуацій краще використовувати функцію isset. Вона явно перевірятиме, чи задане значення чи ні.
if (isset ($_REQUEST["data1"])) (
echo "Поле було заповнено";
$a = $_REQUEST[ "data1"];
} else (
echo "Поле не заповнено";
}
У статті докладно йдеться про використання змінної PHP _SELF.
Що за змінна PHP _SELF?
Змінна PHP _SELF повертає ім'я та шлях до поточного файлу (щодо кореня документа). Ви можете використовувати цю змінну в атрибуті форми action. Існують також деякі нюанси, які ви маєте знати. Ми, звичайно, ніяк не можемо обминути ці нюанси.
Давайте розглянемо кілька прикладів.
Echo $_SERVER["PHP_SELF"];
1) Припустимо, що ваш php файл розташований за наступною адресою:
http://www.yourserver.com/form-action.php
У цьому випадку змінна PHP _SELF міститиме:
"/form-action.php"
2) Припустимо, ваш php файл розташований за такою адресою:
http://www.yourserver.com/dir1/form-action.php
PHP _SELF буде:
"/dir1/form-action.php"
PHP _SELF в атрибуті форми action. Навіщо вона там знадобилася?
Зазвичай змінну PHP _SELF використовують у атрибуті action тега form . В атрибуті action вказується адреса, за якою буде надіслано зміст форми після підтвердження (клік користувачем по кнопці з type="submit"). Як правило це та сама сторінка, з якої пішла форма.
Однак, якщо ви перейменуєте файл, на який посилається форма, вам знадобиться перейменувати назву файлу в атрибуті action, інакше форма не працюватиме.
Змінна PHP _SELF позбавить вас зайвих виправлень, оскільки адреса сторінки буде генеруватися автоматично, виходячи з назви файлу.
Допустимо, у вас є файл з формою form-action.php, і ви хочете, щоб після підтвердження форма відправлялася на той самий файл. Зазвичай пишуть так:
Код, який знаходиться у верхній частині HTML сторінки, буде виконаний першим. У першому рядку коду перевіряється: форму відправлено чи ні. Якщо існує $_POST["submit"] , конструкція IF виконується (TRUE) і буде виведено ім'я, введене користувачем.
Якщо змінної $_POST["submit"] не існує, форма не була відправлена і, відповідно, конструкція IF виконуватися не буде (FALSE). Тому ім'я користувача не буде виведено.
Небажані моменти, пов'язані зі змінною PHP _SELF
Змінна PHP _SELF використовується для того, щоб отримати ім'я та шлях до поточного файлу – добре, але її також можуть використовувати хакери – погано. Якщо на вашій сторінці стоїть PHP _SELF, користувач може ввести слєш (/) і прописати шкідливі XXS скрипти.
Розглянемо приклад:
Ви можете бачити самі, що код додано тег script і команда alert . Коли ця сторінка буде завантажена, користувач побачить вікно із попередженням. Це простий приклад того, як можна експлуатувати змінну PHP_SELF.
Будь - який JavaScript код може бути доданий між тегами script . Хакер також може посилатися на файл JavaScript, який буде розташований на іншому сервері. У цьому файлі, ймовірно, буде шкідливий код, за допомогою якого хакер може змінити глобальні змінні та переправити форму на іншу адресу з метою перехоплення даних, введених користувачем.
Як уникнути неприємностей, пов'язаних з PHP _SELF
Неприємностей можна уникнути, використовуючи функцію htmlentities(). Погляньте на код форми, де є функція htmlentities() .