Отправляет email-рассылки с помощью сервиса Sendsay

PHP программирование для всех

  Все выпуски  

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&param2=value2&param3=value3.

Здесь очень ярко проявляется преимущество PHP перед, скажем, Perl. Те кто с Perl знакомы, меня поймут, а для остальных объясню - в Perl вам бы пришлось сначала вычленять строчку после знака "?", потом разбивать её по символу "&" и только потом образовывать массив.

В PHP всё просто. Интерпретатор сам делает всю "грязную" работу за нас. И таким образом, в данном адресе получаем следующее:

$_GET['param1']=value1;
$_GET['param2']=value2;
$_GET['param3']=value3;

Понимаете, да? Строчка автоматически разбивается по символу "&" и то, что находится слева от знака "=" является ключом массива, то что справа - его значением. Удобо, не правда ли?

Между прочим, $_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

До новых встреч!

В избранное