WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Введение в PHP


Прислал: Тарасенко Сергей [ 31.05.2001 @ 02:38 ]
Раздел:: [ Статьи по PHP ]


Простая форма

Одна из наиболее удобных и приятных особенностей PHP - это его способность автоматически передавать значения переменных из форм в переменные PHP. Это очень облегчает обработку форм.

Например, Вы обрабатываете форму, которая имеет поле ввода следующего вида:

<INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris">

и в то время, когда выводится страница с этим PHP-кодом, переменная $name имеет значение Glen Morris.

Тогда Вы можете вывести это значение на экран:

echo "Hi $name!";

или вставить проверку в условном операторе:

if ($name == "Glen Morris") { echo "Please check your email."; }

Это позволяет организовать обработку форм с помощью PHP. Рассмотрим небольшой пример, в котором попросим посетителя ответить на несколько вопросов (указать имя, электронный адрес и еще кое-что) и сформируем выводимую страницу в зависимости от его ответов.

Вначале разделим нашу страницу на две части. Но не будем создавать две отдельные страницы (одна для формы, другая для CGI-скрипта, который эту форму обрабатывает), а создадим одну PHP-страницу, вид которой изменяется в зависимости от результатов анализа данных, введенных посетителем в имеющуюся на этой странице форму.

Вывод формы

Первая функция служит для вывода формы:

<?php
function display_form() {
  global $PHP_SELF;
?>
<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>
Имя:   <INPUT TYPE=TEXT NAME="name"><BR>

Любимый сорт сыра: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie
                 <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar
                 <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella

Когда Вы предпочитаете есть сыр:
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">На завтрак
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">В обед
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">На ужин
                 <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Поздно ночью

<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">
<INPUT TYPE=SUBMIT VALUE="Thanks!">
</FORM>
<?php
}
?>

Большая часть представленного выше текста есть обычный HTML-текст, необходимый для формирования формы. Однако есть пара сложных моментов, требующих особого пояснения.

Во-первых, это переменная $PHP_SELF. $PHP_SELF - это удобная форма ссылки, ее значение равно URL текущей страницы. Мы задаем атрибуту TARGET этой формы значение $PHP_SELF, потому что мы хотим, чтобы эта страница обрабатывала форму. Используя $PHP_SELF вместо реального пути к файлу страницы, мы получаем возможность переименовывать или перемещать наш скрипт, не заботясь о внесении соответствующих изменений каждый раз, как только мы заново используем тот же кусок кода.

Кстати, строка

global $PHP_SELF;

означает, что мы хотим использовать глобальную переменную $PHP_SELF. Внутри функции переменные имеют локальную сферу действия, то есть имеют значения, отличающиеся от значений переменных с теми же самыми именами, но определенных вне этой функции. Если мы не укажем PHP, что хотим использовать глобальное значение $PHP_SELF, мы обнаружим, что $PHP_SELF будет пустым.

Во-вторых, как Вы могли заметить, мы свободно переходим в режим PHP и обратно даже внутри функции. Это полностью законно. PHP умеет игнорировать HTML-код и выделять только PHP-блоки. Это быстрее, чем оставаться в режиме PHP и организовывать вывод HTML, используя echo.

Теперь обратите внимание на атрибут NAME тега INPUT. Вы видите, что в случае, если тип поля ввода есть CHECKBOX, то после наименования поля (в данном случае times[]) стоит пара квадратных скобок, Если же тип поля ввода есть RADIO, то после имени (cheese) таких скобок нет. Это объясняется тем, что поля типа RADIO служат для выбора одного и только одного из вариантов ответа, поэтому значением переменной cheese будет одна строка. Поля типа CHECKBOX (их несколько) позволяют выбрать (или не выбрать) каждый из возможных вариантов, поэтому для сохранения ответов пользователя PHP должен запомнить их в виде массива. Добавление [] после имени переменной times и указывает на то, что в данном случае это массив, а не единичная переменная.

И, наконец, в этом куске кода имеется скрытая переменная с именем stage. Мы используем $stage чтобы сказать программе, хотим ли мы вывести форму или отобразить результаты обработки ответов.

Обработка формы

Теперь рассмотрим функцию process_form() обработки формы после ввода ответов пользователем.

<?php
function process_form() {
  global $name;
  global $cheese;
  global $times;

  if ($cheese == 'brie') { $cheese_message = 'I love brie.'; }
  elseif ($cheese == 'cheddar') { $cheese_message = 'Cheddar is awesome!'; }
  else { $cheese_message = 'Fresh mozzarella is divine.'; }

  $favorite_times = count($times);

  if ($favorite_times <= 1) {
    $times_message = 'You should eat cheese more often.';
  } elseif ($favorite_times > 1 && $favorite_times < 4) {
  $times_message = 'Those are good times to eat cheese.';
  } else {
    $times_message = 'You are eating too much cheese.';
  }

  echo "Hello $name.";
  echo "$cheese_message $times_message";
}

