Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Константы





В отличие от переменных, значение константы устанавливается единожды и не подлежит изменению. Константы не начинаются с символа $ и определяются с помощью оператора define:

  1. <?
  2. define ('MY_NAME', 'Вася');
  3. echo 'Меня зовут '. MY_NAME;
  4. ?>

Константы необязательно называть прописными буквами, но это общепринятое (и удобное) соглашение.

Поскольку имя константы не начинается с какого-либо спецсимвола, внутри двойных кавычек значение константы поместить невозможно (так как нет возможности различить, где имя константы, а где - просто текст).

Самоучитель PHP: Глава 4. Формы

Содержание главы

Версия для печати

  1. HTML-формы. Массивы $_GET и $_POST
  2. htmlspecialchars()
  3. phpinfo()

HTML-формы. Массивы $_GET и $_POST

Если вы еще не забыли материал первой главы, то вряд ли стоит напоминать: формы являются основным способом обмена данными между веб-сервером и браузером, то есть обеспечивают взаимодействие с пользователем - собственно, для чего и нужно веб-программирование.

Для дальнейшего чтения обязательно четкое понимание описанных в первой главе основ веб-программирования. Если вы новичок, советую еще раз внимательно перечитать ее.

Итак, возьмем уже знакомый вам по первой главе пример:

  1. <html>
  2. <body>
  3. <?
  4. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  5. echo '<h1>Привет, <b>'. $_POST['name']. '</b></h1>!';
  6. }
  7. ?>
  8. <form method="POST" action="<?=$_SERVER['PHP_SELF']?>">
  9. Введите Ваше имя: <input type="text" name="name">
  10. <br>
  11. <input type="submit" name="okbutton" value="OK">
  12. </form>
  13. </body>
  14. </html>

Форма, приведенная в строках 8-12, содержит два элемента: name и okbutton. Атрибут method указывает метод отправки формы POST (см. главу 1), атрибут же action, указывающий URL, на который отправляется форма, заполняется значением серверной переменной PHP_SELF - адресом выполняемого в данный момент скрипта.

<?=$_SERVER['PHP_SELF']?> - сокращенная форма записи для echo: <? echo $_SERVER['PHP_SELF'];?>.

Предположим, в поле name мы ввели значение Вася, и нажали кнопку OK. При этом браузер отправляет на сервер POST-запрос. Тело запроса: name=Вася&okbutton=OK. PHP автоматически заполняет массив $_POST:
$_POST['name'] = 'Вася'
$_POST['okbutton'] = 'OK'

В действительности, значение "Вася" отправляется браузером в urlencode-виде; для кодировки windows-1251 это значение выглядит как %C2%E0%F1%FF. Но, поскольку PHP автоматически осуществляет необходимое декодирование, мы можем "забыть" об этой особенности - пока не придется работать с HTTP-запросами вручную.

Так как в теле запроса указываются только имена и значения, но не типы элементов форм, PHP понятия не имеет, соответствует $_POST['name'] строке ввода, кнопке, или списку. Но эта информация нам, в общем-то, совершенно не нужна.:)

Поскольку знать, что написано на кнопке submit, нам необязательно, в строке 11 можно удалить атрибут name, сократив описание кнопки до <input type="submit" value="OK">. В этом случае, браузер отправит POST-запрос name=Вася.

А теперь - то же самое, но для GET-формы:

  1. <html>
  2. <body>
  3. <?
  4. if (isset($_GET['name'])) {
  5. echo '<h1>Привет, <b>'. $_GET['name']. '</b></h1>!';
  6. }
  7. ?>
  8. <form action="<?=$_SERVER['PHP_SELF']?>">
  9. Введите Ваше имя: <input type="text" name="name">
  10. <br>
  11. <input type="submit" value="OK">
  12. </form>
  13. </body>
  14. </html>

В строке 8 можно было бы с таким же успехом написать <form method="GET">: GET - метод по умолчанию. В этот раз браузер отправляет GET-запрос, который равносилен вводу в адресной строке адреса: http:// адрес-сайта / имя-скрипта. php?name=Вася.

PHP с GET-формами поступает точно так же, как и с POST, с тем отличием, что заполняется (угадайте с трех раз:)) массив $_GET.

