127 lines
3.9 KiB
PHP
127 lines
3.9 KiB
PHP
|
|
<?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);
|
|||
|
|
}
|
|||
|
|
?>
|