54
php2

Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

  • View
    230

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

php2

Page 2: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Задачи ГК

• Сохранять добавленное сообщение.

• Производить проверку добавляемого сообщения перед сохранением.

• Выводить все сообщения на экран.

Page 3: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Модули

• config.php - здесь будут храниться общие настройки гостевой книги.

• base.txt - файл, где будут храниться все сообщения, наша своеобразная база данных.

• guest.php - здесь будет содержаться непосредственно наш скрипт.

Page 4: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

guest.php

• <HTML> • <HEAD>• <TITLE>Гостевая книга</TITLE> • <meta http-equiv="Content-Type"

content="text/html; charset=windows-1251"> • </HEAD> • <BODY>• <? require("config.php");

Page 5: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• 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>• <?• }

Page 6: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• <?$base = "base.txt";

Page 7: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

guest.php

• 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);• }

Page 8: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• $MessOnScreen = 10;

• Ограничение по кол-ву сообщений

Page 9: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

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]);•• ?>

Page 10: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• <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>";• }

Page 11: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• Функцией file() получаем массив, где в каждом элементе содержится строка с одним "блоком" - именем писавшего, адресом и сообщением.

• Изменяем порядок элементов на обратный, так что самая последняя запись становится у нас первым элементом массива.

• Сравниваем количество элементов в $file (количество сообщений) с указанным в $MessOnScreen лимитом, и если оно меньше этого значения, то $MessOnScreen устанавливаем в число элементов $file.

Page 12: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• выполняется цикл вывода сообщений. С каждым проходом цикла значение переменной цикла увеличивается на единицу. Таким образом самые свежие сообщения (те, что были приписаны позже всех и находятся внизу файла-базы) выведутся первыми, а более старые - последними.

Page 13: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• переменной $mess присваиваем массив с элементами:0-ой элемент - имя1-ый элемент - адрес электронной почты2-ой элемент - время добавления сообщения3-й элемент - само сообщение

Page 14: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

вывод

• запись <?=$mess[2];?>

• эквивалентна <? echo $mess[2];?>

Page 15: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• function check_mess()• {• global $name, $email, $mess;

• $mess=trim($mess);• $email=trim($email);• $name=trim($name);

• $name = htmlspecialchars($name);• $email = htmlspecialchars($email);• $mess = htmlspecialchars($mess);•• $mess = str_replace("\n","<br>",$mess);

Page 16: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• trim() отрезает все пустые символы (пробелы, переводы строк, символы табуляции) в начале и в конце строк.

• str_replace заменяет с помощью функции все символы перевода строки на тег <br>.

• htmlspecialchars() обрабатывает все специальные символы HTML, то есть символ < переходит в &lt;  и так далее

Page 17: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• function output_err($num)• {• global $err;• ?>• <center><h1>Oшибка!</h1></center>• <p><?=$err[$num];?>•• <?• exit();• }

Page 18: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• В файле config.php в массиве $err будут перечислены сообщения для вывода при соответствующей ошибке. Обратите внимание, что мы при помощи функции exit() прекращается работа скрипта после вывода сообщения об ошибке

Page 19: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• if (empty($name)) output_err(2);• if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-

z]{2,3}/i", $email))• {• output_err(1);• }•• if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",

$name)) output_err(2);• }

Page 20: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• проверить, чтобы e-mail был вида [email protected],

• проверить имя: оно должно содержать только буквы латинского и русского алфавита и знак подчеркивания (_).

• при несоблюдении этих условий задействуется функция output_err() с аргументом, представляющим собой индекс массива $err для соответствующей ошибки.

Page 21: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• $err[1] = "Неверно введен e-mail";$err[2] = "Неверно введено имя";

Page 22: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

guest.php

• function check_for_length()• {• global $mess, $email, $name, $MessLength;

• if (strlen($mess)>$MessLength) output_err(3);• $email=substr($email, 0, 21);• $name=substr($name, 0, 22);• }

