Лабораторная работа №1 «Основы PHP» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №1 «Основы PHP»



Лабораторная работа №1 «Основы PHP»

Программы PHP могут выполняться двумя способами: как сценарное приложение Web-сервером и как консольные программы. Поскольку, нашей задачей является программирование web-приложений, мы преимущественно будем рассматривать первый способ.

PHP, как правило, используется сугубо для программирования приложений, связанных с Интернетом. Однако, PHP можно еще использовать в качестве интерпретатора командной строки. Последнее возможно при помощи CORBA и COM интерфейсов, а также при помощи расширения PHP-GTK. При таком использовании PHP возможно решение следующих задач:

· создание приложений интерактивной командной строки;

· создание кросс-платформенных приложений при помощи библиотеки PHP-GTK;

· автоматизация некоторых задач под Windows и Linux

Рассмотрим процесс выполнения php-сценария при обращении браузера к серверу. Итак, вначале браузер запрашивает страницу с расширением.php, после чего web-сервер пропускает программу через машину PHP и выдаёт результат в виде html-кода. Причем, если взять стандартную страницу HTML, изменить расширение на.php и пропустить её через машину PHP, последняя просто перешлёт её пользователю без изменений. Чтобы включить в этот файл команды PHP, необходимо заключить команды PHP в специальные теги, нас интересует 2 вида:

Инструкция обработки XML:

<?php... ?>

Инструкция обработки сценариев HTML:

<script language = "php">...</script>

Вообще говоря, внутри какого-либо блока кода можно выйти из PHP, при условии, что дальше мы войдем в него снова и закончим код. Т.е., возможна следующая конструкция:

<? if (5<3) { echo ("<p>Hello, world!<p>"); ?> <p>Hello!</p> <? echo ("<p>Hello, world!<p>"); }?>

Команда echo в PHP применяется для вывода фактически всего, что встречается на web-страницах (текст, разметку HTML, числа).

Комментарии

