Загрузка данных


<?php
session_start();

$host = 'localhost';
$db   = 'mydb';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$action = $_GET['action'] ?? '';

if ($action === 'logout') {
    session_destroy();
    header('Location: index.php');
    exit;
}

if ($action === 'delete_user' && isset($_GET['id']) && $_SESSION['is_admin'] ?? false) {
    $id = (int)$_GET['id'];
    if ($id != $_SESSION['user_id']) {
        $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
        $stmt->execute([$id]);
    }
    header('Location: index.php?action=admin');
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['register'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $is_admin = isset($_POST['is_admin']) ? 1 : 0;
    try {
        $stmt = $pdo->prepare("INSERT INTO users (username, password, is_admin) VALUES (?, ?, ?)");
        $stmt->execute([$username, $password, $is_admin]);
        $success = "Регистрация успешна, теперь войдите.";
    } catch (PDOException $e) {
        $error = "Пользователь уже существует.";
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
    $stmt->execute([$username, $password]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($user) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        $_SESSION['is_admin'] = (bool)$user['is_admin'];
        header('Location: index.php');
        exit;
    } else {
        $error = "Неверный логин или пароль.";
    }
}

$calcResult = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['calc'])) {
    $a = (float)$_POST['a'];
    $b = (float)$_POST['b'];
    $op = $_POST['op'];
    switch ($op) {
        case '+': $calcResult = $a + $b; break;
        case '-': $calcResult = $a - $b; break;
        case '*': $calcResult = $a * $b; break;
        case '/': $calcResult = $b != 0 ? $a / $b : 'Ошибка: деление на 0'; break;
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Калькулятор с админкой</title>
    <style>
        body { font-family: Arial; margin: 30px; }
        .block { border: 1px solid #ccc; padding: 15px; margin-bottom: 20px; width: 350px; }
        .error { color: red; }
        .success { color: green; }
        table { border-collapse: collapse; }
        td, th { border: 1px solid #ddd; padding: 5px; }
    </style>
</head>
<body>

<?php if (!isset($_SESSION['user_id'])): ?>
    <div class="block">
        <h3>Вход</h3>
        <?php if (isset($error)) echo "<div class='error'>$error</div>"; ?>
        <?php if (isset($success)) echo "<div class='success'>$success</div>"; ?>
        <form method="post">
            Логин: <input type="text" name="username" required><br><br>
            Пароль: <input type="password" name="password" required><br><br>
            <button type="submit" name="login">Войти</button>
        </form>
    </div>

    <div class="block">
        <h3>Регистрация</h3>
        <form method="post">
            Логин: <input type="text" name="username" required><br><br>
            Пароль: <input type="password" name="password" required><br><br>
            <label>
                <input type="checkbox" name="is_admin"> Администратор
            </label><br><br>
            <button type="submit" name="register">Зарегистрироваться</button>
        </form>
    </div>

<?php else: ?>
    <div>
        Привет, <?= htmlspecialchars($_SESSION['username']) ?> 
        (<?= $_SESSION['is_admin'] ? 'Админ' : 'Пользователь' ?>)
        <a href="?action=logout">Выйти</a>
    </div>

    <div class="block">
        <h3>Калькулятор</h3>
        <form method="post">
            <input type="number" step="any" name="a" required> 
            <select name="op">
                <option>+</option><option>-</option><option>*</option><option>/</option>
            </select>
            <input type="number" step="any" name="b" required>
            <button type="submit" name="calc">=</button>
        </form>
        <?php if ($calcResult !== ''): ?>
            <strong>Результат: <?= htmlspecialchars($calcResult) ?></strong>
        <?php endif; ?>
    </div>

    <?php if ($_SESSION['is_admin']): ?>
        <div class="block">
            <h3>Админ-панель: управление пользователями</h3>
            <table>
                <tr><th>ID</th><th>Логин</th><th>Админ?</th><th>Удалить</th></tr>
                <?php
                $stmt = $pdo->query("SELECT id, username, is_admin FROM users ORDER BY id");
                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                    echo "<tr>";
                    echo "<td>{$row['id']}</td>";
                    echo "<td>" . htmlspecialchars($row['username']) . "</td>";
                    echo "<td>" . ($row['is_admin'] ? 'Да' : 'Нет') . "</td>";
                    if ($row['id'] != $_SESSION['user_id']) {
                        echo "<td><a href='?action=delete_user&id={$row['id']}' onclick='return confirm(\"Удалить?\")'>Удалить</a></td>";
                    } else {
                        echo "<td>—</td>";
                    }
                    echo "</tr>";
                }
                ?>
            </table>
        </div>
    <?php endif; ?>
<?php endif; ?>

</body>
</html>