Программирование в PHP
Характеристика PHP как языка программирования для динамической генерации Web-страниц с помощью скриптов, запускаемых на Web-сервере. Синтаксис языка PHP, комплект операторов С и С+. Разработка многостраничных форм. Установка и считывание cookies в PHP.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 02.01.2015 |
Размер файла | 21,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Программирование в PHP
1. Что такое PHP?
программирование скрипт синтаксис рнр
PHP - это язык программирования для динамической генерации Web-страниц с помощью скриптов, запускаемых на Web-сервере. Вы создаете страницу с помощью PHP and HTML. Когда посетитель сайта открывает страницу, сервер выполняет включенные в html-код операторы PHP и посылает результат браузеру посетителя, точно так же, как это делается с помощью ASP или ColdFusion. Однако, в отличие от ASP или ColdFusion, PHP является продуктом с открытым исходным кодом (Open Source) и платформенно-независим. PHP работает на Windows NT и многих версиях Unix. Он может быть запущен как модуль в Apache или как исполняемая программа через CGI. В случае запуска в виде модуля Apache, PHP работает особенно легко и быстро. В этом случае отсутствуют накладные расходы, связанные с созданием процессов, поэтому результат выдается быстро, и не требуется настраивать mod_perl для уменьшения расходования памяти сервера.
Кроме различных операций с содержимым Ваших страниц, с помощью PHP Вы можете формировать HTTP-заголовки, установить cookie, управлять аутентификацией и перенаправить пользователя на другую страницу. PHP предоставляет великолепные возможности по доступу к базам данных (и ODBC), а также интеграцию с различными внешними библиотеками. Это позволяет Вам делать все - от генерации PDF-документов до грамматического разбора в XML.
Операторы PHP вставляются прямо в Ваши Web-страницы, так что нет необходимости в специальных средах разработки (IDE). Вы начинаете блок PHP-кода тегом <?php и заканчиваете его тегом ?>. (Вы можете сконфигурировать PHP так, что будут использоваться теги в стиле ASP: <% %> или теги вида <SCRIPT LANGUAGE="php"></SCRIPT>.) Все, что находится между этими тегами будет интерпретироваться как PHP-код.
2. Синтаксис языка PHP
Синтаксис языка PHP подобен синтаксису C и Perl. Вы не должны объявлять переменные до их использования. Легко создаются массивы и хэши (ассоциативные массивы). PHP даже имеет какие-то зачатки объектно-ориентированного программирования, обеспечивая удобный способ организации кода и его инкапсуляции.
Хотя PHP быстрее всего работает в том случае, когда он встроен в Apache, на Web-сайте PHP имеются интсрукции по его установке на Microsoft IIS и Netscape Enterprise Server. Если у Вас еще нет копии программного обеспечения для установки PHP, Вы можете скачать ее с официального Web-сайта. Там же Вы найдете подробное руководство, в котором описаны все функции и особенности PHP.
Синтаксис PHPС основами синтаксиса PHP Вы знакомы. Следующий код <?phpecho "Hello, World!";?> дает Hello, World!
Имена переменных обозначаются знаком $. То же самое "Hello, World!" можно получить следующим образом:
<?php$message = "Hello, World!";echo $message;?>
Конкатенация (присоединение) строк осуществляется с помощью . (точки); обычные арифметические операции определяются так, как Вы того и ожидаете:
<?php$greeting = "Hello ";$num = 3 + 2;$num++;echo "$greeting $num people!";?>
даст
Hello 6 people!
PHP имеет полный комплект операторов и они работают именно так, как Вы того ожидаете, особенно если у Вас имеется опыт работы с C или C++. При работе с PHP можно придерживаться простого правила: "Если сомневаешься, попробуй: скорее всего оно именно так и работает."
Так же, как и в Perl, строка, заключенная в двойные кавычки, означает, что встречающиеся в этой строке переменные будут заменены их значениями, в то время как если строка заключена в одинарные кавычки, такая замена не производится. Так
<?php$name = 'Susannah';$greeting_1 = "Hello, $name!";$greeting_2 = 'Hello, $name!';echo "$greeting_1\n";echo "$greeting_2\n";?>
даст
Hello, Susannah!Hello, $name!
Обратите внимание на то, что \n в строке означает переход к новой строке, совсем как в Perl или в C. Однако это работает только в тех строках, которые взяты в двойные кавычки.
Переменные PHP обеспечивает доступ к переменным окружения как к регулярным переменным (as regular variables), включая переменные окружения, которые установлены сервером для CGI-программ (даже если Вы запустили PHP как модуль). Поэтому, если на странице "http://www.domain.com/farm/cattle/cow-cow.cow.html" содержится PHP-код
<?phpecho "[$REQUEST_URI]";?>
то на выводимой странице Вы увидите [/farm/cattle/cow-cow-cow.html]
Массивы
Индексы массивов (как обычных, так и ассоциативных) задаются в квадратных скобках ([ и ]):
$fruit[0] = 'banana';$fruit[1] = 'papaya';$favorites['animal'] = 'turtle';$favorites['monster'] = 'cookie';
Если Вы присваиваете какое-то значение элементу массива, не указывая номера элемента (оставляете поле индекса пустым), PHP присоединяет объект к концу массива. Так для приведенного выше примера с массивом $fruit можно достичь того же самого результата, написав:
$fruit[] = 'banana';$fruit[] = 'papaya';
Вы можете также применять многомерные массивы:
$people['David']['shirt'] = 'blue';$people['David']['car'] = 'minivan';$people['Adam']['shirt'] = 'white';$people['Adam']['car'] = 'sedan';
Создать массив можно также путем вызова функции array():
$fruit = array('banana','papaya');$favorites = array('animal' => 'turtle', 'monster' => 'cookie);
или
$people = array ('David' => array('shirt' => 'blue', 'car' => 'minivan'), 'Adam' => array('shirt' => 'white', 'car' => 'sedan'));
Встроенная функция count() выдает число элементов в массиве.
$fruit = array('banana','papaya');print count($fruit);
выдаст
2
3.Управляющие конструкции
Вы можете использовать операторы цикла, такие как for и while. В результате выполнения оператора
for ($i = 4; $i < 8; $i++) { print "I have eaten $i bagels today.\n"; }
получим
I have eaten 4 bagels today.I have eaten 5 bagels today.I have eaten 6 bagels today.I have eaten 7 bagels today.
Тот же самый результат даст
$i = 4; while ($i < 8) { print "I have eaten $i bagels today.\n"; $i++;}
Вы можете также использовать конструкции с if и elseif:
if ($user_count > 200) { print "Сайт сейчас перегружен!";} elseif ($user_count > 100) { print "Сайт активно используется!";else { print "Сайт свободен - подключились только $user_count пользователей.";}
Сформулированное выше правило "Пробуй!" вполне применимо и в части управляющих конструкций. Вы можете использовать конструкции с switch, do...while и даже ?:.
Простая форма
Одна из наиболее удобных и приятных особенностей 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-страницу, вид которой изменяется в зависимости от результатов анализа данных, введенных посетителем в имеющуюся на этой странице форму.
4.Вывод формы
Первая функция служит для вывода формы:
<?phpfunction 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() обработки формы после ввода ответов пользователем.
<?phpfunction 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 пуста. Поэтому на страницу будет выводиться форма с нашими вопросами; в противном случае мы должны обработать заполненную форму.
5.Многостраничные формы
Таких конструкций в HTML, вообще говоря, не существует. Но, в конце концов, если мы можем создать форму на одной странице, то почему бы не создать форму размером в несколько страниц?
К сожалению, протокол HTTP не имеет встроенных механизмов переноса данных с одной страницы на другую, поскольку в нем не определено понятие серии страниц. К счастью, с помощью нескольких хитрых трюков и ряда удобных встроенных функций языка PHP мы можем обойти это ограничение без больших затруднений. Основная идея очень проста - мы сохраняем в скрытых переменных все значения, введенные посетителем в поля формы на предыдущей странице(ах) и используем их затем на последующих страницах. Таким образом, нужная информация сохраняется при переходе со страницы на страницу. Реализация этой идеи - самое первое (хотя, возможно, и не самое лучшее) решение поставленной задачи, но это самый простой способ, и он не требует использования баз данных или cookies.
Не стоит удивляться тому, что мы расширяем сферу использования переменной $state, чтобы реализовать новые возможности. По правде говоря, именно ради этого мы и затеяли всю возню с многостраничными формами, хотя гораздо проще обрабатывать формы в пределах одной страницы.
Для удобства вернемся к примеру формы, который мы рассматривали выше. Но на этот раз, нашу страницу с животрепещущими вопросами о любимых сортах сыра разобьем на две страницы.
В результате мы будем иметь три функции вместо двух. В дополнение немного изменим их названия, чтобы они соответствовали изменившемуся содержанию. Функция display_form() теперь будет называться display_name().
<?phpfunction display_name() { global $PHP_SELF;
?><FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>Name: <INPUT TYPE=TEXT NAME="name"><BR><INPUT TYPE=HIDDEN NAME="stage" VALUE="cheese"><INPUT TYPE=SUBMIT VALUE="Thanks!"></FORM><?php}?>
Она идентична ранее введенной функции за тем исключением, что мы удалили все вопросы, кроме первого, и изменили название следующего этапа на "cheese", чтобы дать более точное указание на то, что будет делаться на следующем этапе.
Далее идет функция display_cheese().
<?phpfunction display_cheese() { global $PHP_SELF; global $name;
?><FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>Ваш любимый сорт сыра: <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="name" VALUE="<?php echo htmlspecialchars($name); ?>"><INPUT TYPE=HIDDEN NAME="stage" VALUE="results"><INPUT TYPE=SUBMIT VALUE="Thanks!"></FORM><?php}?>
Этот код вам тоже уже знаком. Тут не никаких неожиданных изменений по сравнению с предыдущим вариантом. Просто, перед тем как изменить значение скрытой переменной, используемой для определения этапа перемещения по нашим страницам, мы еще запоминаем имя и значение переменной $name, то есть ту часть информации, которая была получена на предыдущем этапе. При этом мы не просто напрямую передаем это значение, а пропускаем его через функцию PHP, которая называется htmlspecialchars(). Стандарт HTML определяет четыре символа, которые не могут использоваться в других целях, кроме как в тегах для разметки документов : <, >, ", и &. По этой причине, для того чтобы убедиться, что мы не поставим браузер пользователя в затруднительное положение, мы пропускаем $name через функцию htmlspecialchars(), чтобы некто, имеющий имя "Bret & Jeff", так и остался "Brett & Jeff."
Теперь, когда передается информация, введенная в эту форму, мы не потеряем ни одной части этой информации.
В результате этого трюка у нас нет необходимости что-либо менять в функции process_form(). Мы даже не меняем название функции. И в операторе, определяющем логику отображения страниц, мы добавляем только одну строку:
<?phpif (empty($stage)) { display_name(); } elseif ($stage == 'cheese') { display_cheese(); }else { process_form(); }?>
Что мы видим? Все, что мы сделали, - добавили elseif в серединку между двумя предыдущими операторами. В этом прелесть использования переменной $stage. Если мы хотим добавить дополнительные страницы, нам нужно только написать новые функции для отображения того, что мы хотим, и еще по одной строке в оператор управления в соответствии с тем, когда эти страницы должны быть отображены.
Cookies
Примечания переводчика: 1) если Вы плохо представляете себе, что такое cookie, прочитайте очень хороший материал на эту тему Что такое cookies и как с ними работать" Андрея Аликберова 2) я не знаю русского эквивалента термину cookie (так же как и А.Аликберов), так что в тексте этот термин оставлен в английской транслитерации.
Установка и считывание cookies в PHP - это, можно сказать, подарок судьбы! Мы не хотим заниматься здесь агитацией в пользу cookie, но нельзя не сказать, что это очень удобный инструмент.
Для создания и модификации значения cookie используется функция PHP setcookie(). Функция setcookie() воспринимает до шести аргументов, в зависимости от того, как Вы собираетесь управлять значениями cookie и кто будет считывать ее значения.
Простейший способ установить cookie таков:
setcookie('name', 'bret');
Затем, для каждой последующей страницы на Вашем сайте, просматриваемой в течение данной сессии (пока пользователь не покинет сайт) переменная $name будет иметь значение 'bret' и его можно легко прочитать средствами PHP. Этот тип cookie известен как cookie-сессия, поскольку значение сохраняется в течение пользовательской сессии.
Если Вы хотите, чтобы значение cookie запоминалось браузером после того, как пользователь закончит сессию, Вы должны передать функции setcookie() третий параметр - дату истечения срока действия cookie. Поскольку PHP сформировался в основном в среде Unix, Вы должны представить время истечения срока действия cookie как число секунд, прошедших с 1 января 1970 г. Если Вы имеете опыт программирования для Unix, это не покажется Вам удивительным. Но, если Вы программировали только в среде Windows или Macintosh, Вы, может быть, удивитесь, что за чокнутый народ эти Unix-оиды.
Но не бойтесь. PHP имеет очень удобную функцию, mktime(). Вы указываете ей в качестве параметров (в указанном порядке) час, минуту, секунду, месяц, день и год, задающие тот момент времени, который Вы хотите представить в воспринимаемом UNIX формате, и mktime() возвращает Вам число секунд, прошедших с 1 января 1970 г. до указанного момента времени. Например, если Вы хотите, чтобы срок действия cookie истек 1 января 2000 г., Вы записываете:
<?php$y2k = mktime(0,0,0,1,1,2000);setcookie('name', 'bret', $y2k);?>
Если Вы хотите изменить значение cookie на новое, Вы можете просто переписать его (ее?) значение. Таким образом, даже если браузер уже посылал значение cookie серверу на одной из предыдущих страниц, вполне возможно сообщить серверу, что в действительности Вас зовут "jeff."
<?php$y2k = mktime(0,0,0,1,1,2000);setcookie('name', 'jeff', $y2k);?>
Обратите внимание на то, что при этом не меняется значение переменной $name. Оно устанавливается при загрузке страницы. Если Вы хотите чтобы значение переменной изменялось синхронно с изменением значения cookie, Вы должны изменить код следующим образом:
<?php$name = 'jeff';$y2k = mktime(0,0,0,1,1,2000);setcookie('name', $name, $y2k);?>
Следующие два параметра функции setcookie() позволяют Вам задать путь и имя домена того, кто может прочитать значение Вашего cookie. По умолчанию только страницы, расположенные в том же каталоге или ниже в структуре подкаталогов того сервера, который установил cookie, могут прочитать его (ее??) значение. Это делается из соображений безопасности. Однако, если у Вашего сервера два доменных имени: "www.domain.com" и "other.domain.com", и Ваш экаунт позволяет Вам обслуживать страницы из каталога ~/myhome, Вы должны вызывать функцию setcookie() следующим образом:
<?phpsetcookie('name', 'jeff', $y2k, '~/myhome', '.domain.com');?>
Последний параметр функции setcookie(), который мы никогда не использовали, требует, чтобы значение cookie передавалось только на те Web-сервера, которые испольуют безопасный протокол соединения, такой как SSL. Если Вам это нужно, то задайте для шестого параметра значение 1.
Удалить cookie тоже очень просто, достаточно передать функции setcookie() имя cookie и PHP сделает все остальное:
<?php setcookie('name'); ?>
В заключение нужно сделать еще одно замечание, касающееся использования cookie. В силу того, как организована обработка cookies в протоколе HTTP, необходимо установить значения всех cookie до вывода какого-либо текста. Если сделать наоборот, PHP выдаст Вам предупреждение и значение cookie не будет послано. Вот так правильно:
<?phpsetcookie('name', 'jeff');echo "Hello Everyone!";?>
А так - нет:
<?phpecho "Hello Everyone!";setcookie('name', 'jeff');?>
Время и даты
В PHP имеется целый набор удобных функций для вывода дат и времени, а также для различных преобразований данных о времени и дате.
Для того, чтобы отобразить в определенном формате дату и время, воспользуйтесь функцией date(). Для нее требуется задать два аргумента: описание формата вывода даты и указание того момента времени, информацию о котором Вы хотите вывести. Указание на момент времени дается в форме "число секунд с начала 1970 года". (Если Вы хотите вывести текущее время, Вы можете воспользоваться функцией time(), которая возвращает значение текущего времени.) Функция date() имеет массу опций форматирования, таких же как у функции strftime() в C или у функции POSIX::strftime() в Perl.
<?php$birthday_stamp = mktime(19,45,0,3,10,1975);$birthday_formatted = date('F d, Y - g:i a',$birthday_stamp);
echo "Давид родился $birthday_formatted."?>
дает
Давид родился March 10, 1975--7:45 p.m.
Конечно, если Вы имеете в виду конкретную дату, хитрые функции форматирования не нужны, поскольку Вы заранее точно знаете как должен выглядеть выводимый текст. Эти функции нужны, к примеру, в том случае, когда Вы выводите часть информации из заполненной пользователем формы, в которой пользователь должен был ввести дату:
<SELECT NAME="when"><?php$d = time();for ($i = 0; $i < 10; $i++) {echo '<OPTION VALUE="'.$d.'">'.date('F d',$d);$d += 86400;}?></SELECT>
Этот кусок кода служит для вывода на экран списка выбора, включающего 10 вариантов ответа -- сегодня и каждый из последующих 9 дней. До начала выполнения цикла мы сохраняем текущее время в переменной $d. В каждом варианте выбора, задаваемом строкой <OPTION>, значение "value" устанавливается равным соответствующей временной отметке в формате Unix, а на экран выводится месяц и день ("July 27," "July 28," и так далее.) После вывода каждой даты (каждой строки <OPTION>), значение $d увеличивается на 86,400 (столько секунд в сутках -- 24 часа * 60 минут * 60 секунд).
Применяя функции mktime() и date() Вы можете сформировать и вывести любую информацию, производную от введенной пользователем даты. Предположим, что Вы хотите определить, каким числом будет первая суббота (или любой другой день недели) после указанной даты. Во-первых, напишем функцию, которая будет выдавать соответствующую форму запроса:
<?php
function display_form() { global $PHP_SELF;
$dotw = array('Sunday','Monday','Tuesday','Wednesday','Thursday', 'Friday','Saturday');$months = array( 1 => 'January','February','March','April','May','June', 'July','August','September','October','November','December');?><FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>Find the first <SELECT NAME="dotw"><?phpfor ($i = 0; $i < 7; $i++) { echo "<OPTION> $dotw[$i]";}echo '</SELECT> after <SELECT NAME="month">';for ($i = 1; $i <= 12; $i++) { echo "<OPTION VALUE=\"$i\"> $months[$i]";}echo '</SELECT> <SELECT NAME="day">';for ($i = 1; $i <= 31; $i++) { echo "<OPTION> $i";}echo '</SELECT>, <SELECT NAME="year">';$start_year = date('Y') - 10;$end_year = $start_year + 20;for ($i = $start_year; $i <= $end_year; $i++) { echo "<OPTION> $i";}echo '<INPUT TYPE="HIDDEN" NAME="stage" VALUE="process">';echo '</SELECT> <INPUT TYPE="SUBMIT" VALUE="Do it!"7></FORM>';}
?>
В этой функции очень мало таких моментов, которые мы еще не обсуждали. Массив $months записан немного по-другому, потому что мы хотим, чтобы индекс массива начинался с 1, а не с 0. Основную часть этой формы гораздо легче сформировать программно, вместо того, чтобы перечислять все значения элементов, так что единственная часть display_form(), которая формируется не в режиме PHP, - это строка в самом начале формы. Задание значений переменных $start_year и $end_year с помощью date('Y') служит для определения границ интервала времени, начинающегося за 10 лет до текущего года и заканчивающегося через 20 лет после него.
А теперь напишем функцию для обработки формы:
<?php
function process_form() { global $dotw; global $month; global $day; global $year; $timestamp = mktime(0,0,0,$month,$day,$year);
$next_dotw = ''; $next_timestamp = $timestamp;
while ($next_dotw != $dotw) { $next_timestamp += 86400; $next_dotw = date('l',$next_timestamp); }
$formatted_first = date('F d, Y',$timestamp); $formatted_next = date('F d, Y',$next_timestamp); echo "The first $dotw after $formatted_first is $formatted_next.";}?>
Во-первых, преобразуем введенную дату в формат, принятый в Unix. Если Вы хотите проявить осторожность, Вы можете здесь дополнительно проверить, попадает ли введенное значение в определенные рамки, хотя мы здесь такой необходимости не видим.
Затем организуется цикл перехода к следующему дню недели, пока значение "next day" не совпадет с днем недели, указанным пользователем. Пока они различаются, значение "next day" увеличивается на 86400 секунд (вы помните, это равно 24 часа * 60 минут * 60 секунд) название дня недели перевычисляется.
Когда эти два значения совпадут, process_form() выдаст следующее сообщение:
The first Sunday after June 25, 1999 is June 27, 1999.
Осталось только записать оператор, связывающий эти две функции воедино:
<?php
if (empty($stage)) { display_form(); }else { process_form(); }
?>
Код для обработки даты и времени часто должен быть более изощренным, чем в приведенном примере, для того, например, чтобы обрабатывать переход на летнее время или временные зоны. Однако функции date() и mktime() все равно остаются основными инструментами для преобразования меток времени из формата, принятого в Unix, в понятный человеку формат и обратно. Функции date() и mktime() оперируют с отметками времени в локальной временной зоне Вашей машины. Если Вы хотите оперировать с временем по Гринвичу (Greenwich Mean Time - GMT), Вы можете использовать gmdate() и gmmktime().
Например, если Вы (и Ваш компьютер) живете во временном поясе, в котором время отстает от Гринвича на 4 часа, Вы можете написать:
<?php
$today = mktime(12,0,0,6,25,1999);echo 'У нас сейчас '.date('g:i:s a, F d, Y',$today);echo '';echo 'По Гринвичу сейчас '.gmdate('g:i:s a, F d, Y',$today);
?>
Это код выдает следующее сообщение:
У нас сейчас 12:00:00 pm, June 25, 1999По Гринвичу сейчас 4:00:00 pm, June 25, 1999
Размещено на Allbest.ru
Подобные документы
Производственная функция и ее свойства и экономическое содержание. Краткая история PHP - языка программирования, используемого на стороне WEB-сервера для динамической генерации HTML-страниц. Возможности и примеры использования MySQL (сервера баз данных).
курсовая работа [572,4 K], добавлен 15.05.2015Язык программирования Visual Basic: краткая история возникновения, значение и общая характеристика. Изучение основных свойств Visual Basic, синтаксис языка. Обзор ключевых операторов Visual Basic, пользовательские процедуры и функции данного языка.
контрольная работа [36,4 K], добавлен 23.07.2014Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Знакомство с основами логического программирования на примере языка Prolog. Синтаксис его основных команд. Генеалогическое дерево с использованием предикатов. Хорновская логическая программа. Основные синтаксические объекты: атомы, константы и переменные.
практическая работа [832,7 K], добавлен 20.11.2015Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.
курсовая работа [111,6 K], добавлен 11.06.2010Понятие и общая характеристика языка программирования РНР, принципы и этапы его работы, синтаксис и ассоциируемые массивы. Обработка исключений в языке Java. Работа с базами данных с помощью JDBC. Изучение порядка разработки графического интерфейса.
презентация [192,3 K], добавлен 13.06.2014Понятие и специфические особенности языка программирования Си, история его создания. Интегрированная система Borland C. Процесс программирования с помощью данного языка. Графические примитивы в языках программирования. Преобразования на плоскости.
курс лекций [782,2 K], добавлен 04.10.2011Логические конструкции в системе программирования Паскаль. Команды языка программирования, использование функций, процедур. Постановка и решение задач механики в среде системы Паскаль. Задачи статики, кинематики, динамики решаемые с помощью языка Паскаль.
курсовая работа [290,9 K], добавлен 05.12.2008Базовый синтаксис языка программирования С#. Объявление переменных и присваивание им значений. Управление порядком выполнения программы. Выполнение преобразований с помощью команд преобразования. Определение классов, конструктора, работа с файлами.
курс лекций [692,5 K], добавлен 23.11.2009Исследование возможностей и областей использования языка программирования JavaScript. Сравнительный анализ языков программирования JavaScript и PHP. Разработка интерактивного Web-приложения на примере теста по теме "Программирование на языке Delphi".
практическая работа [26,0 K], добавлен 04.02.2015