PHP предоставляет несколько методов для вставки комментариев. Проще всего пользоваться двойным слэшем в стиле языка С++ (//), после чего PHP машина игнорирует все, что расположено до конца строки. Также можно пользоваться многострочными комментариями в стиле С (/*…*/). Для однострочных комментариев можно еще пользоваться символом решетки (#).

<php echo ("<p>Hello</p>"); // комментарий echo ("<p>Hello</p>"); # комментарий /*        и это тоже комментарии */ ?>

Следует помнить о том, что стили комментариев PHP действуют только внутри ограничителей PHP. Если PHP встретит эти символы комментариев вне ограничителей, то они, как и любой текст, будут помещены на html-страницу. Например:

<php echo ("<p>Hello</p>"); // нормальный комментарий?> // а вот этот комментарий отобразиться броузером. <!-- Комментарий HTML. Будет виден в исходном коде HTML, но не в браузере -->

Заметим, что комментарии можно вставлять не только после конца оператора, а, например, и вот так:

<? $a = "Hello, world"; echo strstr($a,"H"); // эту функцию мы рассмотрим позднее?>

Переменные в РНР начинаются со знака доллара ($), за которым может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой. Таким образом, допустимы следующие имена переменных: $n, $n1, $user_func_5 и т.д. В отличие от ключевых слов, имена переменных в PHP чувствительны к регистру, т.е. переменные $user, $User и $USER являются различными.

<?php $user = "Владимир"; $User = "Дмитрий"; $USER = "Юрий"; echo $user; // Владимир echo $User; // Дмитрий echo $USER; // Юрий?>

При объявлении переменных в РНР не требуется явно указывать тип переменной, при этом одна и та же переменная может иметь на протяжении программы разные типы.

Как видно из предыдущего листинга, для присвоения значения переменной необходимо воспользоваться оператором присвоения =, который позволяет инициализировать переменную. При объявлении числовых значений в качестве разделителя целого значения и дробной части выступает точка.

<?php $number = 1; $var = 3.14;?>

Внешние переменные

После того, как запрос клиента проанализирован веб-сервером и передан РНР машине, последняя устанавливает ряд переменных, которые содержат данные, относящиеся к запросу и доступны все время его выполнения. Сначала РНР извлекает переменные окружения операционной системы и создает переменные с теми же именами и значениями в окружении сценария РНР для того чтобы сценариям, расположенным на сервере были доступны особенности системы клиента. Эти переменные помещаются в ассоциативный массив $_SERVER (содержимое этого массива можно всегда посмотреть, воспользовавшись функцией print_r($_SERVER) или phpinfo()).

Затем РНР создает группу GET-переменных, которые создаются при анализе строки запроса. Строка запроса хранится в переменной $_SERVER['QUERY_STRING'] и представляет собой информацию, следующую за символом "?" в запрошенном URL. РНР разбивает строку запроса по символам & на отдельные элементы, а затем ищет в каждом из этих элементов знак "=". Если знак "=" найден, то создается переменная с именем из символов, стоящих слева от знака равенства. Рассмотрим следующую форму:

<form action = "http://localhost/PHP/test.php" method="get">HDD: <input type="text" name="HDD"/><br>CDROM: <input type="text" name="CDROM"/><br><input type="submit"/></form>

Если Вы в этой форме в строке HDD наберете, к примеру, "Maxtor", а в строке CDROM "Nec", то она сгенерирует следующую форму запроса:

http://localhost/PHP/test.php?HDD=Maxtor&CDROM=Nec

В нашем случае РНР создаст следующие переменные: $_GET['HDD'] = "Maxtor" и $_GET['CDROM'] = "Nec".

Вы можете работать с этими переменными из Вашего скрипта (у нас – test.php) как с обычными переменными. В нашем случае они просто выводятся на экран:

<? echo("<p>HDD is $_GET[HDD]</p>"); echo("<p>CDROM is $_GET[CDROM]</p>");?>

Если запрос страницы выполняется при помощи метода POST, то появляется группа POST-переменных, которые интерпретируются также и помещаются в массив $_POST.

Константы

Константы объявляются в РНР при помощи функции define():

define(CONSTANT, value)

Первый параметр этой функции – имя константы, второй – её значение. При использовании константы на неё ссылаются по имени:

<? define(CONSTANT1,15); define(CONSTANT2,"\x20"); // код пробела define(CONSTANT3,"Hello"); echo (CONSTANT1); echo (CONSTANT2); echo (CONSTANT3); ?>

По традиции имена констант пишут буквами верхнего регистра. И хотя это только традиция, мы Вам рекомендуем ей следовать, поскольку плохие программисты получаются в том числе и из тех, кто не следовал хорошим традициям J. Существует функция defined(), которая проверяет, определена ли константа:

<? define(CONSTANT,"Hello");   if (defined("CONSTANT")) { echo ("<p>CONSTANT is defined</p>"); }?>

Типы данных в РНР. Преобразование типов

Как уже было сказано, PHP предоставляет определенную гибкость в отношении типов переменных, т.е. с одной и той же переменной на протяжении программы можно работать и как со строкой, и как с числом. Однако, несмотря на это в РНР существуют набор основных типов данных, которые могут явно указываться при работе с переменными:

1. integer;

2. string;

3. boolean;

4. double;

5. array;

6. object.

Есть функция gettype(), возвращающая тип, который РНР назначил переменной:

<? $var = "5"; $var1 = 5; echo (gettype($var)); echo "<br>"; echo (gettype($var1)); ?>

В первом случае РНР вернет string, во втором integer.

Существует также функция settype(), которая явно устанавливает тип:

<? $var = "5"; echo (gettype($var)); settype($var,integer); echo "<br>"; echo (gettype($var)); ?>

Выполнение этого фрагмента кода приведет к такому же результату, как и предыдущего.

Кроме функции settype() преобразование типов в РНР можно осуществлять при помощи операторов преобразования типов. Преобразование типов осуществляется путем указания перед переменной ее нового типа, взятого в скобки:

$var = (int)$var;

Соответственно, выполнение следующего кода приведет к тому, что РНР вернет integer:

<? $var = "5"; // тип string $var = (int)$var; // преобразуем в int echo (gettype($var)); ?>

Операторы

Арифметические операторы

+ Сложение
- Вычитание
* Умножение
/ Деление
% Вычисление остатка по модулю (к примеру: 5 % 2=1)

 

Поразрядные операторы

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

& Поразрядная конъюнкция (AND)
| Поразрядная дизъюнкция (OR)
^ Поразрядное исключающее ИЛИ (XOR)
~ Поразрядное отрицание (NOT)
<< Сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда
>> Сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда

 

Пример:

<?php echo (4<<2); // равно 16     echo "<br>";     echo (5>>1); // равно 2 echo "<br>";     echo (6&5); // равно 4 echo "<br>";     echo (6|5); // равно 7 echo "<br>";     echo (6^5); // равно 3>?

Разберем первый пример. Двоичный код для 4 равен 100, при сдвиге влево на 2 разряда код 100 становится равным 10000, что соответствует десятичному значению 16. Остальные примеры могут быть разобраны аналогично. Обратим внимание на то, что сдвиг влево на n позиций эквивалентен умножению на 2n, а сдвиг вправо уменьшает соответствующее значение в 2n раз с отбрасыванием дробной части результата (поэтому 5>>1 равно 2). Основное назначение этих операторов – быстрые вычисления. Так как их поддержка осуществляется на аппаратном уровне (процессор), алгоритмы, выполненные с использованием данных операторов получаются очень производительными.

Логические операторы

or или || ИЛИ
Xor исключающее ИЛИ
and или && И
! НЕ

 

Операторы этой группы, в отличие от поразрядных, работают с логическими переменными (boolean) и интенсивно используются в управляющих конструкциях: циклы и условия. Логические переменные, или более правильно, переменные типа Boolean имеют лишь два значения: true(истина) и false(ложь). В выражениях true и false можно заменить на 1 (любое отличное от 0 число) и 0, соответственно.

Логически операторы для переменных типа Boolean выполняют роль операторов сложения, вычитания для обычных переменных. Оператор if (cond) проверяет условие cond, если его значение true – выполняется код в фигурных скобках, следующий за if, если false – код после оператора else. Если cond равен false – всё наоборот.

<?php $flag = true; // Истина if ($flag) { echo "<p>Переменная flag имеет значение true</p>"; } else { echo "<p>Переменная flag имеет значение false</p>"; }?>

Результаты работы скрипта выглядят следующим образом:

Переменная flag имеет значение true

Если теперь заменить строчку

$flag = true; // Истина на $flag = false; // Ложь

Результат, выдаваемый тэгом измениться:

Переменная flag имеет значение false

Т.е. мы зашли в блок else, так как в операторе if условие ложно.

Когда условие одно, как видите, всё просто. Когда условий больше - в дело вступают логические операторы:

<?php $flag1 = true; // Истина $flag2 = true; // Истина if ($flag1 && $flag2) // И $flag1 И $flag2 истины { echo "<p>Условие: true (Оба флага истины)</p>";   // Да } else { echo "<p>Условие: false (Один из флагов ложен)</p>";         // Нет, один или оба ложны }?>

Этот скрипт выведет: Условие: true (Оба флага истины). Если хотя бы один из операторов окажется равным false (или оба сразу) – будет выведено: Условие: false (Один из флагов ложен).

Обязательно попробуйте поиграть с условиями: если вы не будете разбираться в условных операторах – Вы никогда не будете хорошим программистом ни на одном языке программирования. Если Вы считаете, что Вам не нужны условные операторы – Вам не нужен язык программирования.

Заменим && (И) на || (ИЛИ)

<?php $flag1 = true; // Истина $flag2 = false; // Ложь if ($flag1 || $flag2)       // Хоть кто-то из двух флагов($flag1 $flag2) истинен { echo "<p>Условие: true (Один из флагов истин)</p>";       // Да } else { echo "<p>Условие: false (Оба флага ложны)</p>";       // Нет оба имеют значение false }?>

Опять получаем: Условие: true.

Для И и ИЛИ, как видим, возможны два варианта операторов, причем эти операторы с разными приоритетами. Приоритетность выполнения логических операторов: or > xor > and > || > && >! Иногда в условиях удобно использовать скобки для явного задания приоритета:

<?php $flag1 = true; $flag2 = true; $flag3 = false; if ($flag1 && $flag2 || $flag3) { echo "<p>Условие истинно<p>"; } else { echo "<p>Условие ложно<p>"; }?>

Результатом будет вывод фразы «Условие истинно», так как согласно приоритету исполнения сначала выполняется оператор &&, так как оба флага равны true – возвращается true, затем это выражение сравнивается с $flag3 (true || $flag3) – что возвращает тоже true, так как одно из сравниваемых равно true.

Если же мы запишем

<?php $flag1 = true; $flag2 = true; $flag3 = false; if ($flag1 && ($flag2 && $flag3)) { echo "<p>Условие истинно<p>"; } else { echo "<p>Условие ложно<p>"; }?>

результатом будет «Условие ложно».

Вообще программисты не любят запоминать порядок приоритетов, поэтому для того чтобы Ваш код легко читался (в том числе и Вами) лучше всегда использовать скобки. Т.е. в первом скрипте лучше записать if (($flag1 && $flag2) || $flag3) – тогда сразу становиться понятно, что имеется ввиду.

Иногда нужно проверить условие безальтернативно, например, на ложность или истинность. Допустим, функция (func()) возвращает истину или ложь и в зависимости от этого нужно вывести на страничку те или иные теги. Например, функция mysql_query($query) – возвращает true если запрос к базе данных mySQL, размещённый в строке $query успешно выполнился и false – в противном случае.

Если Вам нужно среагировать только на удачное обращение, Вы можете записать:

<?php if (mysql_query($query)) { echo "<p>Данные успешно занесены в базу данных.<p>"; }?>

Если Вам нужно среагировать только на не удачные обращения, Вы, конечно, можете записать:

<?php if (mysql_query($query)) {} else { echo "<p>Данные не были занесены в базу данных.<p>"; }?>

Но это не элегантный, запутывающий способ – здесь самое время воспользоваться оператором отрицания:!, применение которого к переменной меняет её значение с true на false, а false на true:

<?php if (!mysql_query($query)) { echo "<p>Данные не были занесены в базу данных.<p>"; }?>

Задания к лабораторной работе №1:

1. Вычислить дробную часть среднего геометрического трех заданных положительных чисел.

2. По заданным коэффициентам и правым частям уравнений системы найти ее решение в предположении, что определитель системы не равен нулю.

3. Вычислить длину окружности, площадь круга и бъем шара одного и того же заданного радиуса.

4. Вычислить периметр и площадь прямоугольного треугольника по длинам двух катетов.

5. По координатам трех вершин некоторого треугольника найти его площадь и периметр.

6. По длинам двух сторон некоторого треугольника и углу (в градусах) между ними найти длину третьей стороны и площадь этого треугольника.

7. Найти произведение цифр заданного четырехзначного числа.

8. Определить число, полученное выписыванием в обратном порядке цифр заданного трехзначного числа.

9. По координатам четырех вершин некоторого прямоугольника найти его площадь и периметр.

10. Вычислить объём призмы, боковые грани которой квадраты, а основанием служит равносторонний треугольник, вписанный в круг радиуса R.

Переключатель switch

Переключатель switch является наиболее удобным средством для организации мультиветвления. Синтаксис переключателя таков:

switch (expression) // переключающее выражение{ case value1: // константное выражение 1 statements; // блок операторов break; case value2: // константное выражение 2 statements; break; default:                    statements; }

Управляющая структура switch передает управление тому из помеченных case операторов, для которого значение константного выражения совпадает со значением переключающего выражения. Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, помеченному меткой default. В каждом переключателе может быть не более одной метки default, однако она может отсутствовать вообще. Приведем пример программы с переключателем. В этой программе выводятся названия нечетных целых десятичных цифр от 1 до 9 не меньше заданной, в зависимости от числа, указанного в форме test.html. Форма test.html не отличается от той, что мы уже использовали:

<form action = "http://localhost/PHP/chapt2/switch.php" method="get"> number: <input type="text" name="number"/><br> <input type="submit"/></form> <?switch ($number) {case 1: echo ("one"); case 2: echo ("two"); case 3: echo ("free"); case 4: echo ("four"); case 5: echo ("five"); case 6: echo ("six"); case 7: echo ("seven"); case 8: echo ("eight"); case 9: echo ("nine"); break; default: echo ("This isn't number or number is > 9 or < 1"); }?>

Так же, как и в случае условного оператора для переключателей допустимы любые степени вложенности, однако злоупотреблять этим без особой на то необходимости также не следует.

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

Как видим, после конструкции switch приведен составной оператор, однако это совершенно не обязательно – после switch может находиться любой оператор, помеченный служебным словом case.

Заметим также, что в PHP в качестве меток case могут использоваться не только литералы, но и сами метки могут быть переменными. В качестве меток case в PHP не могут выступать только массивы и объекты.

Задания к лабораторной работе №2:

1. Записать указанное действие в виде одного условного оператора:

2. Записать указанное действие в виде одного условного оператора: перераспределить значения переменных x и y так, чтобы в x оказалось большее из этих значений, а в y - меньшее;

3. Записать указанное действие в виде одного условного оператора: переменной a присвоить номер четверти плоскости, в которой находится точка с координатами x и y ().

4. Записать указанное действие в виде одного условного оператора: известно, что из четырех чисел , одно отлично от трех других, равных между собой; присвоить номер этого числа переменной n.

5. Записать последовательность операторов для решения указанной задачи: по номеру y (y>0) некоторого года определить номер его столетия (учесть, что, к примеру, началом 20 столетия был 1901, а не 1900).

6. Записать последовательность операторов для решения указанной задачи: считая, что стандартные функции sin и cos применимы только к аргументам из отрезка [0, p /2], вычислить y=sin x для произвольного числа x;

7. Если значение переменной w не равно 0 и при этом котангенс от w меньше 0.5, тогда поменять знак у w, а если значение w равно 0, тогда присвоить w значение 1.

8. Написать программу для решения указанной задачи: даны числа a, b, c (a 0). Найти вещественные корни уравнения ax2+bx4+c=0. Если корней нет, то сообщить об этом;

9. Если точка M(x,y) принадлежит внутренней области треугольника с вершинами A(a,0), B(0,b), O(0,0), то напечатать его площадь, в противном случае его периметр (a>0,b>0).

10. Если треугольник со сторонами a,b,c является равнобедренным, то найти его площадь, в противном случае найти его периметр.

While

Оператор while называется оператором цикла с предусловием. При входе в цикл вычисляется выражение условие, и, если его значение отлично от нуля, выполняется тело цикла. Затем вычисления выражения условия и операторов тела цикла выполняется до тех пор, пока значение выражения условия не станет равным нулю. Оператором while удобно пользоваться для просмотра всевозможных последовательностей, если в конце них находится заранее известный символ. (Это очень удобно в C++, к примеру для определения длины строки, поскольку в С++, по определению, строка есть последовательность символов типа char, заканчивающаяся нулевым символом).

Пример простейшего цикла while:

<? $var = 5; $i = 0; while (++$i <= $var) { echo ($i); echo ('<br>');     }?>

Этот код выдает в окне браузера цифры от одного до пяти:

  1 2 3 4 5

Для выхода из цикла применяется оператор break. При обнаружении этого оператора текущая итерация цикла прекращается, и последующие итерации не происходят. При выполнении следующего примере, несмотря на то, что переменная $var = 7, в окне браузера появятся цифры от 1 до 3.

<? $var = 7; $i = 0; while (++$i <= $var) { echo ($i); echo ('<br>'); if ($i==3) break; }?>

Иногда бывает нужно прервать только текущую итерацию, и перейти сразу к следующей. Для этого применяется оператор continue:

<? $var = 7; $i = 0; while (++$i <= $var) { if ($i= =5) {     continue; } echo ($i); echo ('<br>'); }?>

В этом примере выводятся цифры от 1 до 7, кроме цифры 5:

  1 2 3 4 6 7

Заметим, что если Вы условный оператор поставите после операторов echo, код будет ошибочным, и выведутся все цифры от 1 до 7, поскольку проверка условия выхода из цикла на данной итерации, будет происходить уже после выполнения этой итерации.

Do…while

Этот оператор называется оператором цикла с постусловием. При входе в цикл в любом случае выполняется тело цикла (т.е. цикл всегда будет выполнен хотя бы один раз), затем вычисляется условие, и если оно не равно 0, вновь выполняется тело цикла.

<? $var = 5; $i = 0; do { echo ($i); echo ('<br>');     } while (++$i <= $var) ?>

Результат:

  0 1 2 3 4 5

Цикл с постусловием бывает полезен при обработке некоторых последовательностей, когда обработку нужно заканчивать не до, а после появления концевого признака.

В следующем скрипте, мы по традиции выведем числа от 0 до 5:

<? $var = 5; $i = 0; for ($i = 0; $i <= $var; $i++) { echo ($i); echo ('<br>'); }?>

Результат аналогичен, показанному на предыдущем рисунке.

For

Как уже говорилось, итерационный цикл имеет следующий формат:

for (expression1;expression2;expression3) { statements; }

Здесь expression1 (инициализация цикла) – последовательность определений и выражений, разделяемая запятыми. Все выражения, входящие в инициализацию, вычисляются только один раз при входе в цикл. Как правило, здесь устанавливаются начальные значения счетчиков и параметров цикла. Смысл выражения-условия (expression2) такой же как и у циклов с пред- и постусловиями. При отсутствии выражения-условия предполагается, что его значение всегда истинно. Выражения expression3 вычисляются в конце каждой итерации после выполнения тела цикла.

В следующем скрипте, мы по традиции выведем числа от 0 до 5:

<? $var = 5; $i = 0; for ($i = 0; $i <= $var; $i++) { echo ($i); echo ('<br>'); }?>

 

Задания для лабораторной работы №3:

1. Вычислить n!,n!!.

2. Вычислить 10!, используя все три вида циклов.

3. Найти f-первое число Фибоначчи, большее m (m>1).

4. Вычислить y=sin1+sin1.1+sin1.2+...+sin2.

5. Напечатать все простые делители заданного натурального числа.

6. Определить, является ли заданное число палиндромом, т.е. таким, десятичная запись которого читается одинаково слева направо и справа налево.

7. Вычислить s- сумму квадратов всех целых чисел, попадающих в интервал (ln(x),exp(x)),x>1.

8. Вычислить y=1!+2!+3!+...+n! (n>1).

9. Вычислить k- количество точек с целочисленными координатами попадающих в круг радиуса R (R>0) с центром в начале координат.

10. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр (операции деления не использовать).

 

Функция htmlspecialchars

Вообще говоря, эта функция относится к функциям преобразования символов. Эту функция делает одну простую, но важную вещь – производит преобразование спецсимволов в их HTML эквиваленты. Попросту говоря, эта функция гарантирует, что если Вы вдруг вздумаете написать в гостевой книге или на форуме какой-то код (php, javascript и т.д.) он отобразиться совершенно нормально, но выполняться не будет! Т.е. функцию надо применять, если нужно вывести в браузере какой-то код. Кроме того, эта функция избавляет Вас от людей, которым нечем заняться кроме как писать в Ваших формах ввода какие либо скрипты. Ну а теперь, собственно, о функции.

Синтаксис:

string htmlspecialchars ( string str [, int quote_style [, string charset]] );

Первый аргумент – строка, в которой надо выполнить преобразование. В качестве второго необязательного аргумента принимается константа, задающая режим преобразования кавычек. По умолчанию, используется ENT_COMPAT, преобразующая двойные кавычки, при этом одиночные остаются без изменений. В режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки. а в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений. Третий необязательный аргумент принимает строку, представляющую набор символов, используемых в преобразовании (по умолчанию ISO-8859-1).

К примеру, если Вы обрабатываете какое-то сообщение $msg формы, то обработка его функцией htmlspecialchars()возможна следующим образом:

$msg = htmlspecialchars ( $msg );

Давайте напишем примитивный php скрипт, который будет отображать данные, вводимые в форме.

<? $action = $_POST["action"]; if ( empty($action )) {?> <HTML> <HEAD> <TITLE>Примерчик</TITLE> </HEAD> <BODY> <center> <table border=0> <form action=test1.php method=post>    <input type=hidden name=action value=post>    <tr><td colspan=2>Сообщение<br><textarea cols=50 rows=8 name=msg>    <? echo $msg; ?>     </textarea></td></tr>    <tr><td colspan=2><input type=submit value='Добавить'></td></tr> </form> </table> </center> </BODY> </HTML> <? }?>

Ничего сложного, просто форма для ввода сообщения. Выводится и обрабатывается введенное сообщение файлом, указанным action’е формы (test1.php). Код, написанный в этом файле тоже прост:

<? $msg = substr ( $_POST["msg"],0,1024 ); $msg = htmlspecialchars ( $msg ); print "<P>".$msg."</P>\n"; ?>

Вроде как все понятно. Выделяем из переменной $_POST сообщение (о функции substr() смотрите чуть ниже), обрабатываем это сообщение функцией htmlspecialchars() и выводим.

А теперь давайте немного пошутим, и введем в форму для вода сообщения вместо безобидного текста вот такой javascript-код (пока тоже безобидный):

<Script Language="JavaScript"> alert("Приветик!"); // функция вывода в JavaScript </Script>

Т.е. наша форма примет следующий вид:

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

А вот если, мы не обработали сообщение функцией htmlspecialchars(), то мы увидим уже не текст скрипта, а результат его выполнения:

Функции поиска в тексте

Substr()

Синтаксис:

string substr ( string string, int start[, int length] )

Эта функция возвращает часть строки. Первый аргумент – исходная строка; второй – положение в строке, которую надо вернуть, первого символа (отсчет начинается с нуля); третий – длина строки в символах, которую надо вернуть. Если третий аргумент не указан, то возвращается вся оставшаяся часть строки.

Пример:

<? $string = substr("Hello, world!", 6, 1); echo ( $string ); ?>

Результат выполнения – символ "w". Если же третий параметр не указывать, т.е. написать
$string = substr("Hello, world!", 6);

то возвратиться подстрока "world!".

 

Strpos()

Синтаксис:

string strpos(string haystack, string needle[, int offset])

Эта функция обеспечивает действие, обратное функции substr. Т.е. она возвращает позицию в строке haystack, в которой найдена переданная ей подстрока needle. Т.е. следующий скрипт

<? $string = strpos ( "Hello, world!", "world" ); echo( $string ); ?>

вернет нам число 7.

Необязательный параметр offset позволяет указать в строке позицию, с которой надо начинать поиск:

 

Strrpos()

Синтаксис:

string strrpos ( string haystack, string needle )

Эта функция ищет в строке haystack последнюю позицию, где встречается символ needle.

 

Strstr()

Синтаксис:

string strstr ( string haystack, string needle )

Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца строки. В случае неудачи функция возвращает false.

Пример:

<? $url = "http://www.softtime.ru"; $www = strstr($url,"w"); echo ( $www ); ?>

Результат: www.softtime.ru

Эта функция чувствительна к регистру. Заметим также, что в случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

 

Strchr()

Синтаксис:

string strchr ( string haystack, string needle )

Данная функция работает абсолютно идентично функции strstr():

<? $url = "http://www.softtime.ru"; $www = strstr($url,"w"); echo ( $www ); ?>

Результат: www.softtime.ru

 

Stristr()

Синтаксис:

string stristr ( string haystack, string needle )

Эта функция работает абсолютно аналогично функции strstr(), только является нечувствительной к регистру.

 

Strrchr()

Синтаксис:

string strrchr ( string haystack, string needle )

А эта функция отличается от аналогичных ей тем, что осуществляет поиск последнего вхождения подстроки. Т.е. функция strrchr() возвращает участок строки, заданной в параметре haystack, начиная с последнего фрагмента, указанного в параметре needle и до конца строки. В случае неудачи возвращает false. Чувствительна к регистру. В случае если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.

Давайте посмотрим, какая у нас директория прописана последней в переменной окружения $PATH:

<p> <font color=red> Это все, что у меня есть:)</font></p> <? echo ( $PATH ); ?> <p> <font color=red> А это – из последнего:</font></p> <? $dir = substr ( strrchr($PATH, ";"), 1 ); echo ( $dir ); ?>

 

