Работа с PHP, MySQL и JavaScript для создания динамических веб-приложений может быть непростой задачей, но знание нескольких приёмов программирования значительно упростит её. Эта шпаргалка покажет вам, как извлекать данные из различных баз данных в PHP-программах, отфильтровывать нежелательные или потенциально опасные данные из веб-форм, быстро находить данные, хранящиеся в базе данных MySQL, и запускать синхронизированные события в JavaScript-программах.
Использование функций библиотеки объектов базы данных PHP
Если вы знаете, что ваше приложение будет работать в среде MySQL, имеет смысл использовать php_mysqli
функции библиотеки для взаимодействия с базой данных. Однако может возникнуть необходимость написать приложение, работающее и с другими базами данных. PHP поддерживает довольно много библиотек баз данных, каждая из которых взаимодействует с определённым сервером баз данных. Однако недостаток заключается в том, что вам придётся создавать отдельную версию приложения для каждого сервера баз данных.
В качестве альтернативы вы можете использовать функции библиотеки PHP Database Object (PDO). PDO позволяет использовать один и тот же код для взаимодействия с любым типом сервера баз данных. Вам просто нужно указать сервер базы данных, используемый для подключения, а PDO сделает всё остальное!
Чтобы открыть PDO-соединение с базой данных, необходимо создать экземпляр объекта PDO:
$con = new PDO(
"mysql:host=localhost;dbname=mydata;charset=utf8',
'username', 'password');
То, к каким базам данных может подключаться ваше приложение, зависит от того, какие драйверы баз данных PDO загружены на PHP-сервер. Чтобы определить доступные драйверы, используйте getAvailableDrivers()
статический метод:
$list = PDO::getAvailableDrivers();
foreach ($list as $db) {
echo "$db<br>\n";
}
После подключения к базе данных, чтобы отправить простой запрос, используйте query()
метод:
$query = "SELECT bidderid, lastname, firstname, address
FROM bidders";
foreach($con->query($query) as $row) {
$bidderid = $row['bidderid'];
$lastname = $row['lastname'];
firstname = $row['firstname'];
$address = $row['address'];
echo "$bidderid - $lastname, $firstname<br>$adress<br><br>\n";
}
В отличие от php_mysqli
библиотеки, метод библиотеки PDO query()
возвращает сами записи данных из результирующего набора. Вам не нужно извлекать результаты. Каждый раз при вызове query()
метода возвращается следующая запись данных из результирующего набора.
Вы также можете использовать подготовленные операторы с библиотекой PDO для фильтрации входных данных:
$sql = "INSERT INTO bidders (bidderid, lastname,
firstname, address) VALUES (?, ?, ?, ?)";
$stmt = $con->prepare($sql);
$stmt->bindParam(1, 100, PDO::PARAM_INT);
$stmt->bindParam(2, 'Blum', PDO::PARAM_STR);
$stmt->bindParam(3, 'Rich', PDO::PARAM_STR);
$stmt->bindParam(4, "123 Main St.; Chicago, IL 60633",
PDO::PARAM_STR);
$stmt->execute();
Используя этот метод, вы можете отправить несколько записей данных, привязав каждый набор данных к подготовленному оператору и выполнив их по отдельности.
Благодаря библиотеке PDO вы теперь можете написать одно приложение, которое будет работать с любым базовым сервером баз данных, который понадобится вашим клиентам!
Фильтрация данных в PHP
Проверка входных данных критически важна для любого PHP-приложения. Вы же не хотите, чтобы злоумышленник пытался атаковать вашу систему, отправляя неверные данные из форм? К счастью, разработчики PHP помогли с этим процессом.
PHP предоставляет несколько функций фильтрации, которые позволяют легко проверять данные на корректность или удалять нежелательные данные. В следующей таблице перечислены различные функции, доступные в семействе фильтров.
Функции фильтра PHP
Функция | Описание |
filter_has_var() | Проверяет, существует ли переменная указанного типа |
filter_id() | Возвращает идентификатор указанного фильтра. |
filter_input() | Извлекает значение, переданное с помощью GET, POST, сеансов или файлов cookie, и фильтрует его. |
filter_input_array() | Извлекает несколько значений, переданных в PHP-программу, и фильтрует их. |
filter_list() | Возвращает список поддерживаемых фильтров |
filter_var() | Фильтрует переменную |
filter_var_array() | Фильтрует список переменных |
Эти функции позволяют указать переменную для проверки и тип проверки. Существует две основные группы фильтров:
- Проверка: проверяет наличие указанных данных.
- Санация: проверяет наличие указанных данных и удаляет их.
В следующей таблице показаны различные доступные фильтры проверки.
Фильтры проверки PHP
Фильтр | Описание |
FILTER_VALIDATE_BOOLEAN | Проверяет допустимость логического значения |
FILTER_VALIDATE_EMAIL | Проверяет действительный адрес электронной почты |
FILTER_VALIDATE_FLOAT | Проверяет допустимость значения с плавающей точкой |
FILTER_VALIDATE_INT | Проверяет допустимость целочисленного значения |
FILTER_VALIDATE_IP | Проверяет правильность значения IP-адреса |
FILTER_VALIDATE_REGEXP | Проверяет правильность значения регулярного выражения |
FILTER_VALIDATE_URL | Проверяет правильность строки URL |
Проверки достоверности возвращают TRUE
значение, если данные содержат проверяемый тип данных, или FALSE
значение, если нет.
В следующей таблице показаны различные доступные санитарные фильтры.
Фильтры очистки PHP
Фильтр | Описание |
FILTER_SANITIZE_EMAIL | Удаляет недопустимые символы из адреса электронной почты |
FILTER_SANITIZE_ENCODED | Кодирует специальные символы в строке |
FILTER_SANITIZE_MAGIC_QUOTES | Применить addslashes() функцию |
FILTER_SANITIZE_NUMBER_FLOAT | Удалить все символы, кроме цифр, +, – иE |
FILTER_SANITIZE_NUMBER_INT | Удаляет все символы, кроме цифр и + или – |
FILTER_SANITIZE_SPECIAL_CHARS | Удаляет все специальные символы в строке |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | То же, что иhtmlspecialchars() |
FILTER_SANITIZE_STRING | Удаляет HTML-теги и специальные символы из строки |
FILTER_SANITIZE_STRIPPED | То же, что иFILTER_SANITIZE_STRING |
FILTER_SANITIZE_URL | Удаляет все недопустимые символы из строки URL. |
Вы можете объединить функции очистки и проверки в своем коде, чтобы гарантировать корректность данных, получаемых из HTML-формы:
$address = $_POST['email'];
$address = filter_var($address, FILTER_SANITIZE_EMAIL);
if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
echo "<h2>Sorry, you have entered an incorrect address</h2>";
} else {
echo "<h2>Thank you for submitting your data</h2>";
}
Использование функций фильтрации PHP поможет вам безопасно обрабатывать любые типы входных данных, полученных в HTML-формах вашего приложения.
Использование регулярных выражений в MySQL
Поиск данных в SELECT
операторе MySQL подразумевает включение WHERE
условия. Поиск одного элемента выполняется легко:
SELECT prodid, product WHERE prodid = 100;
Сложность возникает, если вам нужно найти элемент по шаблону поиска. MySQL использует LIKE
для этого следующее предложение:
SELECT prodid, product WHERE product LIKE 'apple%';
Знак процента действует как подстановочный знак, сопоставляя ноль или более символов в строке. Поэтому эта функция вернет apples
, а также apple juice
.
Подстановочный знак в операторе LIKE удобен, но его возможности несколько ограничены. Более продвинутый способ поиска данных — использование сопоставления с шаблоном регулярного выражения . Регулярные выражения используют собственный язык для определения шаблона, используемого для сопоставления данных с шаблонами.
MySQL поддерживает регулярные выражения с использованием REGEXP
оператора . Шаблон соответствия указывается аналогично тому, как это делается с LIKE
оператором :
SELECT prodid, product WHERE product REGEXP 'apple';
В регулярном выражении по умолчанию любой введенный текст сопоставляется в любом месте поля данных. Таким образом, этот запрос вернет apple
, apple juice
, или candy apple
.
Вы можете точно указать, где в строке должен располагаться текстовый шаблон, используя символы-якоря. Символ вставки ( ^
) обозначает начало строки. Таким образом, следующий запрос соответствует только apple
и apple juice
:
SELECT prodid, product WHERE product REGEXP '^apple';
Знак доллара обозначает конец строки и возвращает apple
или candy apple
:
SELECT prodid, product WHERE product REGEXP 'apple$';
В языке регулярных выражений MySQL используется множество специальных символов для определения шаблона соответствия. В следующей таблице представлены наиболее популярные из них.
Символы регулярных выражений MySQL
Характер | Описание |
^string | Соответствует тексту в начале строки |
string$ | Соответствует тексту в конце строки |
. | Соответствует любому отдельному символу (включая специальные символы) |
a* | Соответствует последовательности из нуля или более указанных символов |
a+ | Соответствует последовательности одного или нескольких указанных символов. |
a? | Соответствует нулю или одному вхождению указанного символа. |
abc|def | Соответствует одной из указанных строк |
[abc] | Соответствует любому из указанных символов |
Используя операторы LIKE
и REGEXP
в WHERE
предложении, вы можете настроить свое SELECT
выражение для поиска практически любого типа данных, которые необходимы для вашего приложения!
Работа с таймерами в JavaScript
Часто возникает необходимость динамически запускать событие на веб-странице, без каких-либо действий со стороны посетителя. JavaScript предоставляет две простые функции, позволяющие запланировать запуск события на заранее выбранное время.
Функция setTimeout()
позволяет запланировать запуск указанной функции в определенное время, начиная с текущего времени:
setTimeout(function, time);
Параметр function
определяет имя функции, которую нужно вызвать, а time
параметр определяет время (в миллисекундах), в течение которого браузер будет ожидать запуска функции. Примером может служить следующий код, который запускает функцию myfunction()
через пять секунд:
setTimeout(myfunction, 5000);
Вы также можете столкнуться с ситуациями, когда вам необходимо, чтобы определённая функция запускалась многократно с заданным интервалом, например, если вашему приложению требуется обновить данные из базы данных приложения на сервере. Вместо установки нескольких setTimeout()
функций вы можете использовать функцию setInterval():
setInterval(function, time);
С помощью этой setInterval()
функции JavaScript повторяет событие-триггер в течение указанного количества миллисекунд и повторяет функцию для каждого интервала.
Если вам нужно отключить функции таймера до их срабатывания, используйте функции clearTimeout()
и clearInterval()
. Вам необходимо включить значение, возвращаемое отдельными функциями, при их установке в качестве параметра:
$timer = setInterval(myfunction, 5000);
clearInterval($timer);
Используя функции таймера в PHP, вы можете запускать автоматическое обновление веб-страницы через регулярные интервалы, проверяя наличие новых данных. Это удобно при работе с Ajax-приложениями.