Transcript php

php
• <? собственно скрипт ;?>
• <?php скрипт ;?>
• <script language="php"> сам скрипт
</script>
вывод
• <?
• echo "Сейчас мы проходим урок 1";
• ?>
присваивание
• <?
• $A=7.135;
$a=15;
• $mess4="Четверг";
echo "Сегодня $mess4, $a -ое" ;
$9sad=194 ;
• //Неправильное имя переменной
?>
• <HTML>
<form action= "www.ваш_домен.ru/test.php"
method="post">
Ваше имя
• <input type="text" name="name">
• <br>
Ваша фамилия
• <input type="text" name="fam">
• <br>
<input type="submit" value="Да!">
</form>
• </HTML>
test.php
• <?
• echo "Поздравляю, $name $fam,<br>Вы
только что выиграли
1 000 000 японский йен. Забрать вы их
можете в г.Токио, улица Красных
Самураев, д.15" ;
• ?>
• что данный пример будет работать
только если в настройках PHP (они
хранятся в файле php.ini) в качестве
значения параметра "register_globals"
установлено "On".
• <Input type="TEXT">
• <TextArea>
• <SELECT>
•
Вариант 1
<Input type="TEXT">
<TextArea>
• Два схожих элемента формы,
предназначенные для ввода текста. В
скрипт значения передаются
следующим образом: значение
атрибута name становится именем
переменной, а введенные в элемент
данные - её значением этой
переменной.
<SELECT>
• <form ...>
• <select name="variants">
<option value="1">Вариант1</option>
<option value="2">Вариант 2</option>
<option value="etc">и т.д.</option>
</select>
• </form>
<Input Type="CheckBox">
• В случае установки флажка в
обработчик передается переменная с
именем, соответствующим имени
самого checkbox, со значением On.
Если checkbox пуст, то в скрипте эта
перенная вообще не будет определена.
<Input type="Radio">
• <form ...>
<Input type="radio" name="var"
value="1">Вариант 1
<Input type="radio" name="var"
value="variant_2">Вариант 2
</form>
<Input type="HIDDEN">
• Невидимый элемент формы, но тем не
менее несущий значение в скрипт.
Типичный пример - двухстраничные
формы, где все данные формы с первой
страницы заносятся в Hidden-элементы
формы со второй страницы.
<Input type="SUBMIT">
<Input type="Image"
src="адрес">
• Image имеет одну особенность: этот
элемент может передавать скрипту два
значения - координаты X и Y пикселя
изображения, на который был совершен
клик.
• $HTTP_GET_VARS
$HTTP_POST_VARS
• <? print_r ($HTTP_POST_VARS); ?>
массив (array)
• $names[0] = "Вася";
$names[1] = "Маша";
// и так все другие элементы
• $names=array(0=>"Вася", 1=>"Маша", "Дима",
"Лена","Андрей");
/* в способе выше необязательно писать 0=>... и
1=>..., так как им автоматически присваиваются эти
индексы по порядку */
• $names[] = "Вася"; /* если индекс не указан,
присваивается индекс, на единицу больший
максимального индекса до операции*/
$names[] = "Маша";
• $a["мебель"] = "диван";
$fruits = array( 'банан' => 'желтый',
"помидор" => "красный" );
$months = array( array( 'январь',
'февраль' ), "весна" =>
array("март","апрель","май"));
Оператор условия IF
• IF (условие) {
операции, выполняющиеся в случае,
если условие верно ;
} else {
операции, выполняющиеся при
неверном условии ;
}
• Условием может быть любое
выражение, способное возвращать
значения либо TRUE (правда), либо
FALSE (ложь). Чаще всего в условии
используются операторы сравнения,
например $a>0
Операторы
Значение
==
!= , либо <>
<
>
<=
>=
Проверка на равенство
Не равно
Меньше
Больше
Меньше или равно
Больше или равно
Операторы
Значение
&& или AND
|| или OR
XOR
! (напр. !$a)
Условие верно, если два
выражения верны
Условие верно, если
хотя бы одно выражение
верно
Верно, если только одно
выражение верно
Условие верно, если
выражение неверно
• if ( $a > 3 && $a <= 20 && $a != 5) {
$result = $a * $b ;
echo "Умножаем";
} elseif ( ($a > 20 || $a < 3 ) && $b ) {
/* $b - то же самое, что и $b != 0 */
$result = $a / $b ;
echo "Делим";
} else echo "Invalid number" ;
Оператор выбора SWITCH
• switch (переменная или выражение) {
case условие :
команды ;
break;
case условие :
команды ;
break;
// и так далее
}
• оператор SWITCH заменяет
последовательность операторв IF...
ELSEIF... ELSEIF и так далее
• switch ( $a ) {
case (int)$a:
echo "Число $a является целым" ;
break;
case "0" :
echo "Число $a равно нулю" ;
break;
default :
echo "Число $a не равно нулю"; //default
- все другие значения
break;
}
Цикл FOR
• for (выражение 1; выражение 2;
выражение 3) {
команды цикла ;
}
• Цикл FOR выполняет команды
заданное количество раз. Как только
выражения начинают противоречить
друг другу, цикл прекращает свою
работу
Выражения
$a += 2 или $a -= 3
$a *= 10 или $a /=5
$a++ или $a-++$a или --$a
Эквивалент
$a = $a + 2 или $a = $a - 3
$a = $a * 10 или $a = $a / 5
$a = $a + 1 или $a= $a - 1
$a = $a + 1 или $a= $a - 1
• Отличие последних двух выражений
заключается в том, что при
использовании выражения типа $a++
PHP сначала берет оригинальное
значение, а затем увеличивает его на
единицу. А при использовании
выражения вида ++$a значение
переменной сначала увеличивается, а
затем уже берется это увеличенное
значение
• <?
$a=2;
$a++;
//значение $a равно 2
echo $a; //значение $a равно 3
$a = 4;
--$a;
//значение $a равно 3
echo $a; //значение $a по-прежнему
равно 3
?>
• <?
$p=0;
for ($i = 1; $i <= 4; $i++) {
$p += $i;
echo "P равно $p \n" ;
}
?>
результат
• P равно 1
P равно 3
P равно 6
P равно 10
Цикл WHILE
• while (условие) {
команды, выполняющиеся при
верности условия ;
}
• Цикл WHILE в отличие от цикла FOR
используется в случае, если число
повторений выполнения команд
неизвестно
• <?
$p = 10;
$n = 0;
while ($p <= 20) {
$n++;
$p+= 0.1*$p;
}
echo "Цикл выполнился ".$n." раз"; ?>
• оператор . (точка). Это так называемый
оператор "склеивания". Он работает
только со строковыми типами данных
два типа функций
• зарезервированные функции;
• функции, определяемые пользователем
• function имя_функции(аргумент1,
аргумент2 и так далее)
{
некоторый операции, выполняемые
при вызове функции ;
}
• Имя функции - оригинальный идентификатор, может
содержать все буквы латинского алфавита, числа и
знак подчеркивания. Следите, чтобы имя вашей
функции не совпадало с зарезервированной
функцией PHP, иначе программа выведет ошибку.
Заметьте, что имя функции, в отличие от имени
переменной, нечувствительно к регистру.
• Аргументами функций могут являться переменные
и/или константы. Это те значения, которые будут
использоваться командами в теле функции.
• Внутри функции может быть любой верный php код,
включая функции обоих типов, а также классы
• function sum($a, $b)
{
$c = $a + $b;
• $c1=10;
• echo "$a + $b = $c <br>";
return $c;
}
• Конструкция return аргумент
заставляет данную функцию
возвращать после своего выполнения
значение аргумента
• $a = sum(12, 5);
echo $a;
/* этот код выведет
12 + 5 = 17
17
*/
• переменной $a присвоилось значение,
возвращенное функцией sum (т.е.
значение $c). Если бы мы не указали в
определении функции return $c, то
пример выше вывел бы только 12 + 5 =
17
• все переменные внутри функции являются
локальными, действующими только в теле
функции. Поэтому в примере выше не было
ошибкой строчка $a = sum(12, 5), где в
функции sum уже есть своя переменная $a.
Эти переменные никоем образом не
пересекаются и имеют совершенно разное
значение
• Для того, чтобы переменная, определенная
внутри функции, действовала вне ее
пределов, необходимо указать, что она
является глобальной
• function word ($word)
//функция word() и переменная $word совершенно разные вещи
{
global $string;
//определение $string
как глобальной
$string = $word." - отличная вещь!";
}
word ("PHP");
echo $string;
//выведет "PHP - отличная
вещь!"
• функция после своего выполнения
теряет все свои значения и при ее
новом вызове нельзя использовать
данные, полученные при предыдущем
выполнении функции. Но эта проблема
решаема, используя определение
переменное как статичной.
• function mult ($a)
{
static $result=1;
//определение $result как
статичной
$result *= $a;
echo $result.'<br>';
}
for ($i=2; $i<=4; $i++)
{ mult($i) ;}
/*выведет
2
6
24
*/
• Если бы мы не написали static, то
пример вывел бы числа 2, 3 и 4
• если при вызове функции аргумент не
указан, то будет использоваться это
значение по умолчанию
• function arr_count ($a, $b=3) /* значение по
умолчанию должно указываться справа */
// такая запись: function arr_count ($b=3, $a) - будет
работать неверно
{
global $array;
$result = $array[$a] + $array[$b];
return $result;
}
$array = array(2, 5, 4, 7, 2);
echo arr_count(2)." + ".arr_count(1, 4)." = ".(arr_count(2)
+ arr_count(1, 4));
// выведет
11 + 7 = 18
• Функцию можно сделать значением
переменной
• $CountArray='arr_count';
echo $CountArray(0);
//выведет число
9
calc.php
•
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Калькулятор</title>
</head>
<body>
<?
/* приступаем непосредственно php коду */
function show()
{
global $action;
?>
<FORM method=Get action="calc.php" target="_blank">
/* target="_blank" - результат обработки формы будет выводится в новом окне */
Первое число
<input type="text" name="first">
Второе число (Степень, процент)
<input type="text" name="second">
<select size="1" name="action">
<option value="sum">Сложить</option>
<option value="min">Вычесть</option>
<option value="mult">Умножить</option>
<option value="dev">Разделить</option>
<option value="stepen">Возвести в степень</option>
<option value="procent">Процент от числа</option>
<option value="koren">Корень</option>
</select>
<br><input type="submit" value="Выполнить">
</form>
<?php
}
//конец функции show()
•
function calc()
{
global $action, $result, $first, $second;
switch($action)
{
case "sum": $result = $first+$second; break;
case "min": $result = $first-$second; break;
case "mult": $result = $first*$second; break;
case "dev":
if (!$second)
/* если второе число равно "0" или вообще не введено */
{
exit("Извините, программа не может выполнить действие: на ноль делить нельзя");
}
$result=$first/$second; break;
case "procent": $result = $first*($second/100); break;
case "stepen": $result = pow($first, $second); break;
case "koren": $result = pow($first,0.5); break;
}
?>
//заканчиваем оператор switch
Результат Вашего действия равен <b>
<? echo $result; ?>
//вывод результата
</b>
</font>
<?
}
//конец функций calc()
• if ($action) calc(); else show();
?>
• Если в переменной $action есть какоелибо значение (а оно может появиться
только в случае нажатия кнопки
"Выполнить"), то выполняется функция
вычисления calc(), если же $action
пуста, то выведется форма
Калькулятора
file_exists
• функция может возвращать только два
значения,
• TRUE (если указанный файл
существует)
• FALSE
• if ( !file_exists("somefile.txt") )
echo"Указанный файл не существует";
• Filename
Просто указание имени
файла означает, что он находится в текущей
директории
• ./files/filename
Файл содержится в папке
files, находящейся в текущей директории.
Длина цепочки из папок не ограничена
• ../filename
Файл лежит в
предыдущей директории. Каждый знак ../
расценивается как возврат в родительскую
директорию
• ../files/filename
Файл находится в папке
files, которая лежит в предыдущей
директории.
filesize
• функция определяет размер файла и
возвращает его в байтах
file
• возвращает содержимое указанного файла, причем
делает она это в виде массива, где каждый его
элемент является строкой файла. Функция полезна,
когда в одном файле необходимо сохранить
несколько разных значений, которые не должны
пересекаться. Тогда каждое значение сохраняется на
отдельной строке и читается функцией file, которая
возвращает массив, вследствие чего обращение к
заданной переменной происходит с помощью чтения
значения элемента массива с индексом,
соответствующим строке в файле
• $text_file = implode("", file("somefile"));
echo $text_file;
• воссоединение всех элементов
возвращенного массива в одну
переменную. Это делается с помощью
функции работы с массивами implode
readfile
• функция, readfile выводит содержание
указанного файла, а также возвращает
число символов в файле (или
количество байт, кому как нравится, так
как один символ равен одному байту).
• функция не предусматривает
присваивание прочитанного
содержимого файла переменной
• $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";
fopen
• функция открывает указанный файл и
возвращает идентификатор соединения
с файлом, который используется в
служебных целях. С содержимым
файла эта функция никаким образом не
связывается
• "r"
Файл открывается только для чтения его содержимого.
• "r+"
Открытие файла как для чтения, так и для записи.
• "w"
Файл открывается с целью записи.
• "w+"
Открыть файл для чтения и записи.
• "a"
Файл открывается для записи в конец файла (дозаписи).
• "a+"
Открывается для дозаписи и чтения
fgets
• Функция чтения файла, открытого функцией
fopen. эта функция за каждый раз своего
выполнения возвращает только одну строку
файла, при этом она перемещает внутренний
указатель файла на следующую строку,
которую она прочитает при следующем
обращении к функции. Поэтому, если вам
необходимо прочитать файл целиком,
необходимо использовать эту функцию в
цикле
• $file = fopen ("somefile", "r");
while ($line = fgets($file, 4096) )
{
$line.="\n";
echo $line;
}
следующие команды работы с файлом
fputs
• Функция записи информации в файл,
причем делает она это по принципу
работы функции fgets, то есть начинает
запись с позиции внутреннего
файлового указателя. она использует
параметр длины записываемых данных,
который также является опциональным
fclose
• функция закрывает указанный файл
• <?
$file = fopen("counter.txt", "r");
$c = fgets ($file, 150);
fclose ($file);
$c++;
$file = fopen("counter.txt", "w");
fputs ($file, $c);
fclose ($file);
echo $c;
?>
opendir
• функция открывает указанную
директорию и возвращает служебный
идентификатор соединения с
директорией
.
Точка означает
открытие текущей
директории
./files/
Открытие папки files,
находящейся в
текущей директории
..
Открытие папки на
уровень выше
текущей
readdir
• Функция читает директорию, открытую
opendir. За каждый проход она
возвращает имя файла или папки,
лежащих в указанной директории, и
перемещает внутренний указатель на
следующий объект директории. Так что
для прочтения всей директории ее
необходимо использовать в цикле.
closedir
• Закрываем директорию, указывая в
качестве аргумента идентификатор
соединения с папкой
• $i = 0;
$handle = opendir ('.');
while($file = readdir($handle))
{
if ($file != '.' && $file != '..')
{
$func[$i] = $file; //формируем массив названий файлов с
функциями
$i++;
}
}
sort ($func);
for ($q = 0; $q<sizeof($func); $q++)
{
echo "<a href='index.php?".$func[$q]."'>".$func[$q]."</a><br>\n";
}
Гостевая книга
•
•
•
Сохранять добавленное сообщение.
Производить проверку добавляемого
сообщения перед сохранением
Выводить все сообщения на экран.
•
•
•
config.php - здесь будут храниться
общие настройки гостевой книги.
base.txt - файл, где будут храниться
все сообщения, наша своеобразная
база данных.
guest.php - здесь будет содержаться
непосредственно наш скрипт.
guest.php
•
•
•
•
<HTML>
<HEAD>
<TITLE>Гостевая книга</TITLE>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
• <META HTTP-EQUIV="Pragma"
CONTENT="no-cache"> </HEAD> <BODY>
• <? require("config.php");
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
function show_form()
{
?>
<form method="post" action="">
Имя<br>
<input type="text" name="name" maxlength="22">
<br>
E-mail<br>
<input type="text" name="email" maxlength="21">
<br>
Сообщение<br>
<textarea cols="70" rows="20" name="mess"></textarea><br>
<input type="submit" value="Послать">
<input type="reset" value="Очистить">
</form>
<?
}
config.php
• <?
$base = "base.txt";
Основной файл
• function save_mess()
• {
•
global $name, $email, $mess, $base;
•
•
•
•
•
•
$date = date("d.m.y - H:i:s");
$text =
$name."^^".$email."^^".$date."^^".$mess."\n";
$fp = fopen($base,"a");
fputs($fp, $text);
fclose($fp);
}
• присваиваем переменной $date текущую дату в виде
день.месяц.год - часы:минуты:секунды
• имя отправившего сообщения, его адрес и само
сообщение присваиваем переменной $text, причем
разделяем их знаком ^^, который мы будем
использовать для обратного процесса - из строки
получать имя, адрес и сообщение. Для этого можно
использовать любой символ или сочетание
символов, которые не используются на письме
• открываем файл-базу для дозаписи и приписываем в
конце файла полученную строку из всех данных
config.php
• $MessOnScreen = 10;
guest.php
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
function show_mess()
{
global $base, $MessOnScreen;
$file = file($base);
$file = array_reverse($file);
echo "<table>";
if(sizeof($file) < $MessOnScreen) $MessOnScreen = sizeof($file);
for ($i = 0; $i < $MessOnScreen; $i++)
{
$mess = explode("^^",$file[$i]);
?>
<tr>
<td>
<p>Написал:
<? echo "<a href='mailto:".$mess[1]."'>".$mess[0]."</a>";
echo "<br>";
echo $mess[2]; ?>
</td>
<td>
<p><?=$mess[3];?></td>
</tr>
<?
}
echo "</table></td>";
}