1 / 54

php2

php2. Задачи ГК. Сохранять добавленное сообщение. Производить проверку добавляемого сообщения перед сохранением. Выводить все сообщения на экран. Модули. config.php - здесь будут храниться общие настройки гостевой книги.

Download Presentation

php2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. php2

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

  3. Модули • config.php - здесь будут храниться общие настройки гостевой книги. • base.txt - файл, где будут храниться все сообщения, наша своеобразная база данных. • guest.php - здесь будет содержаться непосредственно наш скрипт.

  4. guest.php • <HTML> • <HEAD> • <TITLE>Гостевая книга</TITLE> • <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> • </HEAD> • <BODY> • <? require("config.php");

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

  6. config.php • <?$base = "base.txt";

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

  8. config.php • $MessOnScreen = 10; • Ограничение по кол-ву сообщений

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

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

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

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

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

  14. вывод • запись <?=$mess[2];?> • эквивалентна <? echo $mess[2];?>

  15. 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);

  16. trim() отрезает все пустые символы (пробелы, переводы строк, символы табуляции) в начале и в конце строк. • str_replace заменяет с помощью функции все символы перевода строки на тег <br>. • htmlspecialchars() обрабатывает все специальные символы HTML, то есть символ < переходит в &lt;  и так далее

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

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

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

  20. проверить, чтобы e-mail был вида something@server.com, • проверить имя: оно должно содержать только буквы латинского и русского алфавита и знак подчеркивания (_). • при несоблюдении этих условий задействуется функция output_err() с аргументом, представляющим собой индекс массива $err для соответствующей ошибки.

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

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

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

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

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

  26. получается массив строк файла-базы с помощью функции file() • массив объединяется в одну переменную • "квотируется" сообщение пользователя • смотрим, встречается ли этот текст в базе или нет • если встречался, выводится ошибку • возвращается текст в переменной $mess в первоначальное состояние, то есть убирает все обратные слеши \ перед специльными символами, которые были добавлены функцией preg_quote

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

  28. 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++; • }

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

  30. config.php • $MessInFile = 20;

  31. 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);

  32. 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(); //добавили • }

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

  34. В PHP предусмотрено два способа передачи ID сессии (сокращенно SID): • Через метод GET.Тогда посетитель будет видеть в своем броузере адресную строку следующего типа:http://server.com/main.php?PHPSESSID=bdd95bcd4e1e2ef5ec57fc83a69bba86 • Через Cookie.Здесь, соответственно, посетитель не будет видеть признаков существования сессии, SID передается через Cookie.

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

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

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

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

  39. Дополнительные функции работы с сессиями • session_id • session_name • session_destroy

  40. session_start();echo session_name();session_name("MySession");echo session_name();

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

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

  43. Cache-control. • "Cache-control: " значение • Заголовок управления кешированием страниц. Вообще, данная функция является одной из самых распространенных в использовании заголовков. • no-cashe - Запрет кеширования. Используется в часто обновляемых страницах и страницах с динамическим содержанием. Его дейсвтие подобно META тегу "Pragma: no-cache". • public - Разрешение кеширования страницы как локальным клиентом, так и прокси-сервером. • private - Разрешение кеширования только локальным клиентом. • max-age - Разрешение использования кешированного документа в течение заданного времени в секундах. • header("Cache-control: private, max-age = 3600")  /* Кеширование локальными клиентами и использование в течение 1 часа */

  44. 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";

  45. Last-Modified • "Last-Modified: " HTTP-date • Указывает дату последнего изменения документа. Дата должна задаваться в том же формате, что и в случае с заголовком Expires. Данный заголовок можно не использовать для динамических страниц, так как многие серверы (например, Apache) для таких страниц сами выставляют дату модификации. • Возможно сделать страницу всегда обновленной: • header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");

  46. 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> заново");

  47. Классы в PHP • Класс служит шаблоном для объекта. Он создается следующим образом: • class Myclass {// определение класса}

  48. 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; }}

  49. 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; } • }

  50. function getSizeofMerge() { • /* возвращает число неповторяющихся элементов массива, полученного getSortedMerge() */ • $merge = $this->getSortedMerge(); • return sizeof(array_unique($merge)); } }

More Related