Page 23: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• сверяется длина сообщения с указанной в переменной $MessLength с помощью функции strlen(), которая возвращает количество символов в строке

• используется функцию output_err() в случае превышения длины сообщения над лимитом

Page 24: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• $MessLength = 1000;$err[3] = "Недопустимая длина сообщения";

Page 25: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

guest.php

• function check_mess_for_flud()• {• global $mess,$base;

• $file=file($base);• $file=implode("",$file);• $mess=preg_quote($mess);• if (eregi($mess, $file)) output_err(4);• $mess = stripslashes($mess);• }

Page 26: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• получается массив строк файла-базы с помощью функции file()

• массив объединяется в одну переменную• "квотируется" сообщение пользователя • смотрим, встречается ли этот текст в базе или нет• если встречался, выводится ошибку• возвращается текст в переменной $mess в

первоначальное состояние, то есть убирает все обратные слеши \ перед специльными символами, которые были добавлены функцией preg_quote

Page 27: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• $err[4] = "Такое сообщение уже существует";

Page 28: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

guest.php

• function del_mess_from_file()• {• global $base, $MessInFile;

• $file = file($base);• $k = 0;• if($MessInFile<sizeof($file))• {•• for($i=sizeof($file)-$MessInFile; $i<sizeof($file); $i++)• {• $ResFile[$k]=$file[$i];• $k++;• }•

Page 29: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• $fp=fopen($base,"w");• for($i=0; $i<sizeof($ResFile); $i++)• {• fputs($fp, $ResFile[$i]);• }• fclose($fp);• }• }

Page 30: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

config.php

• $MessInFile = 20;

Page 31: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• function check_mess()• {• global $name, $email, $mess;

• $mess=trim($mess);• $email=trim($email);• $name=trim($name);

• $name=htmlspecialchars($name);• $email=htmlspecialchars($email);• $mess=htmlspecialchars($mess);•• $mess = str_replace("\n","<br>",$mess);••

Page 32: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• check_for_length(); //добавили

• if (empty($name)) output_err(2);• if

(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) output_err(1);

• if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name)) output_err(2);

• check_mess_for_flud(); //добавили• del_mess_from_file(); //добавили• }

Page 33: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• if ($mess) {  check_mess();  save_mess();}show_mess();show_form();?></BODY></HTML>

Page 34: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• В PHP предусмотрено два способа передачи ID сессии (сокращенно SID):

• Через метод GET.Тогда посетитель будет видеть в своем броузере адресную строку следующего типа:http://server.com/main.php?PHPSESSID=bdd95bcd4e1e2ef5ec57fc83a69bba86

• Через Cookie.Здесь, соответственно, посетитель не будет видеть признаков существования сессии, SID передается через Cookie.

Page 35: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• Любая сессия открывается с помощью функции session_start(), создающей специальный служебный файл с именем, соответствующим ID сессии, в который впоследствии будут записаны все данные, связанные с текущей сессией. Место размещения этих файлов зависит от настроек PHP. Так что если вы используете в своих скриптах сессии, не забывайте иногда подчищать директорию с этими временными файлами, так как там со временем может накопиться солидное количество ненужных файлов.

Page 36: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

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

Page 37: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• session_start();session_register('name', 'birth');$name = "Вася Пупкин";$birth = "4 марта";

Page 38: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

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

Page 39: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Дополнительные функции работы с сессиями

• session_id

• session_name

• session_destroy

Page 40: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• session_start();echo session_name();session_name("MySession");echo session_name();

Page 41: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Механизм отправки HTTP заголовков в PHP

• header("HTTP заголовок", необязательный параметр replace);

• должна быть вызвана в самом начале документа

• Опциональный параметр replace может принимать значения типа bool (true или false) и указывает на то, должен ли быть замещен предыдущий заголовок подобного типа, либо добавить данный заголовок к уже существующему

Page 42: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• Опциональный параметр replace может принимать значения типа bool (true или false) и указывает на то, должен ли быть замещен предыдущий заголовок подобного типа, либо добавить данный заголовок к уже существующему.

