В то время как все пытаются научить ИИ писать такой хороший код, чтобы он заменил всех программистов, я решил попросить его сделать прямо противоположную задачу - написать максимально плохой код. Мой промпт звучал так:

Напиши максимально ПЛОХОЙ код на языке PHP, реализующий функционал интернет-магазина.

В качестве ИИ я использовал DeepSeek. Разумеется, в режиме рассуждения - ведь чтобы написать максимально плохой код, мне понадобится вся интеллектуальная мощность искусственного интеллекта. Почему плохой код должен быть именно на PHP, я думаю, объяснять не надо.

Итак, сначала рассуждения ИИ:

Мы должны написать максимально плохой код на PHP для интернет-магазина. Задача явно шуточная, нужно продемонстрировать плохие практики: отсутствие безопасности, уязвимости, нечитаемый код, использование устаревших функций, глобальные переменные, смешивание логики и представления, отсутствие структуры, потенциальные ошибки и т.д.

Нужно создать что-то работающее (хотя бы по логике), но с кучей проблем. Подумаем о типичном функционале интернет-магазина: каталог товаров, корзина, оформление заказа, возможно, админка. Но для "максимально плохого" можно сделать один файл, который делает всё.

Плохие практики:

  • Использование mysql_* функций (устаревшие, удалены в PHP7).

  • Отсутствие экранирования входных данных -> SQL-инъекции.

  • Открытое хранение паролей (plain text) или слабое хеширование.

  • Использование глобальных переменных ($_GET, $_POST) напрямую в SQL.

  • Отсутствие валидации.

  • Вывод ошибок на экран (display_errors).

  • Смешивание HTML и PHP без шаблонов.

  • Повторное использование кода (copy-paste).

  • Жестко закодированные пути, пароли.

  • Отсутствие обработки ошибок.

  • Длинные процедурные файлы.

  • Использование extract($_POST) для создания переменных.

  • Отсутствие защиты от XSS (вывод неэкранированных данных).

  • Отсутствие CSRF-защиты.

  • Сессии без регенерации, уязвимости фиксации сессии.

  • Прямое включение файлов без проверки.

  • Использование eval или других опасных функций.

  • Сложная логика с goto? Можно добавить.

Сделаем один файл index.php, который обрабатывает все действия через параметр action. Будем использовать MySQL (устаревшее расширение). Сохраним всё в таблицы: products, users, orders. Добавим админку для добавления товаров (без проверки прав, просто по секретному параметру).

Пароли в открытом виде. SQL-инъекции в каждом запросе. Также можно использовать динамические имена таблиц через пользовательский ввод.

Добавим файловую систему для картинок товаров: загрузка файлов без проверки типа и размера, прямое сохранение в публичную папку.

Сделаем корзину в сессии, но без очистки данных.

Напишем в функциональном стиле с длинными строками.

Также можно использовать тернарные операторы в нечитаемом виде.

Добавим "инновационные" решения, например, использование eval для вычисления цены со скидкой: eval("return $price * $discount;") с пользовательским вводом.

Можно использовать include для разных частей страницы, но без проверки, что может привести к LFI.

Также добавим функцию mail для отправки подтверждения заказа, но без проверки email, спам.

Итоговый код должен быть кошмаром для любого разработчика.

Приступим к написанию.

А теперь посмотрим код:

<?php
// =====================================================
// MEGA PLOHOY INTERNET MAGAZIN
// VERSIYA 1.0 (BETA)
// AVTOR: NEIZVESTNY GENIY
// =====================================================

// VKLUCHAEM VSE OSHIBKI NA EKRAN - TAK NADEZHNEE
error_reporting(E_ALL);
ini_set('display_errors', 1);

// PODKLUCHAEMSYA K BAZE DANNYKH (BEZ PROVEROK)
mysql_connect('localhost', 'root', '');
mysql_select_db('shop');

// SOZDAEM TABLITSY, ESLI IKH NET (S POMOSHYU ZAPROSA)
mysql_query("CREATE TABLE IF NOT EXISTS products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name TEXT,
    price TEXT,
    image TEXT,
    descr TEXT
)");

mysql_query("CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    login TEXT,
    password TEXT,
    email TEXT,
    is_admin INT
)");

mysql_query("CREATE TABLE IF NOT EXISTS orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    products TEXT,
    total TEXT,
    date DATETIME
)");

// VSTAVIM ADMINA, ESLI EGO NET (PAROL' - ADMIN)
$res = mysql_query("SELECT * FROM users WHERE login = 'admin'");
if (mysql_num_rows($res) == 0) {
    mysql_query("INSERT INTO users (login, password, email, is_admin) VALUES ('admin', 'admin', 'admin@localhost', 1)");
}