?>

Во-первых, так же как мы делали это с $PHP_SELF, мы считываем глобальные значения переменных, включенных в форму. Затем мы смотрим, какой сорт сыра выбрал пользователь и в соответствии с этим формируем начало выводимого на страницу текста .

Далее используется функция count() для того, чтобы подсчитать, сколько раз в день ест сыр человек, ответивший на наши вопросы. Если в предыдущем случае мы должны были сравнить ответ посетителя с каждым из возможных значений переменной $cheese, то при анализе значений переменной $favorite_times можно воспользоваться операциями сравнения "меньше чем" и "больше чем". Знаки && в условном операторе "$favorite_times > 1 && $favorite_times < 4" означают логическую операцию "И" ("and"). То есть $favorite_times должно одновременно быть больше 1 и меньше 4 для того, чтобы условие было выполнено.

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

Формируем Putting the Form Together

Теперь, когда мы имеем эти две функции, остается добавить только маленький кусочек кода для того, чтобы вызвать их в нужной последовательности. Итак, после (или ниже) записи тела функций display_form() и process_form() добавляем:

<?php

if (empty($stage)) { display_form(); }
else { process_form(); }

?>

Здесь мы вначале проверяем, задано ли какое-либо значение переменной $stage. В PHP переменная считается пустой (empty), если ее значение не задано явно (то есть ей никогда не придаются значения по-умолчанию), или ей задано пустое значение (переменной присвоено значение пусто, если она приравнена пустой строке - '', или ей присвоено значение 0). Когда посетитель впервые попадает на нашу страницу, переменная $stage пуста. Поэтому на страницу будет выводиться форма с нашими вопросами; в противном случае мы должны обработать заполненную форму.

И это все, что мы хотели сказать об обработке простых форм с помощью PHP.

С уважением, Сергей (ведущий рассылок:
Обучение и статьи по языку perl
Обучение и статьи по языку php )



 :::::   пишет 31.05.2001 @ 09:44 
Это что, чисто перевод английской статьи???
 :::::  Тарасенко Сергей пишет 01.06.2001 @ 03:07 
По моему да.Эта статья попала мне совершенно случайно от моего знакомого.
 :::::  Alexander пишет 04.06.2001 @ 11:27 
А если нужно через форму передать огромные (до 64 кб и выше) текстовой информации? То как это лучше тогда сделать. Ведь значения переменных передаются странице через URL, и не очень приятно созерцать длинный и непонятный URL в браузере (если это еще сработает).
 :::::  Смоляное Чучелко пишет 04.06.2001 @ 19:17 
2 Alexander: УРЛа ограничен то ли 2 кб, то ли в зависимости от сервера, так что для таких данных в <FORM поставь METHOD=POST, что не повлияет на остальную программу.
2 Сергей: исходная посылка, вообще говоря, неверна, по крайней мере для PHP 4. Там такое поведение задаётся хозяином сервера и, вообще говоря, отключабельно!
 :::::  Alexander пишет 05.06.2001 @ 04:16 
А пример не рабочий :-(
В примере проверяется $stage на пустость, но он же определен в форме в поле
<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">
Ведь это же одна из "фишек" PHP что поименованому полю форму автоматически соответствует переменная $filed_name
Так что проверка не прокатывает :-(
 :::::  Сергей пишет 05.06.2001 @ 07:57 
Хорошо,скоро напишу другие способы.(просто сейчас сессия,так что на это времени не хватает...) ;-)
 :::::  webbuilder пишет 05.06.2001 @ 12:28 
проверку на "пустость" stage можно обойти используя функцию isset(), то есть проверить передавалась ли вообще переменная $stage серверу или нет:

<?
if (isset($stage))
{
..... что-то выполняется
}
?>

 :::::  dina пишет 07.06.2001 @ 08:36 
Господа, а зачем создавать 2 эт-та:
<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">
<INPUT TYPE=SUBMIT VALUE="Thanks!">
когда можно обойтись одним:
<INPUT TYPE=SUBMIT VALUE="Thanks!">
добавив ему имя:
<INPUT TYPE=SUBMIT VALUE="Thanks!" name="ok">
а потом сделать проверку вместо:
if (empty($stage))
такую:
if (isset($ok))

зачем лишние формы?
 :::::  webbuilder пишет 07.06.2001 @ 13:09 
во-во..., :)
так конечно бубдет проще и лучше, и качественней ;)
 :::::  aspirant пишет 23.06.2001 @ 18:17 
Большая просьба. Подскажите как мне сделать на своём сайте форму данные с которой передавались бы на сайт http://gelezo.com.ua/boards/Kiev/
Надеюсь здесь найдутся профессионалы, которые сумеют ответить на мой вопрос.
Заранее благодарен.
 :::::  andr пишет 30.06.2001 @ 12:28 