substr_count()

Синтаксис:

int substr_count ( string haystack, string needle )

Функция substr_count() находит количество вхождений фрагмента в строку. Она возвращает число фрагментов needle, присутствующих в строке haystack.

Пример:

<? $str = "dfhd@ffs@dfskfk@asas"; $substr_count = substr_count ( $str,"@" ); echo ( $substr_count ); ?>

Результат: 3.

 

Strspn()

Синтаксис:

int strspn ( string str1, string str2 )

Функция strspn() определяет присутствие начальных символов в строке. Она возвращает длину начального фрагмента строки str1, состоящего полностью из символов, которые есть в строке str2.

Пример:

<? $str = "dfhd@ffs@dfskfk@asas"; $substr_count = strspn ( $str,"df" ); echo ( $substr_count ); ?>

Результат: 2.

 

Strcspn()

Синтаксис:

int strcspn ( string str1, string str2 )

Обратная функции strspn() функция strcspn() Определяет отсутствие начальных символов в строке.

Функция strcspn() возвращает длину начального фрагмента строки str1, состоящего полностью не из символов, которые есть в строке str2.

Strlen()

возвращает длину строки, которую принимает в качестве аргумента:

<? $string = "Hello, world!!!"; $string_len = strlen($string); echo ( $string_len ); ?>