// GLAVNAYA LOGIKA: POLUCHAEM DEYSTVIE IZ GET ILI POST
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'catalog';

// SEANSU NADO VKLYUCHIT' DLYA KORZINY
session_start();

// EKSTRENNO SOZDAEM PEREMENNYE IZ POST - UDOBNO!
if ($_POST) extract($_POST);

// OBRABOTCHIK DEYSTVII
switch ($action) {
    case 'catalog':
        showCatalog();
        break;
    case 'product':
        showProduct();
        break;
    case 'cart':
        showCart();
        break;
    case 'add_to_cart':
        addToCart();
        break;
    case 'remove_from_cart':
        removeFromCart();
        break;
    case 'checkout':
        checkout();
        break;
    case 'admin':
        adminPanel();
        break;
    case 'add_product':
        addProduct();
        break;
    case 'delete_product':
        deleteProduct();
        break;
    case 'login':
        login();
        break;
    case 'logout':
        logout();
        break;
    case 'register':
        register();
        break;
    default:
        showCatalog();
}

// FUNKTSII

function showCatalog() {
    // POLUCHAEM VSE TOVARY IZ BAZY
    $res = mysql_query("SELECT * FROM products");
    echo "<h1>KATALOG TOVAROV</h1>";
    echo "<a href='?action=cart'>Korzina</a> | <a href='?action=admin'>Admin panel</a> | <a href='?action=login'>Login</a><br><br>";
    while ($row = mysql_fetch_assoc($res)) {
        // VYVODIM TOVAR S SSYLKOY NA PODROBNEE
        echo "<div style='border:1px solid #ccc; margin:5px; padding:5px;'>";
        echo "<h3>" . $row['name'] . "</h3>";
        echo "<p>Cena: " . $row['price'] . " rub.</p>";
        if ($row['image']) echo "<img src='uploads/" . $row['image'] . "' width='100'><br>";
        echo "<a href='?action=product&id=" . $row['id'] . "'>Podrobnee</a> | ";
        echo "<a href='?action=add_to_cart&id=" . $row['id'] . "'>V korzinu</a>";
        echo "</div>";
    }
}

function showProduct() {
    $id = $_GET['id'];
    // OPASNYY ZAPROS BEZ EKRANIROVANIYA
    $res = mysql_query("SELECT * FROM products WHERE id = $id");
    $row = mysql_fetch_assoc($res);
    if (!$row) {
        echo "Tovar ne nayden!";
        return;
    }
    echo "<h1>" . $row['name'] . "</h1>";
    echo "<p>Cena: " . $row['price'] . "</p>";
    echo "<p>" . $row['descr'] . "</p>";
    if ($row['image']) echo "<img src='uploads/" . $row['image'] . "'><br>";
    echo "<a href='?action=add_to_cart&id=" . $row['id'] . "'>Dobavit' v korzinu</a><br>";
    echo "<a href='?action=catalog'>Nazad v katalog</a>";
}

function addToCart() {
    $id = $_GET['id'];
    if (!isset($_SESSION['cart'])) $_SESSION['cart'] = array();
    // PROVERIM, CHTO TAKOY Tovar EST'
    $res = mysql_query("SELECT * FROM products WHERE id = $id");
    if (mysql_num_rows($res) > 0) {
        $_SESSION['cart'][$id] = isset($_SESSION['cart'][$id]) ? $_SESSION['cart'][$id] + 1 : 1;
    }
    header("Location: ?action=cart");
    exit;
}

function removeFromCart() {
    $id = $_GET['id'];
    unset($_SESSION['cart'][$id]);
    header("Location: ?action=cart");
    exit;
}

function showCart() {
    echo "<h1>KORZINA</h1>";
    if (empty($_SESSION['cart'])) {
        echo "Korzina pusta.";
        echo "<br><a href='?action=catalog'>V katalog</a>";
        return;
    }
    $total = 0;
    foreach ($_SESSION['cart'] as $id => $qty) {
        $res = mysql_query("SELECT * FROM products WHERE id = $id");
        $row = mysql_fetch_assoc($res);
        if (!$row) continue;
        $subtotal = $row['price'] * $qty;
        $total += $subtotal;
        echo "<div>";
        echo $row['name'] . " x $qty = $subtotal rub. ";
        echo "<a href='?action=remove_from_cart&id=$id'>Udalit'</a>";
        echo "</div>";
    }
    echo "<hr><b>ITOGO: $total rub.</b><br>";
    echo "<a href='?action=catalog'>Prodolzhit' pokupki</a> | ";
    if (isset($_SESSION['user_id'])) {
        echo "<a href='?action=checkout'>Oformit' zakaz</a>";
    } else {
        echo "<a href='?action=login'>Voyti dlya oformleniya</a>";
    }
}

