Files
crm.clientright.ru/erv_ticket/database.php

127 lines
3.9 KiB
PHP
Raw Normal View History

<?php
/**
* ============================================
* DATABASE.PHP - Проверка полисов в БД
* ============================================
*
* БЕЗОПАСНОСТЬ: Использует prepared statements для защиты от SQL-инъекций
* ПРОИЗВОДИТЕЛЬНОСТЬ: Выбирает только нужную запись вместо всей таблицы
*
* Обновлено: 23.10.2025
*/
// Загрузка конфигурации из .env
require_once __DIR__ . '/config.php';
// Заголовки для JSON
header('Content-Type: application/json; charset=utf-8');
// Обработка запросов
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'user_verify':
user_verify();
break;
default:
echo json_encode(['success' => 'false', 'message' => 'Неизвестное действие']);
break;
}
} else {
echo json_encode(['success' => 'false', 'message' => 'Действие не указано']);
}
/**
* Проверка полиса в базе данных
*
* @return void Выводит JSON с результатом
*/
function user_verify() {
// Подключение к БД
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (!$link) {
echo json_encode([
'success' => 'false',
'message' => 'Ошибка подключения к базе данных'
]);
exit;
}
// Установка кодировки
mysqli_set_charset($link, 'utf8mb4');
// Получение и валидация данных
$birthday = isset($_POST['birthday']) ? trim($_POST['birthday']) : '';
$inn = isset($_POST['inn']) ? trim($_POST['inn']) : '';
// Проверка обязательных полей
if (empty($inn)) {
echo json_encode([
'success' => 'false',
'message' => 'Номер полиса не указан'
]);
mysqli_close($link);
exit;
}
// ✅ ЗАЩИТА: Prepared statement вместо прямого SQL
// Выбираем только нужные поля и только 1 запись
$sql = "SELECT voucher, insured_from, insured_to
FROM lexrpiority
WHERE voucher = ?
LIMIT 1";
$stmt = mysqli_prepare($link, $sql);
if (!$stmt) {
echo json_encode([
'success' => 'false',
'message' => 'Ошибка подготовки запроса'
]);
mysqli_close($link);
exit;
}
// Привязка параметров (s = string)
mysqli_stmt_bind_param($stmt, "s", $inn);
// Выполнение запроса
if (!mysqli_stmt_execute($stmt)) {
echo json_encode([
'success' => 'false',
'message' => 'Ошибка выполнения запроса'
]);
mysqli_stmt_close($stmt);
mysqli_close($link);
exit;
}
// Получение результата
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
// Полис найден
echo json_encode([
'success' => 'true',
'message' => 'Полис найден',
'result' => [
'voucher' => $row['voucher'],
'insured_from' => $row['insured_from'],
'insured_to' => $row['insured_to']
]
]);
} else {
// Полис не найден
echo json_encode([
'success' => 'false',
'message' => 'Полис не найден',
'result' => ''
]);
}
// Закрытие соединений
mysqli_stmt_close($stmt);
mysqli_close($link);
}
?>