Chr()

Эта функция принимает в качестве аргумента ASCII код символа и возвращает соответствующий этому коду фактический символ:

<? $str = chr(36); echo ( $str ); // возвращает символ "$"?>

Ord()

Выполняет действие, обратное функции chr():

<? $str = ord('$'); echo( $str ); // возвращает 36?>

Trim-функции (функции удаления пробельных символов)

Это очень полезная группа функций, без которых сложно обойтись при работе со строками. К пробельным символам относятся символы "\n", "\r", "\t", "\v", "\0" и собственно пробел. Особенно часто мы с этими функциями будем работать при изучении файлового ввода-вывода.

Trim()

Эта функция принимает в качестве своего единственного аргумента строку, и удаляет из нее пробелы слева и справа.

Пример:

<? $string = trim(" Hello, world! "); ?>

Давайте для того, чтобы убедиться, что эта функция нас не обманывает, выведем ее длину до и после удаления из нее пробелов. Напишем простенький скрипт:

<? $str = " Hello, world! "; $str1 = trim(" Hello, world! "); $str_len = strlen($str); $str1_len = strlen($str1); echo( " размер исходной строки '$str' = $str_len, <br> размер строки после удаления пробелов = $str1_len" ); ?>

Ltrim(), rtrim() и chop()

Функция ltrim() удаляет из строки начальные пробельные символы (т.е., те которые слева); rtrim()– конечные пробельные символы. Функция chop() является синонимом функции rtrim().

