
- •Яковлев б.С., доцент, канд. Техн. Наук конспект лекций
- •Специальные языки программирования
- •090900 «Информационная безопасность»
- •18.1. Общие сведения 151
- •20.1. Общие сведения 180
- •24.1. Общие сведения 237
- •25.1. Общие сведения 253
- •27.1. Понятие регулярного выражения 278
- •29.1. Общая информация 305
- •1. Основы языка JavaScript
- •1.1. Основные особенности JavaScript
- •2. Операторы языка
- •2.1. Операторы сравнения
- •2.2. Комментарии в языке JavaScript
- •2.3. Пример проверки операции сравнения
- •3. Формы на веб страницах и их обработка
- •3.1. Обработка интернет формы
- •3.2. Применение регулярных выражений при проверке интернет форм
- •4. Функции
- •4.1. Запуск функции при обработке данных на web-странице
- •4.2. Передача данных функции
- •4.3. Вложенные функции. Ихч свойства и применение
- •5. Объекты: строк, чисел и массивов
- •5.1. Строки
- •5.2. Числа
- •5.3. Массивы
- •5.4. Операции, выполняемые над массивами
- •5.5. Ассоциативные массивы
- •6. Объектная модель документа
- •6.1. Технология xml
- •Изображение: Блок-схема документа
- •Создание эффекта изменения изображения
- •6.2. Добавление и удаление элементов при помощи dom технологии
- •6.3. Понятие об элементах и потомках
- •6.4. Обработка текста средствами dom
- •7. Объект документа (document ) и объект окна ( window )
- •7.1. Объект документа (document )
- •7.2. Объект Window
- •7.3. Функции setTimeout и setInterval
- •7.4. Объект Document (window.Document)
- •8. Основы JavaScript
- •8.1. New Object и объектные литералы
- •8.2. Прототипирование
- •8.3. Переменные Private, Public и Static
- •9. Методы наследования, свойства замыкания
- •9.1. Наследование
- •9.2. Замыкание
- •10. Ajax технология
- •10.1. Общие сведения
- •10.2. Создание объекта xmlHttp
- •10.3. Xml, json и текстовые данные
- •10.4. Пример со списком контактов
- •11. Обработка ошибок при отработке сценариев
- •11.1. Синтаксические ошибки
- •11.2. Ошибки времени выполнения
- •11.3. Объект window.Onerror
- •11.4. Обработка ошибок Try/Catch/Finally и Throw
- •11.5. Обработка ошибок в ajax
- •12. Понятие о рекурсии
- •12.1. Основные понятия
- •12.2. Стек
- •Создание собственного стека
- •Применение рекурсии
- •13. Технология ajax
- •13.1. Общие сведения ajax
- •Ajax является технологией браузера
- •Ajax основан на открытых стандартах
- •Технология ajax улучшает приложения Интернет
- •Ajax можно использовать прямо сейчас
- •Ajax использует xml и запросы http
- •Функция showHint()
- •Функция stateChanged()
- •13.2. Браузеры ajax
- •Поддержка ajax браузерами
- •Исходный код приложения ajax
- •Страница html для примера ajax
- •Код JavaScript приложения ajax
- •Серверные страницы ajax для asp и php
- •Серверная страница ajax - asp и php
- •Пример ajax на asp
- •Пример ajax на php
- •Пример php
- •13.3. Пример ajax c базой данных
- •Описание примера:
- •Разбор примера ajax с базой данных
- •Код JavaScript приложения ajax
- •Серверная страница приложения ajax
- •Код JavaScript приложения ajax
- •Серверная страница приложения ajax
- •13.4. Объект ajax xmlHttpRequest
- •Объект xmlHttpRequest
- •Создание объекта xmlHttpRequest
- •Разбор приведенного примера
- •Еще пример?
- •Разбор приведенного примера
- •Методы объекта xmlHttpRequest
- •Свойство readyState объекта xmlHttpRequest
- •Атрибут id заменяет атрибут name
- •Важное замечание о совместимости
- •Атрибут lang
- •Обязательные элементы xhtml
- •Пример xhtml
- •Определения трех типов документов
- •Как использовать xhtml Преобразование сайта на xhtml
- •Добавить определение doctype
- •Замечание о doctype
- •Имена тегов и атрибутов записать в нижнем регистре
- •Все атрибуты заключают в кавычки
- •Проверка (валидация) Web-сайта
- •14.5. Проверка xhtml
- •Проверка xhtml в соответствии с dtd
- •Модуляризация xhtml
- •Зачем нужна модуляризация xhtml?
- •Модули xhtml
- •14.6. Стандартные атрибуты xhtml
- •Базовые атрибуты
- •События клавиатуры
- •События мыши
- •Мы закончили изучение xhtml, что дальше? Заключительные замечания по xhtml
- •Что делать дальше?
- •15. История php
- •15.1. Общая информация о php
- •15.2. Возможности php
- •15.3. Установка и настройка по
- •15.4. Установка php 4.X.X под Windows
- •Заключение
- •16. Основной синтаксис языка php
- •16.1. Основной синтаксис
- •Разделение инструкций
- •16.2. Переменные, константы и операторы
- •Переменные
- •16.3. Константы
- •16.4. Операторы
- •16.5. Типы данных
- •Тип boolean (булев или логический тип)
- •Тип integer (целые)
- •Тип float (числа с плавающей точкой)
- •16.6. Тип array (массив)
- •Определение при помощи array()
- •Определение с помощью синтаксиса квадратных скобок
- •16.7. Тип object (объекты)
- •Тип resource (ресурсы)
- •Решение задачи
- •Заключение
- •17. Условные операторы
- •17.1. Оператор if
- •17.2. Оператор else
- •17.3. Оператор elseif
- •17.4. Альтернативный синтаксис
- •17.5. Оператор switch
- •17.6. Циклы
- •17.7. Операторы передачи управления
- •17.8. Операторы включения
- •18. Основы клиент-серверных технологий
- •18.1. Общие сведения
- •18.2. Протокол http и способы передачи данных на сервер
- •Форма запроса клиента
- •18.3. Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •18.4. Обработка запросов с помощью php
- •Пример обработки запроса с помощью php
- •Заключение
- •19. Функции в php
- •19.1. Общие понятия
- •19.2. Функции, определяемые пользователем
- •19.3. Аргументы функций
- •19.4. Списки аргументов переменной длины
- •19.5. Использование переменных внутри функции Глобальные переменные
- •Статические переменные
- •19.6. Возвращаемые значения
- •Возвращение ссылки
- •19.7. Переменные функции
- •20. Объектная модель
- •20.1. Общие сведения
- •Классы и объекты
- •20.2. Инициализация переменных
- •Объекты
- •20.3. Наследование
- •20.4. Различие между конструкторами php4 и php3
- •20.5. Оператор ::
- •Оператор parent
- •20.6. Объектная модель php5
- •21. Массивы в php
- •21.1. Общие требования
- •Массивы
- •Операции с массивами
- •Функция count
- •21.2. Функция in_array
- •Функция array_search
- •Функция array_keys
- •Функция array_unique
- •21.3. Сортировка массивов
- •Функция sort
- •Функции asort, rsort, arsort
- •21.4. Сортировка массива по ключам
- •21.5. Применение функции ко всем элементам массива
- •21.6. Выделение подмассива Функция array_slice
- •Функция array_chunk
- •Сумма элементов массива
- •Заключение
- •22. Строковые переменные
- •22.1. Общая информация
- •Поиск элемента в строке
- •22.2. Выделение подстроки Функция strstr
- •Функция substr
- •22.3. Замена вхождения подстроки Функция str_replace
- •Функция substr_replace
- •22.4. Разделение и соединение строки
- •22.5. Строки, содержащие html-код
- •Заключение
- •23. Работа с файлами
- •23.1. Создание файла Функция fopen
- •23.2. Закрытие соединения с файлом
- •Запись данных в файл Функция fwrite
- •23.3. Чтение данных из файла
- •Функция fread
- •Функция fgets
- •Функция fgetss
- •Функция readfile
- •Функция file
- •Функция file_get_contents
- •23.4. Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •23.5. Удаление файла
- •Загрузка файла на сервер
- •Заключение
- •24. База данных
- •24.1. Общие сведения
- •Базы данных: основные понятия
- •Индексирование
- •24.2. Субд MySql
- •24.3. Язык sql
- •Немного истории
- •Основные операторы языка sql
- •Оператор create table
- •24.4. Оператор drop table
- •Оператор alter table
- •24.5. Оператор select
- •Оператор insert
- •24.6. Оператор update
- •Оператор delete
- •Заключение
- •25. Функции для работы с базой данных MySql
- •25.1. Общие сведения
- •Построение интерфейса для добавления информации
- •Установка соединения
- •25.2. Выбор базы данных
- •Получение списка полей таблицы
- •25.3. Отображение списка полей в html-форму
- •Запись данных в базу данных
- •25.4. Отображение данных, хранящихся в MySql
- •Заключение
- •26. Сессии и их специфика в php
- •26.1. Авторизация доступа
- •26.2. Механизм сессий
- •Настройка сессий
- •26.3. Работа с сессиями Создание сессии
- •Регистрация переменных сессии
- •26.4. Удаление переменных сессии
- •26.5. Безопасность
- •Заключение
- •27. Понятие регулярного выражения
- •27.1. Понятие регулярного выражения
- •Регулярные выражения в php
- •27.2. Синтаксис регулярных выражений
- •27.3. Подвыражения (подшаблоны)
- •Повторения (квантификаторы)
- •Модификаторы pcre
- •27.4. Регулярные выражения углубленно
- •Обратная ссылка
- •Утверждения
- •Условные подвыражения
- •Заключение
- •28. Взаимодействие php с xml
- •28.1. Введение
- •Основные понятия
- •28.2. Структура xml-документа
- •28.3. Взаимодействие php и xml Расширения sax и dom xml
- •Установка расширения dom xml
- •28.4. Взаимодействие php и xml посредством dom xml
- •Перевод данных xml-файла в объекты и классы php
- •28.5. Обход дерева объектов
- •Добавление новых элементов в xml-документ
- •Заключение
- •29. Шаблон в языке программирования
- •29.1. Общая информация
- •Шаблоны подстановки
- •29.2. Шаблоны FastTemplate
- •Методы FastTemplate
- •Метод define
- •Метод assign
- •29.3. Метод parse
- •Метод FastPrint
- •Решение задачи с помощью шаблонов FastTemplate
- •29.4. Шаблоны Smarty
- •Установка
- •29.5. Основной синтаксис
- •Конфигурационные файлы
- •29.6. Методы
- •Метод assign
- •Метод append
- •Функция capture
- •Функция section
- •Функция foreach
- •Оператор if, elseif, else
- •29.8. Решение задачи с помощью шаблонов Smarty
- •Заключение
- •Библиографический список
2.3. Пример проверки операции сравнения
Теперь все это должно быть понятно читателю. Прежде всего проверяется, что введено допустимое значение. Если значение недопустимо, выводится соответствующее сообщение. Затем проверяется, что введенное число не превышает количество существующих яблок, а затем - что это число не является отрицательным. Если все эти проверки проходят успешно, пользователь сможет съесть столько яблок, сколько захочет. В коде сделано еще одно изменение, вместо if(eaten > 5) используется if(eaten > apples). Если в последующем количество имеющихся яблок var apples = 5; изменится, то это изменение пришлось бы делать только в одном месте. Старайтесь всегда использовать в коде переменные. Если значения "жестко закодированы", как было сделано ранее в коде if(eaten > 5), то очень часто при внесении изменений придется подолгу искать эти жестко закодированные значения, чтобы убедиться, что внесены все необходимые изменения.
Если пользователь ввел каким-либо образом недопустимое значение, то можно попросить его повторно ввести количество яблок, которое он хочет съесть. Одним из способов сделать это было бы копирование всего кода несколько раз. Однако обычно это не самое лучшее решение. Что, если пользователь вводит недопустимое значение снова и снова? Можно продолжить копирование кода, но легко видеть, что это крайне неэффективно и очень трудно поддерживать код в рабочем состоянии.
В этом случае лучшим решением будет использование так называемой функции. Функция содержит код, который выполняет определенную задачу. Мы уже видели использование функций alert, prompt, parseInt и isNaN, которые встроены в язык JavaScript. Преимущество использования функций состоит в том, что можно выполнять один и тот же блок кода снова и снова, не копируя этот код, Для выполнения функции необходимо написать ее имя, за которым следуют скобки (), а все значения, передаваемые в функцию, записываются между скобками.
var apples = 5;
function eatApples(){
alert('Имеется ' + apples + ' яблок!');
var eat = prompt('Сколько яблок вы хотите съесть?', '1');
var eaten = parseInt(eat);
if(isNaN(eaten)){
alert('Вы должны ввести допустимое число яблок!');
eatApples();
} else if(eaten > apples){
alert('Простите, но имеется только ' + apples + ' яблок.
Вы не можете съесть ' + eaten +
' яблок!');
eatApples();
} else if(eaten < 0){
alert('Простите, но вы не можете съесть
отрицательное количество яблок!');
eatApples();
} else {
apples -= eaten;
alert('А теперь имеется только ' + apples + ' яблок!');
if(apples > 0){
if(confirm('Не хотите съесть еще яблочко?')){
eatApples();
}
} else {
alert('Яблок больше нет!');
}
}
}
Здесь весь наш код записан в виде функции с именем eatApples. Можно видеть, что каждый раз, когда пользователь вводит неверное значение, снова вызывается функция eatApples();, чтобы пользователь мог ввести новое значение. Когда пользователь вводит допустимое значение, то он либо может еще есть яблоки, либо, если все яблоки закончились, он получит соответствующее сообщение. Здесь используется также одна новая функция, confirm. Функция confirm просто выводит пользователю приглашение OK or Cancel ("Да или Отмена"). Если пользователь нажмет кнопку " OK ", то функция возвращает значение true (да). Если пользователь нажмет кнопку Cancel или просто закроет окно, то функция confirm возвращает значение false (нет). Поэтому в нашем примере функция eatApples вызывается снова только в том случае, когда пользователь щелкнет на кнопке OK.
В конце этой лекции будет рассмотрена область действия переменной. Как можно видеть, в последнем примере переменная apples находится вне функции eatApples. Это делает переменнуюapples "глобальной переменной", т.е. она будет доступна из любой функции. Переменная eat, с другой стороны, является локальной переменной и существует только внутри функции eatApples. Кроме того, каждый раз при вызове функции eatApples переменная eat не будет существовать, пока не будет снова определена функцией prompt.
Чтобы увидеть эту концепцию в действии, напишем две простые функции счета:
function counting1(){
var count = 0;
count++;
alert(count);
}
var count = 0;
function counting2(){
count++;
alert(count);
}
Если запустить этот пример в браузере и щелкнуть на каждой кнопке несколько раз, то можно заметить, что counting1 всегда выдает одно и то же значение, 1. counting2, с другой стороны, выдает увеличивающееся число. Почему это происходит? Посмотрим просто сначала на counting1. Можно видеть, что каждый раз при выполнении counting1 прежде всего создается переменнаяcount и ее значение задается равным 0. В следующей строке переменная count увеличивается на 1.
Оператор ++ пока еще не встречался. count++ просто увеличивает count на 1. Другими словами, это в точности то же самое, что написать count += 1 или count = count + 1. Поскольку увеличение на 1 является в программировании очень распространенным действием, то для него существует специальный оператор. Аналогично оператор -- вычитает 1 из переменной: count--.
Каждый раз, когда функция counting1 выполняет alert(count), она сообщает значение новой переменной count, которое только что было определено как 0+1.
Теперь посмотрим на counting2. Можно видеть, что переменная count в этом случае находится вне функции. Даже до вызова этой функции значение count задано как 0. При вызове counting2прежде всего происходит увеличение переменной count на 1. Так как мы не восстанавливаем значение count в 0, как в случае counting1, то переменная count продолжает сохранять свое значение, и все происходит, как и предполагалось.
Теперь читатель получил общее понимание некоторых фундаментальных понятий программирования и JavaScript, в частности. В 3 лекции будут рассмотрены циклы и формы.