PHP программирование для всех Знакомство с массивами в PHP. Часть 2.
Здравствуйте, уважаемые читатели рассылки!
Это выпуск №6.
Сегодня мы продолжим, а точнее, завершим знакомство с массивами.
Если говорить о массивах в PHP, то нужно затронуть методы, используемые
при отправке форм, сделанных в HTML. Здесь я буду предполагать что
читатель знаком хотя бы с азами HTML-верстки, поэтому буду
распространяться только по конкретной тематике.
При отправке форм, написанных на HTML, автоматически могут
образовываться один из следующих видов массивов:
$_GET - если в HTML прописано так: <form method='get'> $_POST - если прописано так: <form method='post'>
Здесь я намеренно опустил параметр action. Так как он указывает на
файл, который должен обработать форму, то в этом параметре может быть
всё что угодно.
Теперь поподробнее о каждом. Массив $_GET образуется автоматически,
даже если вы не прописали в атрибутах формы параметр method. Иначе
говоря, всё что вы видите в адресной строке после знака "?" является
массивом $_GET.
Разберём конкретный пример. Дан адрес
http://www.site.ru?param1=value1¶m2=value2¶m3=value3.
Здесь очень ярко проявляется преимущество PHP перед, скажем, Perl. Те
кто с Perl знакомы, меня поймут, а для остальных объясню - в Perl вам
бы пришлось сначала вычленять строчку после знака "?", потом разбивать
её по символу "&" и только потом образовывать массив.
В PHP всё просто. Интерпретатор сам делает всю "грязную" работу за нас.
И таким образом, в данном адресе получаем следующее:
Понимаете, да? Строчка автоматически разбивается по символу "&" и то,
что находится слева от знака "=" является ключом массива, то что справа
- его значением. Удобо, не правда ли?
Между прочим, $_GET массив может образовываться не только при отправке
данных из форм. Скажем, вы можете сделать ссылку такого вида, а потом
проверить, установлены ли какие-либо элементы массива $_GET (т.е. был
ли осуществлён переход по данной ссылке).
Но, как говорится, в бочке мёда есть обязательно ложка дёгтя. Во-первых
вся строка после знака вопроса не должна превышать 1024 байт - это
ограничение, накладываемое самим языком программирования.
Что во-вторых? Ну смотрите: скажем вы в форме передаёте логин, e-mail,
и пароль. После отправки вся эта информация будет видна в браузере в
незащищённом виде. Конечно реально зашифровать эту информацию (есть
функции base64_encode, md5, sha1 - о них попозже),
но тогда есть два осложнения:
1. Во-первых длина строки может превысить 1024 байта (зашифрованные
строки достаточно длинные.
2. Во-вторых при шифровании пользователь увидит в строке браузера
что-то типа следующего:
http://www.site.com?login=dg76h4244xmalos892xnsfdqpezasde72aps&email=fr
gdtsbfmd674jx87fn56fhb833dht5&password=hfgf6d7h4653gfh46372r047vnh47352
537
Что-нибудь понимаете? Нет? И неудивительно. Любого пользователя такая
строка может повергнуть в замешательство. А представьте теперь, что при
обработке формы произошла ошибка, и к этому ужасу прибавился
незашифрованный текст ошибки который, кстати, тоже может быть любым по
длине.
Все проблемы решаются легко и просто если использовать метод post. Для
того, чтобы использовать этот метод, необходимо явно прописать:
<form method='post'>. У этого метода немного преимуществy, но
они очень ёмкие. Во-первых длина передаваемых данных не ограничена.
Во-вторых их просто не видно.
Этот метод может и должен использоваться при передаче конфиденциальных
данных (например, пароля) или при передаче файлов. Формируется он точно
по такому же принципу что и $_GET. Но работать с ним (мне, например)
гораздо удобнее.
Вот, пожалуй, и всё, что хотелось сказать про эти массивы. Если у вас
остались вопросы, пожалуйста задавайте их на форуме по адресу http://forum.programming4web.com