Wordwrap()

Синтаксис:

string wordwrap ( string str [, int width [, string break [, int cut]]] )

Функция wordwrap() разбивает исходный текст на строки с определенными завершающими символами. Согласно синтаксису, эта функция разбивает блок текста str на несколько строк, которые завершаеются символами break, так, чтобы в одной строке было не более width букв. Поскольку разбиение происходит по границам слов, текст остается вполне читаемым.

К примеру:

<? $str = "Вставай, страна огромная"; $mod_str = wordwrap ( $str,5,"\t" ); echo( $mod_str );?>

 

str_replace()

Синтаксис:

string str_replace ( string from, string to, string str )

Функция str_replace() заменяет в исходной строке str одни подстроки на другие. Т.е. функция заменяет в строке str все вхождения подстроки from на to и возвращает результат. Эта функция может работать с двоичными строками.

Функция, вообще говоря, нужная. К примеру, если Вы пишите что-то типа гостевой книги, форума, и хотите, чтобы в форме ввода для выделения теста можно было пользоваться стандартными тегами HTML, Вы можете с помощью этой функции заменить символы, которые Вы выбрали для форматирования на стандартные теги НТML. К примеру:

$txt = str_replace ( "[B]","<B>",$txt );

Т.е. если Вы используете для отображения текста полужирным шрифтом символы "[B]", Вы должны их заменить на символ "<B>", используемые в НТМL.

Позже, при написании реального проекта, мы обязательно будем использовать как эту, так и многие другие, рассмотренные нами функции.

 

substr_replace()

Синтаксис:



Поделиться:


Последнее изменение этой страницы: 2020-11-28; просмотров: 662; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.1.158 (0.19 с.)