Hi! Could we please enable some services and cookies to improve your experience and our website?

SQLize | PHPize | SQLtest

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

A A A
Login    Share code      Blog   FAQ
Copy Format Clear
<?php // Конфигурация БД $servername = "localhost"; $username = "root"; $password = ""; $dbname = "shop"; $port = 3306; // Валидация параметров $min_orders = filter_input(INPUT_GET, 'min_orders', FILTER_VALIDATE_INT, [ 'options' => ['default' => 3, 'min_range' => 1] ]); $min_total = filter_input(INPUT_GET, 'min_total', FILTER_VALIDATE_FLOAT, [ 'options' => ['default' => 1000, 'min_range' => 0] ]); try { // Подключение к серверу MySQL $conn = mysqli_connect($servername, $username, $password, '', $port); if (!$conn) { throw new Exception("MySQL connection error: " . mysqli_connect_error()); } // Создание БД и таблиц если не существуют mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS $dbname"); mysqli_select_db($conn, $dbname); mysqli_query($conn, " CREATE TABLE IF NOT EXISTS customers ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(50) UNIQUE, registration_date DATE ) "); mysqli_query($conn, " CREATE TABLE IF NOT EXISTS products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), category VARCHAR(30) ) "); mysqli_query($conn, " CREATE TABLE IF NOT EXISTS orders ( id INT PRIMARY KEY AUTO_INCREMENT, customer_id INT, product_id INT, quantity INT, price DECIMAL(10,2), order_date DATE, FOREIGN KEY (customer_id) REFERENCES customers(id), FOREIGN KEY (product_id) REFERENCES products(id) ) "); // Добавление тестовых данных mysqli_query($conn, " INSERT IGNORE INTO customers (name, email, registration_date) VALUES ('Иван Петров', 'ivan@mail.com', '2023-01-15'), ('Мария Сидорова', 'maria@mail.com', '2022-11-30'), ('Алексей Иванов', 'alex@mail.com', '2023-03-22') "); mysqli_query($conn, " INSERT IGNORE INTO products (name, category) VALUES ('Ноутбук ASUS', 'Электроника'), ('Смартфон Xiaomi', 'Электроника'), ('Книга PHP 8', 'Книги') "); mysqli_query($conn, " INSERT IGNORE INTO orders (customer_id, product_id, quantity, price, order_date) VALUES (1, 1, 2, 45000, '2023-05-10'), (1, 3, 1, 1200, '2023-05-15'), (2, 2, 3, 25000, '2023-04-20'), (3, 1, 1, 45000, '2023-05-01') "); // Основной запрос $sql = " SELECT c.name, c.email, MAX(o.order_date) as last_order, COUNT(o.id) as total_orders, SUM(o.quantity * o.price) as total_spent, AVG(o.quantity * o.price) as avg_order FROM customers c JOIN orders o ON c.id = o.customer_id GROUP BY c.id HAVING total_orders > ? AND total_spent > ? ORDER BY total_spent DESC "; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "dd", $min_orders, $min_total); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if (!$result) { throw new Exception("Query error: " . mysqli_error($conn)); } } catch (Exception $e) { die("<h3>Error: " . htmlspecialchars($e->getMessage()) . "</h3> <p>Проверьте:</p> <ul> <li>Доступность MySQL-сервера</li> <li>Правильность логина/пароля</li> <li>Наличие прав у пользователя '$username'</li> </ul>"); } ?> <!DOCTYPE html> <html> <head> <title>Аналитика клиентов</title> <style> table {border-collapse: collapse; margin: 20px 0;} th, td {padding: 12px; border: 1px solid #ddd; text-align: left;} th {background-color: #4CAF50; color: white;} tr:hover {background-color: #f5f5f5;} .filter-box {padding: 20px; background: #f0f0f0;} </style> </head> <body> <div class="filter-box"> <form method="GET"> <label>Минимум заказов: <input type="number" name="min_orders" value="<?= htmlspecialchars($min_orders) ?>" min="1"> </label> <label>Минимальная сумма: <input type="number" name="min_total" value="<?= htmlspecialchars($min_total) ?>" step="0.01" min="0"> </label> <button type="submit">Применить фильтры</button> </form> </div> <?php if (mysqli_num_rows($result) > 0): ?> <table> <tr> <th>Имя</th> <th>Email</th> <th>Последний заказ</th> <th>Всего заказов</th> <th>Общая сумма</th> <th>Средний чек</th> </tr> <?php while($row = mysqli_fetch_assoc($result)): ?> <tr> <td><?= htmlspecialchars($row['name']) ?></td> <td><?= htmlspecialchars($row['email']) ?></td> <td><?= date('d.m.Y', strtotime($row['last_order'])) ?></td> <td><?= $row['total_orders'] ?></td> <td><?= number_format($row['total_spent'], 2, ',', ' ') ?> ₽</td> <td><?= number_format($row['avg_order'], 2, ',', ' ') ?> ₽</td> </tr> <?php endwhile; ?> </table> <?php else: ?> <p>Нет данных, соответствующих критериям поиска.</p> <?php endif; ?> </body> </html> <?php mysqli_close($conn); ?>

Stuck with a problem? Got Error? Ask AI support!

Copy Clear