• функция headers_sent(), которая в качестве результата возвращает true в случае успешной отправки заголовка и false в обратном случае.

Page 43: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Cache-control.

• "Cache-control: " значение• Заголовок управления кешированием страниц. Вообще, данная

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

• no-cashe - Запрет кеширования. Используется в часто обновляемых страницах и страницах с динамическим содержанием. Его дейсвтие подобно META тегу "Pragma: no-cache".

• public - Разрешение кеширования страницы как локальным клиентом, так и прокси-сервером.

• private - Разрешение кеширования только локальным клиентом. • max-age - Разрешение использования кешированного

документа в течение заданного времени в секундах. • header("Cache-control: private, max-age = 3600")  /* Кеширование

локальными клиентами и использование в течение 1 часа */

Page 44: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Expires

• "Expires: " HTTP-date• Устанавливает дату и время, после которого

документ считается устаревшим. Дата должна указываться в следующем формате (на английском языке):

• День недели (сокр.) число (2 цифры) Месяц (сокр.) год часы:минуты:секунды GMT

• Fri, 09 Jan 2002 12:00:00 GMT• Текущее время в этом формате возвращает

функция gmdate() в следующем виде:• echo gmdate("D, d M Y H:i:s")."GMT";

Page 45: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Last-Modified

• "Last-Modified: " HTTP-date• Указывает дату последнего изменения документа.

Дата должна задаваться в том же формате, что и в случае с заголовком Expires. Данный заголовок можно не использовать для динамических страниц, так как многие серверы (например, Apache) для таких страниц сами выставляют дату модификации.

• Возможно сделать страницу всегда обновленной:• header("Last-Modified: ".gmdate("D, d M Y H:i:s")."

GMT");

Page 46: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Location• "Location :" абсолютный URL• Полезный заголовок, который перенаправляет броузер на

указанный адрес. Его действие сравнимо с META тегом Refresh:• <META HTTP-EQUIV="Refresh" CONTENT="0; URL=someURL"> • Например, этот заголовок может быть использован так:• if ($login != $admin_login) header("Location:

http://www.server.com/login.php");else header("Location: http://www.server.com/admin.php?login=$login");

if (!headers_sent()) exit("Произошла ошибка! Пройдите <a  href='http://www.server.com/login.php'>авторизацию</a> заново");

Page 47: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Классы в PHP

• Класс служит шаблоном для объекта. Он создается следующим образом:

• class Myclass {// определение класса}

Page 48: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• class Array_class {var $array = array();

• // Определение свойстваfunction getUniqSum() {

• // Получает сумму уникальных элементов • return array_sum(array_unique($this->array)); } • function getSortedMerge() {• /* Возвращает отсортированный массив из

ключей и элементов массива */ • $result = array_merge(array_keys($this->array),

array_values($this->array)); sort($result); return $result; }}

Page 49: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• class Advanced_array extends Array_class {

• function advanced_array($size) {

• /* заполняет массив подряд идущими числами, чередуя их знаки */

• $z = 1; for ($i = 0; $i < $size; $i++) {

• $this->array[$i] = $i *$z; $z = - $z; }

• }

Page 50: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• function getSizeofMerge() {

• /* возвращает число неповторяющихся элементов массива, полученного getSortedMerge() */

• $merge = $this->getSortedMerge();

• return sizeof(array_unique($merge)); } }

Page 51: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• $my = new Array_class;$my->array = array(1, 2, 6, 1);echo $my->getUniqSum();$my = new Advanced_array(4);echo $my->getSizeofMerge();

Page 52: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

• создаем новый экземпляр класса Array_class

• определяем его свойство array

• выводим сумму элементов без учета повторяющихся

• создаем экземпляр класса Advanced_array, который наследует все свойства и методы Array_class

Page 53: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед

Основы MySQL

Page 54: Php2. Задачи ГК Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед