Files
crm.clientright.ru/erv_ticket/database.php
Fedor 9245768987 🚀 CRM Files Migration & Real-time Features
 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!
2025-10-24 19:59:28 +03:00

127 lines
3.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}
?>