✨ Features: - Migrated ALL files to new S3 structure (Projects, Contacts, Accounts, HelpDesk, Invoice, etc.) - Added Nextcloud folder buttons to ALL modules - Fixed Nextcloud editor integration - WebSocket server for real-time updates - Redis Pub/Sub integration - File path manager for organized storage - Redis caching for performance (Functions.php) 📁 New Structure: Documents/Project/ProjectName_ID/file_docID.ext Documents/Contacts/FirstName_LastName_ID/file_docID.ext Documents/Accounts/AccountName_ID/file_docID.ext 🔧 Technical: - FilePathManager for standardized paths - S3StorageService integration - WebSocket server (Node.js + Docker) - Redis cache for getBasicModuleInfo() - Predis library for Redis connectivity 📝 Scripts: - Migration scripts for all modules - Test pages for WebSocket/SSE/Polling - Documentation (MIGRATION_*.md, REDIS_*.md) 🎯 Result: 15,000+ files migrated successfully!
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);
|
||
}
|
||
?>
|