Відмінності між версіями «Передача параметрів в PHP»
(Створена сторінка: Существует два широко распространенных решения этой задачи. 1) Генерация JS кода с помощь…) |
|||
Рядок 1: | Рядок 1: | ||
− | + | Современные веб-ресурсы не просто предоставляют информацию посетителю, но и взаимодействуют с ним. Для взаимодействия с пользователем нужно получать некоторую информацию от него. Для получения данных есть несколько методов, очень распространенные методы <b>GET</b> и <b>POST</b>. И соответственно в <b>PHP</b> есть поддержка этих методов передачи данных <b>GET</b> и <b>POST</b>. Посмотрим, как работают эти методы.<p><br><font color="#808080"><span class="text_bold">Метод GET</span></font></p><p>Данные <b>методом GET</b> передаются путем их добавления к URL-адресу вызываемого сценария, предназначенного для обработки полученной информации. Для пояснения данного метода наберите в адресной строке браузера URL-адрес ресурса и добавьте сначала знак вопроса (<span class="text_bold">?</span>), а затем строчку <span class="text_italic">num=10</span>. Например</p><div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code">http://домен.ru/script.php?num=10</div></div>Если у вас локальный сервер, то обычно домен будет <span class="text_italic">localhost</span>, и тогда предыдущая запись будет выглядеть<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code">http://localhost/script.php?num=10</div></div>В этом случае мы передаем параметр <span class="text_bold">num</span> равный 10. Для добавления следующих параметров сценарию нужно использовать разделитель - амперсант (<span class="text_bold">&</span>), например<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code">http://домен.ru/script.php?num=10&type=new&v=text</div></div>В данном случае мы передали скрипту три параметра: <span class="text_bold">num</span> со значением 10, <span class="text_bold">type</span> со значением "<span class="text_italic">new</span>" и <span class="text_bold">v</span> со значением "<span class="text_italic">text</span>".<br>Для получения этих параметров в скрипте нужно использовать встроенный массив <b>$_GET</b>. Ключами этого массива будут названия параметров. В нашем случае нужно использовать <span class="text_italic">$_GET["num"], $_GET["type"],$_GET["v"]</span>. Эти элементы массива и будут содержать значения переданных параметров. Для демонстрации этого примера создайте файл <span class="text_italic">script.php</span> следующего содержания<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><html><br><head><br><title>Проверка метода GET в PHP</title><br></head><br><body><br><?php<br>echo ($_GET["num"]."<br>");<br>echo ($_GET["type"]."<br>");<br>echo ($_GET["v"]);<br>?><br></body><br></html></div></div>И теперь вызовите этот файл в браузере<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code">http://путь/script.php?num=10&type=new&v=text</div></div>и вы увидите переданные параметры в окне браузера. Но если вы вызовите этот файл без дополнительных параметров <span class="text_italic">http://путь/script.php</span> , то увидите ошибки, которые выдаст интерпретатор <b>PHP</b>, о том, что таких элементов массива <span class="text_bold">$_GET</span> нет. Проверке данных получаемых от пользователя можно посветить не одну статью, поэтому в этой статье я не буду затрагивать этот момент.<br>Как вы, наверное, понимаете заставлять пользователя набирать данные в адресной строке браузера не очень хорошо и совсем неудобно. Поэтому для приема данных от пользователя нужно использовать <span class="text_italic">html</span>-формы. Напишем простенькую <span class="text_italic">html</span>-форму.<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><form action="script.php" method="get" ><br>Введите число <input type="text" name="num" value="" /><br/><br>У Вас есть компьютер? <select name="type"><br><option value="yes">Да</option><br><option value="no">Нет</option><br></select><br/><br>Ваш комментарий:<br/><br><textarea name="v" ></textarea><br/><br><input type="submit" name="bsubmit" value="Отправить" /><br></form></div></div>Немного прокомментирую созданную форму. Формы создаются тегом <span class="text_bold">form</span>. Поля формы создаются тегами <span class="text_bold">input</span>, <span class="text_bold">select</span>, <span class="text_bold">textarea</span> (подробнее можно почитать <a href="http://www.linedmk.com/page27.html">формы в HTML</a>). В теге <span class="text_bold">form</span> в атрибуте <span class="text_bold">action</span> указывается URL-адрес скрипта, который получит данные формы. В нашем случае мы указали уже существующий у нас файл <span class="text_italic">script.php</span>. Атрибут <span class="text_bold">method</span> задает метод отправки данных. Мы указали метод <b>GET</b>. Теперь мы знаем, какому файлу будут переданы данные формы, и каким способом, осталось разобраться, где их там искать?!<br>Данные этой формы будут переданы веб-ресурсу браузером путем добавления их к URL-адресу: сначала будет знак вопроса (<span class="text_bold">?</span>), затем будут представлены параметры разделенные амперсантом (<span class="text_bold">&</span>). Название параметра будет браться из атрибута <span class="text_bold">name</span>, которое должно быть прописано у любого поля формы. Значение параметра будет зависеть от типа поля. Если поле является текстовым, то значением будет введенный пользователем текст. Если же поле будет представлять собой список, группу переключателей или флажков, то значением параметра будет значение атрибута <span class="text_bold">value</span> выбранного элемента. Поясню на примере нашей формы. Если пользователь введет в поле <span class="text_bold">input</span> число 10, то названием параметра будет <span class="text_bold">num</span> (значение атрибута <span class="text_bold">name</span> тега <span class="text_bold">input</span>), а значением будет 10 (введенное пользователем число). Соответственно браузер сформирует пару "<span class="text_italic">num=10</span>". Если пользователь из списка выберет вариант "Да", то названием параметра будет <span class="text_bold">type</span> (значение атрибута <span class="text_bold">name</span> тега <span class="text_bold">select</span>), а значением будет <span class="text_italic">yes</span> (значение атрибута <span class="text_bold">value</span> тега <span class="text_bold">option</span>). Соответственно браузер сформирует пару "<span class="text_italic">type=yes</span>".<br>Теперь эту форму разместим на странице <span class="text_italic">forma.php</span>.<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><html><br><head><br><title>Форма для передачи данных методом GET и PHP</title><br></head><br><body><br><form action="script.php" method="get" ><br>Введите число <input type="text" name="num" value="" /><br/><br>У Вас есть компьютер? <select name="type"><br><option value="yes">Да</option><br><option value="no">Нет</option><br></select><br/><br>Ваш комментарий:<br/><br><textarea name="v" ></textarea><br/><br><input type="submit" name="bsubmit" value="Отправить" /><br></form><br></body><br></html></div></div>Введите в поля формы какие-либо значения и нажмите кнопку "Отправить". После нажатия кнопки браузер откроет другую страницу (<span class="text_italic">script.php</span>), и в окне браузера будут отображены данные, которые вы ввели. Я думаю понятно почему: браузер передаст данные сценарию <span class="text_italic">script.php</span>, и в скрипте эти данные будут обработаны и выведены на экран.<p><br><font color="#808080"><span class="text_bold">Метод POST</span></font></p><p>Теперь давайте рассмотрим, как работает метод <b>POST</b>.<br>Для отправки данных методом <b>POST</b> нужно использовать <span class="text_italic">HTML</span>-формы. Как мы помним, что за способ отправки данных формы отвечает атрибут <span class="text_bold">method</span> тега <span class="text_bold">form</span>. Поэтому нужно в атрибуте <span class="text_bold">method</span> тега <span class="text_bold">form</span> указать значение <span class="text_bold">POST</span>. В остальном форма может быть та же, как и для метода <span class="text_bold">GET</span>. Изменим нашу форму, которую мы уже использовали для передачи данных способом <span class="text_bold">GET</span>, для передачи методом <span class="text_bold">POST</span>.</p><div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><form action="script_post.php" method="post" ><br>Введите число <input type="text" name="num" value="" /><br/><br>У Вас есть компьютер? <select name="type"><br><option value="yes">Да</option><br><option value="no">Нет</option><br></select><br/><br>Ваш комментарий:<br/><br><textarea name="v" ></textarea><br/><br><input type="submit" name="bsubmit" value="Отправить" /><br></form></div></div>Как видите, форма осталась та же за исключением атрибутов <span class="text_bold">method</span> и <span class="text_bold">action</span>. Теперь данные будут передаваться сценарию <span class="text_italic">script_post.php</span>. Поместим нашу форму на странице <span class="text_italic">forma_post.php</span>.<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><html><br><head><br><title>Форма для передачи данных методом POST и PHP</title><br></head><br><body><br><form action="script_post.php" method="post" ><br>Введите число <input type="text" name="num" value="" /><br/><br>У Вас есть компьютер? <select name="type"><br><option value="yes">Да</option><br><option value="no">Нет</option><br></select><br/><br>Ваш комментарий:<br/><br><textarea name="v" ></textarea><br/><br><input type="submit" name="bsubmit" value="Отправить" /><br></form><br></body><br></html></div></div>Теперь надо написать сценарий, который будет обрабатывать данные нашей формы.<br>Для получения в скрипте данных переданным методом <b>POST</b> нужно использовать встроенный массив <b>$_POST</b>. Ключами этого массива будут названия параметров. В нашем случае нужно использовать <span class="text_italic">$_POST["num"], $_POST["type"],$_POST["v"]</span>. Эти элементы массива и будут содержать значения переданных данных. Как видите отличие от использования способа <span class="text_bold">GET</span>, выражается лишь в использовании массива <span class="text_bold">$_POST</span>. Поэтому нам не составит труда написать файл <span class="text_italic">script_post.php</span>:<div class="block_konteiner"><div class="zagol_block_code"> Код </div><div class="block_code"><html><br><head><br><title>Проверка метода POST в PHP</title><br></head><br><body><br><?php<br>echo ($_POST["num"]."<br>");<br>echo ($_POST["type"]."<br>");<br>echo ($_POST["v"]);<br>?><br></body><br></html></div></div>Теперь откройте файл <span class="text_italic">forma_post.php</span> в браузере. Введите какие-нибудь данные в поля формы и нажмите кнопочку "Отправить". Сейчас, наверное, вы заметили отличие метода <span class="text_bold">POST</span> от <span class="text_bold">GET</span> - в адресной строке браузера не появились данные формы. Данные методом <b>POST</b> нельзя передать через адресную строку браузера. Это существенное отличие нужно запомнить.<br>В <b>PHP</b> в независимости, каким способом были отправлены данные - методом <span class="text_bold">POST</span> или методом <span class="text_bold">GET</span> - получить данные можно используя массив <span class="text_bold">$_REQUEST</span>.<p><font color="#808080"><span class="text_bold">Сравнение методов GET и POST</span></font></p><p>При использовании метода <span class="text_bold">GET</span> данные передаются путем добавления к URL-адресу. Таким образом, они будут видны пользователю, что с точки зрения безопасности не всегда хорошо. Также максимальный объем передаваемых данных будет зависеть от браузера - от максимально-допустимого количества символов адресной строке браузера.<br>При использовании метода <span class="text_bold">POST</span> данные не будут видны пользователю (не отображаются в адресной строке браузера). И поэтому они более защищены, а, следовательно, и программа обрабатывающая эти данные более защищена в плане безопасности. Также объем передаваемых данных практически ни чем не ограничен. <br>Выбирая способ передачи данных нужно учитывать приведенные особенности и останавливаться на наиболее приемлемом методе.</p> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Версія за 22:06, 24 травня 2010
Современные веб-ресурсы не просто предоставляют информацию посетителю, но и взаимодействуют с ним. Для взаимодействия с пользователем нужно получать некоторую информацию от него. Для получения данных есть несколько методов, очень распространенные методы GET и POST. И соответственно в PHP есть поддержка этих методов передачи данных GET и POST. Посмотрим, как работают эти методы.
Метод GET
Данные методом GET передаются путем их добавления к URL-адресу вызываемого сценария, предназначенного для обработки полученной информации. Для пояснения данного метода наберите в адресной строке браузера URL-адрес ресурса и добавьте сначала знак вопроса (?), а затем строчку num=10. Например
Если у вас локальный сервер, то обычно домен будет localhost, и тогда предыдущая запись будет выглядетьВ этом случае мы передаем параметр num равный 10. Для добавления следующих параметров сценарию нужно использовать разделитель - амперсант (&), напримерВ данном случае мы передали скрипту три параметра: num со значением 10, type со значением "new" и v со значением "text".Для получения этих параметров в скрипте нужно использовать встроенный массив $_GET. Ключами этого массива будут названия параметров. В нашем случае нужно использовать $_GET["num"], $_GET["type"],$_GET["v"]. Эти элементы массива и будут содержать значения переданных параметров. Для демонстрации этого примера создайте файл script.php следующего содержания
<head>
<title>Проверка метода GET в PHP</title>
</head>
<body>
<?php
echo ($_GET["num"]."<br>");
echo ($_GET["type"]."<br>");
echo ($_GET["v"]);
?>
</body>
</html>
Как вы, наверное, понимаете заставлять пользователя набирать данные в адресной строке браузера не очень хорошо и совсем неудобно. Поэтому для приема данных от пользователя нужно использовать html-формы. Напишем простенькую html-форму.
Введите число <input type="text" name="num" value="" /><br/>
У Вас есть компьютер? <select name="type">
<option value="yes">Да</option>
<option value="no">Нет</option>
</select><br/>
Ваш комментарий:<br/>
<textarea name="v" ></textarea><br/>
<input type="submit" name="bsubmit" value="Отправить" />
</form>
Данные этой формы будут переданы веб-ресурсу браузером путем добавления их к URL-адресу: сначала будет знак вопроса (?), затем будут представлены параметры разделенные амперсантом (&). Название параметра будет браться из атрибута name, которое должно быть прописано у любого поля формы. Значение параметра будет зависеть от типа поля. Если поле является текстовым, то значением будет введенный пользователем текст. Если же поле будет представлять собой список, группу переключателей или флажков, то значением параметра будет значение атрибута value выбранного элемента. Поясню на примере нашей формы. Если пользователь введет в поле input число 10, то названием параметра будет num (значение атрибута name тега input), а значением будет 10 (введенное пользователем число). Соответственно браузер сформирует пару "num=10". Если пользователь из списка выберет вариант "Да", то названием параметра будет type (значение атрибута name тега select), а значением будет yes (значение атрибута value тега option). Соответственно браузер сформирует пару "type=yes".
Теперь эту форму разместим на странице forma.php.
<head>
<title>Форма для передачи данных методом GET и PHP</title>
</head>
<body>
<form action="script.php" method="get" >
Введите число <input type="text" name="num" value="" /><br/>
У Вас есть компьютер? <select name="type">
<option value="yes">Да</option>
<option value="no">Нет</option>
</select><br/>
Ваш комментарий:<br/>
<textarea name="v" ></textarea><br/>
<input type="submit" name="bsubmit" value="Отправить" />
</form>
</body>
</html>
Метод POST
Теперь давайте рассмотрим, как работает метод POST.
Для отправки данных методом POST нужно использовать HTML-формы. Как мы помним, что за способ отправки данных формы отвечает атрибут method тега form. Поэтому нужно в атрибуте method тега form указать значение POST. В остальном форма может быть та же, как и для метода GET. Изменим нашу форму, которую мы уже использовали для передачи данных способом GET, для передачи методом POST.
Введите число <input type="text" name="num" value="" /><br/>
У Вас есть компьютер? <select name="type">
<option value="yes">Да</option>
<option value="no">Нет</option>
</select><br/>
Ваш комментарий:<br/>
<textarea name="v" ></textarea><br/>
<input type="submit" name="bsubmit" value="Отправить" />
</form>
<head>
<title>Форма для передачи данных методом POST и PHP</title>
</head>
<body>
<form action="script_post.php" method="post" >
Введите число <input type="text" name="num" value="" /><br/>
У Вас есть компьютер? <select name="type">
<option value="yes">Да</option>
<option value="no">Нет</option>
</select><br/>
Ваш комментарий:<br/>
<textarea name="v" ></textarea><br/>
<input type="submit" name="bsubmit" value="Отправить" />
</form>
</body>
</html>
Для получения в скрипте данных переданным методом POST нужно использовать встроенный массив $_POST. Ключами этого массива будут названия параметров. В нашем случае нужно использовать $_POST["num"], $_POST["type"],$_POST["v"]. Эти элементы массива и будут содержать значения переданных данных. Как видите отличие от использования способа GET, выражается лишь в использовании массива $_POST. Поэтому нам не составит труда написать файл script_post.php:
<head>
<title>Проверка метода POST в PHP</title>
</head>
<body>
<?php
echo ($_POST["num"]."<br>");
echo ($_POST["type"]."<br>");
echo ($_POST["v"]);
?>
</body>
</html>
В PHP в независимости, каким способом были отправлены данные - методом POST или методом GET - получить данные можно используя массив $_REQUEST.
Сравнение методов GET и POST
При использовании метода GET данные передаются путем добавления к URL-адресу. Таким образом, они будут видны пользователю, что с точки зрения безопасности не всегда хорошо. Также максимальный объем передаваемых данных будет зависеть от браузера - от максимально-допустимого количества символов адресной строке браузера.
При использовании метода POST данные не будут видны пользователю (не отображаются в адресной строке браузера). И поэтому они более защищены, а, следовательно, и программа обрабатывающая эти данные более защищена в плане безопасности. Также объем передаваемых данных практически ни чем не ограничен.
Выбирая способ передачи данных нужно учитывать приведенные особенности и останавливаться на наиболее приемлемом методе.