function checkout() {
    if (!isset($_SESSION['user_id'])) {
        header("Location: ?action=login");
        exit;
    }
    if (empty($_SESSION['cart'])) {
        echo "Korzina pusta.";
        return;
    }
    // SOBIRAEM DANNye O ZAKAZE
    $user_id = $_SESSION['user_id'];
    $products = serialize($_SESSION['cart']);
    $total = 0;
    foreach ($_SESSION['cart'] as $id => $qty) {
        $res = mysql_query("SELECT * FROM products WHERE id = $id");
        $row = mysql_fetch_assoc($res);
        $total += $row['price'] * $qty;
    }
    $date = date('Y-m-d H:i:s');
    mysql_query("INSERT INTO orders (user_id, products, total, date) VALUES ($user_id, '$products', $total, '$date')");
    
    // OCHIShAEM KORZINU
    $_SESSION['cart'] = array();
    
    echo "Zakaz oformlen! Spasibo za pokupku!";
    echo "<br><a href='?action=catalog'>Na glavnuyu</a>";
    
    // OTPRAVLYaEM PIS'MO (ESLI EST' ADRES)
    $res = mysql_query("SELECT email FROM users WHERE id = $user_id");
    $u = mysql_fetch_assoc($res);
    if ($u['email']) {
        mail($u['email'], "Zakaz oformlen", "Vash zakaz prinyat. Obshchaya summa: $total rub.");
    }
}

function adminPanel() {
    // PROVERIM PRAVA (ADMIN? ESLI NET, TO PUST' VOYDET)
    if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
        // POPROBUEM VOYTI KAK ADMIN (DLYA UDOBSTVA)
        echo "<h2>Vkhod dlya administratora</h2>";
        echo "<form method='post' action='?action=login'>";
        echo "Login: <input name='login'><br>";
        echo "Password: <input type='password' name='pass'><br>";
        echo "<input type='submit' value='Voyti'>";
        echo "</form>";
        return;
    }
    
    // ADMIN PANEL'
    echo "<h1>ADMIN PANEL'</h1>";
    echo "<a href='?action=catalog'>Katalog</a> | <a href='?action=logout'>Logout</a><br><br>";
    
    // SPISOK TOVAROV S SSYLKAMI NA UDALENIE
    $res = mysql_query("SELECT * FROM products");
    echo "<table border=1>";
    echo "<tr><th>ID</th><th>Nazvanie</th><th>Cena</th><th>Deystvie</th></tr>";
    while ($row = mysql_fetch_assoc($res)) {
        echo "<tr>";
        echo "<td>" . $row['id'] . "</td>";
        echo "<td>" . $row['name'] . "</td>";
        echo "<td>" . $row['price'] . "</td>";
        echo "<td><a href='?action=delete_product&id=" . $row['id'] . "' onclick='return confirm(\"Udalit?\")'>Udalit'</a></td>";
        echo "</tr>";
    }
    echo "</table>";
    
    // FORMA DOBAVLENIYa TOVARA
    echo "<h2>Dobavit' tovar</h2>";
    echo "<form method='post' action='?action=add_product' enctype='multipart/form-data'>";
    echo "Nazvanie: <input name='name'><br>";
    echo "Cena: <input name='price'><br>";
    echo "Opisanie: <textarea name='descr'></textarea><br>";
    echo "Kartinka: <input type='file' name='image'><br>";
    echo "<input type='submit' value='Dobavit'>";
    echo "</form>";
}

function addProduct() {
    // PROVERKA ADMINA (OPYAT')
    if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
        die("Net prav");
    }
    $name = $_POST['name'];
    $price = $_POST['price'];
    $descr = $_POST['descr'];
    
    // ZAGRUZKA KARTINKI (BEZ PROVEROK)
    $image = '';
    if ($_FILES['image']['tmp_name']) {
        $image = time() . '_' . $_FILES['image']['name'];
        move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $image);
    }
    
    // VSTAVLYaEM V BAZU (BEZ EKRANIROVANIYA)
    mysql_query("INSERT INTO products (name, price, image, descr) VALUES ('$name', '$price', '$image', '$descr')");
    
    header("Location: ?action=admin");
    exit;
}

