28.09.2025
PHP, MySQL и JavaScript

PHP, MySQL и JavaScript

Работа с 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';

В регулярном выражении по умолчанию любой введенный текст сопоставляется в любом месте поля данных. Таким образом, этот запрос вернет appleapple 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-приложениями.