Files
web_work/fix_database.php
2025-12-16 01:28:06 +03:00

89 lines
3.5 KiB
PHP
Raw 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
// fix_database.php
require_once 'config/database.php';
$db = Database::getInstance()->getConnection();
echo "<h2>Исправление проблем с базой данных</h2>";
try {
// 1. Проверяем есть ли категории
$stmt = $db->query("SELECT COUNT(*) FROM categories");
$cat_count = $stmt->fetchColumn();
if ($cat_count == 0) {
echo "<p>Добавляем тестовые категории...</p>";
$db->exec("
INSERT INTO categories (name, slug, description) VALUES
('Диваны', 'divany', 'Мягкая мебель для гостиной'),
('Кресла', 'kresla', 'Кресла для гостиной и офиса'),
('Кровати', 'krovati', 'Мебель для спальни')
");
echo "<p style='color: green;'>✓ Категории добавлены</p>";
}
// 2. Проверяем товары с некорректными category_id
$stmt = $db->query("
SELECT COUNT(*) as bad_count
FROM products
WHERE category_id IS NULL OR category_id NOT IN (SELECT category_id FROM categories)
");
$bad_count = $stmt->fetchColumn();
if ($bad_count > 0) {
echo "<p>Исправляем товары с некорректными категориями ($bad_count шт)...</p>";
// Устанавливаем первую доступную категорию
$stmt = $db->query("SELECT category_id FROM categories LIMIT 1");
$first_cat = $stmt->fetchColumn();
if ($first_cat) {
$db->exec("
UPDATE products
SET category_id = $first_cat
WHERE category_id IS NULL OR category_id NOT IN (SELECT category_id FROM categories)
");
echo "<p style='color: green;'>✓ Товары исправлены (установлена категория ID: $first_cat)</p>";
}
}
// 3. Показываем текущее состояние
echo "<h3>Текущее состояние:</h3>";
// Категории
$stmt = $db->query("SELECT category_id, name FROM categories ORDER BY category_id");
echo "<p><strong>Категории:</strong></p><ul>";
while ($row = $stmt->fetch()) {
echo "<li>ID: {$row['category_id']} - {$row['name']}</li>";
}
echo "</ul>";
// Товары
$stmt = $db->query("
SELECT p.product_id, p.name, p.category_id, c.name as cat_name
FROM products p
LEFT JOIN categories c ON p.category_id = c.category_id
ORDER BY p.product_id
");
echo "<p><strong>Товары:</strong></p>";
echo "<table border='1' cellpadding='5'>";
echo "<tr><th>ID</th><th>Название</th><th>Категория ID</th><th>Категория</th></tr>";
while ($row = $stmt->fetch()) {
echo "<tr>";
echo "<td>{$row['product_id']}</td>";
echo "<td>" . htmlspecialchars($row['name']) . "</td>";
echo "<td>" . ($row['category_id'] ?: 'NULL') . "</td>";
echo "<td>" . ($row['cat_name'] ?: 'Без категории') . "</td>";
echo "</tr>";
}
echo "</table>";
echo "<p style='color: green; margin-top: 20px;'>✓ База данных исправлена!</p>";
} catch (PDOException $e) {
echo "<p style='color: red;'>Ошибка: " . $e->getMessage() . "</p>";
}
?>