function deleteProduct() {
    if (!isset($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
        die("Net prav");
    }
    $id = $_GET['id'];
    // SNAChALA UDALIM KARTINKU IZ FAYLOVOY SISTEMY (NE OBYAZATEL'NO)
    $res = mysql_query("SELECT image FROM products WHERE id = $id");
    $row = mysql_fetch_assoc($res);
    if ($row['image']) {
        @unlink('uploads/' . $row['image']);
    }
    mysql_query("DELETE FROM products WHERE id = $id");
    header("Location: ?action=admin");
    exit;
}

function login() {
    if ($_POST) {
        $login = $_POST['login'];
        $pass = $_POST['pass'];
        // OPASNYY ZAPROS (IN'EKCIYa)
        $res = mysql_query("SELECT * FROM users WHERE login = '$login' AND password = '$pass'");
        if ($row = mysql_fetch_assoc($res)) {
            $_SESSION['user_id'] = $row['id'];
            $_SESSION['is_admin'] = $row['is_admin'];
            header("Location: ?action=catalog");
            exit;
        } else {
            echo "Nevernyy login/parol";
        }
    }
    echo "<h2>Vkhod</h2>";
    echo "<form method='post'>";
    echo "Login: <input name='login'><br>";
    echo "Password: <input type='password' name='pass'><br>";
    echo "<input type='submit' value='Voyti'>";
    echo "</form>";
    echo "<a href='?action=register'>Register</a>";
}

function register() {
    if ($_POST) {
        $login = $_POST['login'];
        $pass = $_POST['pass'];
        $email = $_POST['email'];
        // VSTAVKA BEZ EKRANIROVANIYA
        mysql_query("INSERT INTO users (login, password, email, is_admin) VALUES ('$login', '$pass', '$email', 0)");
        echo "Registraciya uspeshna! Teper' vojdite.";
        header("Refresh: 2; url=?action=login");
    } else {
        echo "<h2>Registraciya</h2>";
        echo "<form method='post'>";
        echo "Login: <input name='login'><br>";
        echo "Password: <input type='password' name='pass'><br>";
        echo "Email: <input name='email'><br>";
        echo "<input type='submit' value='Zaregistrirovat'sya'>";
        echo "</form>";
    }
}

function logout() {
    session_destroy();
    header("Location: ?action=catalog");
    exit;
}

// SOZDAEM PAPKU DLYA ZAGRUZOK, ESLI EE NET
if (!is_dir('uploads')) mkdir('uploads');

?>

Что я могу сказать.

Достоинства:

  1. VERSIYA 1.0 (BETA) - это хорошо.

  2. AVTOR: NEIZVESTNY GENIY - еще лучше. Кажется, я научил ИИ чувству юмора.

  3. Создавать все таблицы при первом запуске - неплохо

  4. ООП не используется вообще - правильно.

  5. Создать папку для загрузок только после того как весь код отработает - логично.

  6. Все комментарии на транслите - не знаю, насколько намеренно, но выглядит как недостаток, так что плюс.

  7. Как кстати и все сообщения пользователю.

  8. Вывод все ошибок пользователю - классика, сойдет.

  9. Вставка в БД без экранирования - да, норм.

  10. Весь код в одном файле - ну это очевидно.

Недостатки:

  1. Идеальное форматирование кода - очень плохо, новички так не поступают.

  2. Мне обещали использование eval - а его нигде нет.

  3. В CREATE TABLE есть IF NOT EXISTS - скрипт не упадет на втором запуске.

  4. Название полей в БД на идеальном английском - не ок

  5. AUTO_INCREMENT зачем? Генерировать id вручную при каждом добавлении не судьба?

  6. Кавычки слишком правильно используются.

  7. Можно было бы и не разбивать код по функциям - if-else достаточно.

  8. Хотя бы можно было отказаться от использования switch.

  9. Я бы еще добавил вырвиглазные цвета, например зеленый на красном фоне

  10. Не вижу каких-то очевидных логических ошибок, просто не хватает проверок входящих данных.

Итог - ИИ написал довольно плохой код. Но мог бы сделать и хуже.

И нет, я его не запускал. Мне своего сервера жалко.

Предлагаю в комментариях попросить решить аналогичную задачу у других ИИ. И попросить их написать плохой ко�� на других языках программирования.

UPD: Я попросил его:

«Перепиши код несколько раз, каждый раз делая его хуже.»

И знаете, получилось сильно хуже! https://chat.deepseek.com/share/amvp9rzoe8133ebt2z