Вот блин!
Тут нихрена не найти!
какую нить хтмлню бы по пхп4!
где все функции то описны по-нормальному,
ато всё какие то пысма ;((
ПОМОГИИИТЕ!

 :::::  Vovan пишет 16.07.2001 @ 05:08 
php.net v downloadax i sidi chitay but just on english
 :::::  iles пишет 12.08.2001 @ 06:41 
Люди, сейчас куча всяких скриптовых языков, незнаешь на чем остановиться.
Подскажите, на какай лучше ориентироваться (PHP, ASP,PERL)?
 :::::  skorpios пишет 20.09.2001 @ 20:31 
Конечно же РНР! Он довольно простой и действенный!
 :::::  Возврещение Сергея Тарасенко пишет 24.09.2001 @ 15:19 
Ну это как посмотреть...Меня заставил учить perl мой работодатель и я об этом не жалею...
 :::::  temach пишет 07.11.2001 @ 18:09 
php конечно очень, очень упрощен. Когда его начал изучать уже знал perl .
Моё мнение - лучше знать и пшп и перл . Перл на мой взгляд настоящий язык, требующий соответственного уровня интелекта. ПШП все же для лентяев, которым лень... и многое он берет на себя за вас. Например в перле данные из форм надо еще вытащить из переменных окружения, и соответственным образом подготовить их к использованию, а ПШП сразу дает все готовенькое. Это можно назвать плюсом, но все же отрицательно то что думать надо меньше. Перл тоже не очень сложен, но не для новичка.

Я отдаю преимущество Перлу , но ПШП тоже буду использовать.
 :::::  Turist пишет 21.11.2001 @ 17:00 
2 temach:
А, собственно, зачем изобретать велосипед - ПХП делает всю черновую, несушественную для сути задачи, работу и ПРЕКРАСНО! Какой смысл по сто раз переписывать один и тот же кусок обработки переменных как в Перле, что только отнимает время и никакой думственной нагрузки не несет (просто копируется в сотый раз). Ты же с удовольствием используешь готовые функции или классы, собирая модули для решения задачи, не доказывая никому, что ты тоже сам их сумеешь написать!
 :::::  blh пишет 21.11.2001 @ 17:13 
Да!
Нам не нужно лёгких побед! И вообще пора вернуться к машинным кодам, вот там на самом деле особенно не расслабишься...
 :::::  Golovoed пишет 02.12.2001 @ 05:43 
Люди, слышал выходит новый язык для веба. Называется Kurl, кнот-нибудь знает о нем? Есл да, то имеет смысл кидаться из перла и пхп на курл?
 :::::  1 пишет 09.03.2002 @ 02:47 
 :::::  Dmitry пишет 24.03.2002 @ 03:12 
Народ! Хотелось бі узнать ... как передавать значение переменной из одного фрэйма в другой ?...мне это нужно для привата в чате.... по нажатию на ссылку в канале, имя юзвера тыкается в фрейм строки ввода сообщения.....


 :::::  Alkinoy пишет 12.12.2002 @ 15:26 
Ребята, я столкнулся с надобностью генерить динамику на страничках 4 дня назад. И при помощи пшп начинает уже получаться! Хотя до этого я даже и названий таких не слышал - перл, пшп... Так что для новичка это очень гуд, а там и расти можно. Переходить на что то другое надо только когда не можешь что то сделать на старом.
А еще есть есть вопросик. Как лучше всего (но наверное и проще) проводить аутентификацию пользователей, которые заходят на сайт. А главное, как потом его отличить от того, который просто наберет url странички, не предназначенной для чужих глаз.
Заранее спасибо...
 :::::  yUAC пишет 08.01.2003 @ 01:27 
Есть такие переменные окружения, массивы HTTP_*_VARS, то есть, если тебе нужно выдрать переменную $name из COOKIE пользователя, нужно взять переменную $HTTP_COOKIE_VARS['name'] и работать уже с ней...
А можно сделать ещё проще, чтобы везде не заменять переменные, можно заменить

$name=$HTTP_COOKIE_VARS['name'];
_____________
Полезно, когда перменная является массивом. _/ Не опробован \_
 :::::  Shurik пишет 14.01.2003 @ 20:45 
ребят, я понимаю что у меня руки из жопы, но киньте сюда полный вариант готового рабочего файла выше описанного кода. НУ НЕ РАБОТАЕТ ОН, ДАЖЕ С ВАШИМИ УТОЧНЕНИЯМИ ПО-ПОВОДУ empty(); заменить на isset();
не запускает он process_form(); !!!
 :::::  mongrel пишет 23.01.2003 @ 12:16 
Shurik. не запускает process_form(); или переменные не цепляет? Вот у меня например process_form(); запустился, после добавления isset(); но перемеррые не цеплял...
 :::::  shurik пишет 22.02.2003 @ 21:20 
да да . я не правельно написал . именно не цепляет.
 :::::  zaur пишет 23.02.2003 @ 03:09 
u menya takaya problemka koro4e 3 faila iz pervoi peredayutsya peremenniye 4erez polya 2-omu falu tam k nimuje dobavlyayutsya eshe peremenniye a 3-tiy fail vivodit vse eti peremenniye s predudushnix 2 failov .
tolka posledniy fail ne vivodit peremennye s 1 -ogo faila
vo vtorom faile vmeste s formami est polya input type hidden name, kotoriy soderjit peremenniye s pevogo faila, no po kakim to neizvestnim pri4inam on ne vivoditsya vmeste speremennimi vtorogo faila.
Napishiti na milo esli ne trudno.
Zaranee blagadaryu

 :::::  Михаил пишет 04.03.2004 @ 07:46 
Настроить PHP с Apache не получается. Pliz подскажите !
 :::::  GTema пишет 22.06.2004 @ 17:23 
Лично мне помогли такие строки в Apache, однако я не сильно уверен в их корректности.

ScriptAlias /php/ "g:/php/"
AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php .phtml
Action application/x-httpd-php "/php/php.exe"
 :::::  Bob пишет 30.06.2004 @ 11:15 
Гдет оя это уже видел?!
 :::::  pilot пишет 04.08.2004 @ 20:00 
Там кто-то про curl спрашивал. Он в основном клиентский, т.е. хотя разработчики ихнии и говорят, мол на нём сервины скриты делать мона, пипл полюбому первые лет 5 будут на перле с пшп всё делать...
 :::::   пишет 28.08.2004 @ 02:22 
<?php echo "привет";?>
 :::::  Новечек пишет 29.10.2004 @ 13:54 
Читал кучу подобной инфы. Все вродебы ясно. В том числе и с этой статьей. Не где не смог найти как PHP работает в сети. видь там нужно водить url совсем другой не как в html. Переделывал много PHP нюков но не смог ни один приживить.

Может ктото подскажет как PHP внедряется в сайт?
 :::::  Desktop пишет 23.05.2006 @ 18:41 
Ужос... ни какой литературности))
 :::::  Marat пишет 05.06.2006 @ 11:14 
Здорова ребята. Подскажите пожалуйста функцию удаления файла в PHP.
 :::::  PERC пишет 05.07.2006 @ 16:44 
Привет всем!!!! умоляю помогите мне с формо и методом POST Вот какя проблема я создал свой сайт ,но работает но под чужим сайтомю мне нужно чтобы посетитель вводил пароль с моего сайта в форме, а обрабатывалась форма на чужом и довала дочтуп тоже там, но уже в моем сайте.
1)форма на проверки пароля на моем сайте работает нормально!!
2) но при отправки имени и пароля т.е данных формы на чужом сайте открывается страница на которую юзер хочет попась , но он совершенно уходит с моего сайта.
вопрос можно ли сделать так что бы посетитель когда логинился на моем сайте после успешной аунтефикации там остаыался. Что нужно вставить в форме в свойство "action=", чтобы страница ответа открывалася не сама по себе, в моем php
ИЛИ ДРУГИМИ СЛОВАМИ МНЕ НУЖНО УЗНАТЬ URL СТРАНИЦИ КОТОРАЯ ОТКРЫВАЕТСЯ ПОСЛЕ УСПЕШНОГО ЛОГИНА
БОЛЬШОЕ ВАМ ЧЕЛОВЕЧЕСКОЕ СПАСИБО ЗАРАНЕЕ!!!!!!!
 :::::  netart пишет 06.12.2006 @ 13:20 
PERC
А теперь для вставки сайта(чужого контента) в твой
<iframe src=http://www.ne_tvoi_sait.ru/ width=100% height=100% frameborder=0 scrolling=auto></iframe>

А зачем узнавать то, если логиться чувак не на твоём сайте,по сути ?
Или ты хочешь облегчить жизнь и себе и твоим клиентам, т.е. не применять криптинг на своём сайте (безопастность) и + мнимо пара логин\пароль едины для твоего и чужого сайта ?
Если так то лучше договориться тебе с админом того самого сайта.
Удачи.
 :::::  Uni пишет 13.10.2007 @ 14:36 
Какие сайты для изучения пхп посоветуете?
 :::::  skank пишет 19.12.2007 @ 12:59 
www.google.com

 :::::  Nagi-kun пишет 06.03.2009 @ 12:36 
Большое спасибо, мне помогла информация о переменных PHP и формах.
Как раз то, что нужно!
 :::::  and пишет 19.01.2013 @ 02:29 
и нахрена была нужна переменная
$PHP_SELF
?
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0319898