Кардинальное же отличие - в строке 4. Поскольку простой ввод адреса в строке браузера является GET-запросом, проверка if ($_SERVER['REQUEST_METHOD'] == 'GET') бессмысленна: все, что мы в этом случае выясним - что кто-то от нефиг делать не отправил на наш скрипт POST-форму.;) Поэтому мы прибегаем к конструкции isset(), которая возвращает true, если данная переменная определена (т.е. ей было присвоено значение), и false - если переменная не определена. Если форма была заполнена - как вы уже поняли, PHP автоматически присваивает $_GET['name'] соответствующее значение.


Cпособ проверки с помощью isset() - универсальный, его можно было бы использовать и для POST-формы. Более того, он предпочтительнее, так как позволяет выяснить, какие именно поля формы заполнены.

Во многих старых книгах и статьях утверждается, что:
1. Данные как из GET, так и из POST-форм попадают непосредственно в переменные (в нашем случае - $name), причем POST-данные приоритетнее, т.е. "затирают" GET-данные;
2. Также данные GET и POST-форм хранятся соответственно в массивах $HTTP_GET_VARS и $HTTP_POST_VARS.
Эта информация давным-давно устарела. Уже года три как. Web-программирование, и, в частности, PHP развивается быстрыми темпами. Запомните этот момент, чтобы не попасть впросак со старыми книгами или скриптами.

Любознательные читатели могут узнать подробности здесь, а также проследовать сюда.

Немного более сложный пример.

  1. <html>
  2. <body>
  3. <?
  4. if (isset($_POST['name'], $_POST['year'])) {
  5. if ($_POST['name'] == '') {
  6. echo 'Укажите имя!<br>';
  7. } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {
  8. echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>';
  9. } else {
  10. echo 'Здравствуйте, '. $_POST['name']. '!<br>';
  11. $age = 2004 - $_POST['year'];
  12. echo 'Вам '. $age. ' лет<br>';
  13. }
  14. echo '<hr>';
  15. }
  16. ?>
  17. <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
  18. Введите Ваше имя: <input type="text" name="name">
  19. <br>
  20. Введите Ваш год рождения: <input type="text" name="year">
  21. <input type="submit" value="OK">
  22. </form>
  23. </body>
  24. </html>

Никаких новых приемов здесь не используется. Разберитесь, выполните код, попробуйте модифицировать...

Изменим последний пример, чтобы пользователю не нужно было повторно заполнять поля. Для этого заполним атрибуты value элементов формы только что введенными значениями.

  1. <html>
  2. <body>
  3. <?
  4. $name = isset($_POST['name'])? $_POST['name']: '';
  5. $year = isset($_POST['year'])? $_POST['year']: '';
  6. if (isset($_POST['name'], $_POST['year'])) {
  7. if ($_POST['name'] == '') {
  8. echo 'Укажите имя!<br>';
  9. } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {
  10. echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>';
  11. } else {
  12. echo 'Здравствуйте, '. $_POST['name']. '!<br>';
  13. $age = 2004 - $_POST['year'];
  14. echo 'Вам '. $age. ' лет<br>';
  15. }
  16. echo '<hr>';
  17. }
  18. ?>
  19. <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
  20. Введите Ваше имя: <input type="text" name="name" value="<?=$name?>">
  21. <br>
  22. Введите Ваш год рождения: <input type="text" name="year" value="<?=$year?>">
  23. <input type="submit" value="OK">
  24. </form>
  25. </body>
  26. </html>

Несколько непонятными могут оказаться строки 4 и 5. Все очень просто: X = A? B: C - сокращенная запись условия if (A) X=B else X=C. Строку 4 можно было бы записать так:


if (isset($_POST['name'])) $name = $_POST['name'];else $name = '';

Используемая же в строках 21 и 23 конструкция <?= $foo?> - и того проще: это сокращение для <? echo $foo?>.

Может возникнуть вопрос - почему бы не выбросить строки 4-5 и не написать:

Введите Ваше имя: <input type="text" name="name" value="<?=$_POST['name']?>"><br>
Введите Ваш год рождения: <input type="text" name="year" value="<?=$_POST['year']?>">

Дело в том, что, если эти POST-переменные не определены - а так и будет, если форму еще не заполняли, - PHP выдаст предупреждения об использовании неинициализированных переменных (причем, вполне обоснованно: такое сообщение позволяет быстро находить труднообнаружимые опечатки в именах переменных, а также предупреждает о возможных "дырах" на сайте). Можно, конечно, поместить код с isset... прямо в форму, но получится слишком громоздко.

Разобрались? А теперь попробуйте найти ошибку в приведенном коде. Ну, не совсем ошибку, - но недочет.







Date: 2015-09-17; view: 341; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.016 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию