
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Примеры обработки форм
Все данные, которые вы хотите получить из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.
<?php//form5.php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Попробуйте еще раз</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Имя: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Пиво: <br />
<select multiple name="beer[]">
<option value="аливария">аливария</option>
<option value="криница">криница</option>
<option value="речицкое">речицкое</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="Go!" />
</form>
<?php
}
?>
После выполнения PHP получим следующую страницу HTML
<form action="/myphp/form5.php" method="post">
Имя: <input type="text" name="personal[name]" /><br />
Email: <input type="text" name="personal[email]" /><br />
Пиво: <br />
<select multiple name="beer[]">
<option value="аливария">аливария</option>
<option value="криница">криница</option>
<option value="речицкое">речицкое</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="Go!" />
</form>
Результат:
Array
(
[personal] => Array
(
[name] => val
[email] => rom
)
[action] => submitted
[submit] => Go!
)
Попробуйте еще раз
Валидация данных в форме
Необходимые для заполнения поля
Имя, почтовый адрес и основная информация – примеры необходимых для заполненияполей. Для обозначения необходимого поля используйте звездочку (*) красного цвета.
Клиентская сторона (JavaScript)
function required(){
var first = document.forms["myForm"].elements["firstname"].value;
var last = document.forms["myForm"].elements["lastname"].value;
var email = document.forms["myForm"].elements["email"].value;
var message = document.forms["myForm"].elements["message"].value;
if(first == null || first == "" || last == null || last == ""){
alert("First and last name fields are required.");
return false;
}
else if(email == null || email == ""){
alert('An email address is required.');
return false;
}
else if(message == null || message == ""){
alert('Message feild cannot be left blank.');
return false;
}else{return true;}
}
Серверная сторона (PHP)
function required($firstname, $lastname, $email, $message){
if(empty($firstname) || empty($lastname)){
return false;
}
elese if(empty($email)){
return false;
}
elese if(empty($message)){
return false;
}else{return true;}
}
Совпадающие поля
Два самых привычных поля, требующих проверки совпадения – это поля ввода пароля и электронного адреса. Всегда необходимо дважды проверять поле пароля, потому что: 1) пользователь не видит пароль при его написании, поэтому может допустить ошибку и 2) позже мы потребуем от пользователя войти в систему (что он не сможет сделать, если запишет неверный пароль).
Однако двойная проверка поля с электронным адресом – спорный предмет. На самом деле это зависит от необходимости е-мейла на вебсайте. Для регистрации, которая требует постоянного обновления электронного адреса или системы обратной связи, требующей отклика, лучше проверить дважды, чтобы удостовериться, что е-мейл правильный. Однако для других чувствительных к е-мейлу случаев двойная проверка все же может оказаться слишком навязчивой. Для таких простых вещей, как подписка на рассылку новостей, обычно можно пропустить двойную проверку, и вместо этого «подтвердить» е-мейл другими способами, например, в форме страницы подтверждения.
Клиентская сторона (JavaScript)
function passwordmatch(form_id){
var pass1 = document.forms["form_id"].elements["password"].value;
var pass2 = document.forms["form_id"].elements["password2"].value;
if(pass1 != pass2){
alert('Passwords do not match!');
return false;
}
}
Серверная сторона (PHP)
functin passwordmatch($password1, $password2){
if($password1 != $password2){
return false;
}else{return true;}
}
Правильный формат электронной почты
Правильный формат е-мейла включает знак @, точку (.) и разрешает только определенные символы. Более того, эти символы должны располагаться в верном порядке. Ниже есть несколько отрывков кода, как для стороны клиента, так и сервера, которыми можно пользоваться для подтверждения электронной почты.
Клиентская сторона (JavaScript)
function validate(form_id,email) {
var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])
+\.([A-Za-z]{2,4})$/;
var address = document.forms["form_id"].elements["email"].value;
if(reg.test(address) == false) {
alert("Invalid Email Address");
return false;
}
}
Серверная сторона (PHP)
function isValidEmail($email){
return preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]
+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i', $email);
}
Правильный формат телефонного номера (США)
Для проверки правильности телефонного номера можно использовать регулярные выражения. Нижеприведенные фрагменты предназначены для обычного телефонного номера США, которые под другие образцы нужно будет переделать.
Клиентская сторона (JavaScript)
function validate(form_id,phone) {
var reg = /\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x;
var phone = document.forms["form_id"].elements["phone"].value;
if(reg.test(phone) == false) {
alert('Invalid Phone Number: XXX-XXX-XXXX');
return false;
}
}
Серверная сторона (PHP)
function validatePhone($phoneNo){
return preg_match('/\(?\d{3}\)?[-\s.]?\d{3}
[-\s.]\d{4}/x', $phoneNo);
}
Правильный формат почтового индекса (США и Канада)
Следующие отрывки кода – для подтверждения почтового индекса только США и Канады, но, скорее всего, в любом случае эти форматы самые распространенные. Если нужен формат для другой страны, можно использовать похожий вариант другого типа цифр индекса или почтового адреса.
Клиентская сторона (JavaScript)
function isValidPostalCode(postalCode, countryCode) {
switch (countryCode) {
case "US":
postalCodeRegex = /^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/;
break;
case "CA":
postalCodeRegex = /^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/;
break;
default:
postalCodeRegex = /^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/;
}
return postalCodeRegex.test(postalCode);
}
Серверная сторона (PHP)
function validateZipCode($postalCode, $countryCode){
switch ($countryCode){
case "US":
$countryformat = "/^([0-9]{5})(?:[-\s]*([0-9]{4}))?$/";
break;
case "CA":
$countryformat = "/^([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])$/";
break;
default:
$countryformat = "/^(?:[A-Z0-9]+([- ]?[A-Z0-9]+)*)?$/";
}
return preg_match('$countryformat', $postalCode);
}
Что-то действительно выбираемое/подбираемое
Иногда вам требуется нечто с имеющимся по умолчанию значением. Тут мы не можем просто проверить, пустое ли поле, потому, что оно не может таким оставаться.
Внизу приведен пример, где у пользователя в выпадающем списке есть опции, а значение, выбранное по умолчанию – "Select One" (выберите из списка). Конечно, нам не нужно, чтобы пользователь выбрал "Select One", потому что так он не даст нам никакой ценной информации. Похожие ситуации могут использоваться для кнопок выбора опций или предопределенных полей ввода.
Начало формы
Конец формы
Валидация не потребуется, если на первом месте не будет находиться опция «Выберите из списка» ("Select One"), но для того, чтобы убедиться, что пользователь что-то деятельно выбирал вместо того, чтобы пропустить эту часть формы, нам следует создать эту «пустую» опцию.
Клиентская сторона (JavaScript)
function required(){
var graphicsProgram = document.forms["myForm"].
elements["graphicsProgram"].value;
if(graphicsProgram == "Select One"){
alert("Please choose a graphics program.");
return false;
}else{return true;}
}
Серверная сторона (PHP)
function required($graphicsProgram){
if($graphicsProgram == "Select One"){
return false;
}
}else{return true;}
}
В диапазоне
Другая обычная форма валидации, заслуживающая фрагмента кода, это проверка того, находятся ли номер или дата в каком-либо диапазоне. Хороший пример тому – дата рождения, где человек не может быть младше или старше определенного возраста. Прочие образцы использования диапазона могут включать оценку доходов, подсчет расстояния или другие данные, где нужно выбрать точное число, но в каких-то пределах.
Начало формы
Birthday:
Конец формы
Другой способ работы с датами и диапазонами – постоянно использовать объект даты (как в JavaScript, так и в PHP и других языках программирования). На самом деле, это будет более верный способ все сделать, особенно если при выборе диапазона были важны точные день и месяц. Однако, чтобы сделать это решение более универсальным, мы скомпилировали нижеприведенный код.
Аналогичную технику можно применить ко многим пользовательским решениям.
Клиентская сторона (JavaScript)
function withinrange(){
var currentYear = 2010;
var birthYear = document.forms["myForm"].elements["year"].value;
var tooOld = currentYear - 100;
var tooYoung = currentYear - 13;
if(tooYoung < birthYear){
alert("You must be 13 years or older.");
return false;
}else if(tooOld > birthYear){
alert("You can't possibly be that old!");
return false;
}
else{return true;}
}
Серверная сторона (PHP)
function withinrange($birthYear){
$currentYear = 2010;
$tooOld = $currentYear - 100;
$tooYoung = $currentYear - 13;
if($tooYoung < $birthYear){
return false;
}else if($tooOld > $birthYear){
return false;
}
else{return true;}
}
Captcha
Когда все уже сказано и сделано, а форма заполнена, неплохо бы убедиться, что данные в форму вводит человек. Для избегания спам-ботов и хакерских атак всегда перед отправкой формы включайте полностью автоматизированный открытый тест Тьюринга по распознаванию людей и машин, т.н. captcha.