Меню сайта
Категории раздела
HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Наш опрос
Друзья сайта
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » php |
Урок 8,1
Казалось бы, на этом можно и остановиться. В общем-то этого достаточно для самой примитивной гостевой книги. Но зачем нам такая нужна? Мы же не хотим, чтобы наше любимое детище взламывал каждый "типа хакер". В конце концов, нам нужна удобная функциональная "гостевая". Так что продолжаем. А продолжим мы с очень важной функции проверки введенных данных. У нас будет даже не одна функция проверки, а больше. Значит, открываем файл guest.php и пишем: Это еще не конец функции. Здесь мы "отрезали" с помощью функции trim() все пустые символы (пробелы, переводы строк, символы табуляции) в начале и в конце строк. Далее мы заменили с помощью функции str_replace все символы перевода строки на тег <br>. Это облегчит нам задачу сохранения форматированных строк и их дальнейшего вывода. Далее в функции следует очень важный элемент - первое, с чего следует начать строить защиту программы - функция htmlspecialchars(), которая обрабатывает все специальные символы HTML, то есть символ < переходит в < и так далее. Никогда не забывайте об этом элементе! Мне вот подумалось: мы выполняем проверку данных, а ведь в случае неверности данных нам требуется выдать сообщение о соответствующей ошибке. Так давайте это тоже оформим в виде функции. Не закрывая предыдущей функции, ниже пишем новую, которая будет отвечать за вывод ошибки: В файле config.php в массиве $err мы будем перечислять сообщения для вывода при соответствующей ошибке. Обратите внимание, что мы при помощи функции exit() прекращаем работу скрипта после вывода сообщения об ошибке. Дописываем функцию check_mess(): И тут же, пока не забыли, пишем в файл config.php следующие строки:$err[1] = "Неверно введен e-mail"; $err[2] = "Неверно введено имя"; Как видите, в предыдущей функции мы активно работали с регулярными выражениями. Сначала мы проверяли, чтобы e-mail был вида something@server.com, а затем проверке подвергнулось и имя: оно должно содержать только буквы латинского и русского алфавита и знак подчеркивания (_). При несоблюдении этих условий задействуется функция output_err() с аргументом, представляющим собой индекс массива $err для соответствующей ошибки. Далее нам необходимо проверить данные на соответствие допустимой длине. Так что пишем новую функцию check_for_length(): Здесь мы сначала сверяем длину сообщения с указанной в переменной $MessLength с помощью функции strlen(), которая возвращает количество символов в строке, и используем функцию output_err() в случае превышения длины сообщения над лимитом. Не забудьте в файле config.php написать следующие строки:$MessLength = 1000; $err[3] = "Недопустимая длина сообщения"; Далее мы "обрубаем" строку с помощью функции substr(), оставляя в переменной $email первые 21 символов, а в $name - 22. Вообще-то в нормальных условиях длина этих двух строк не может превышать эти числа, так как мы еще в форме для ввода сообщения указали этот лимит, но все-таки стоит перестраховаться. Продолжаем блок проверки и пишем следующую функцию, которая будет заниматься отслеживанием флуда, то есть публикации одного и того же сообщения. Эта функция основана на работе с регулярными выражениями. Сначала мы получаем массив строк файла-базы с помощью функции file(), затем объединяем весь массив в одну переменную. Далее мы "квотируем" сообщение пользователя (см. функцию preg_quote в соответствующем разделе) и смотрим, встречается ли этот текст в базе или нет. Если встречался, выводим ошибку. Следующая строка возвращает текст в переменной $mess в первоначальное состояние, то есть убирает все обратные слеши \ перед специльными символами, которые были добавлены функцией preg_quote. В файле config.php напишите:$err[4] = "Такое сообщение уже существует"; Следующая функция заканчивает проверки, хотя она сама не является функцией проверки сообщения (она, скорее, функция проверки файла-базы), но все же мы отнесем ее сюда. Эта очень полезная функция облегчит жизнь администратору гостевой книги. Она сама себя будет "подчищать", удаляя старые сообщения. Сразу добавим строку в файл config.php: $MessInFile = 20; Это то количество сообщений, которые следует хранить в файле. Если вы не желаете иметь "архив" сообщений, установите здесь то же число, что и в переменной $MessInFile. Теперь разберем функцию. Сначала мы присваиваем переменной $file массив из строк файла базы. После мы ставим условие, что все дальнейшие действия функции будут выполняться только если количество сообщений в файле больше числа, указанного в $MessInFile. Далее запускаем цикл, который выполнится столько раз, сколько указано в той же переменной $MessInFile. Затем мы формируем массив $ResFile из последних 20 (так указано в $MessInFile) элементов массива $file. После этого мы переписываем файл-базу сохраняя там полученный массив $ResFile. Тем самым после выполнения функции мы отсеем старые сообщения, оставив 20 последних в том же порядке, что и до вызова функции. Ну что же, функции написаны. Теперь осталось их правильно вызвать, так как сами по себе, как вы понимаете, они выполняться не будут. Все дополнительные функции проверки у нас будут вызываться главной функцией проверки check_mess(). Теперь она должна выглядеть так: А теперь завершающий этап. После всех записей внизу файла guest.php пишем:if ($mess) { check_mess(); save_mess(); } show_mess(); show_form(); ?> </BODY> </HTML> Если в переменной $mess есть какое-либо значение (а оно могло появиться только при нажатии в форме кнопки "Послать"), то сначала выполняется функция проверки сообщения, а затем, если не происходит ошибки, выполняется функция сохранения сообщения. И независимо от того, есть ли сообщение или нет, выводятся сообщения из файла-базы и форма для ввода. Все, гостевая книга готова к использованию. Сделайте для нее дизайн по вашему вкусу и все. Пользуйтесь. | |
Просмотров: 1116 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |