Страница не найдена

Я делаю простой сайт с шаблонизатором php. У меня есть примитивная авторизация с пользователем и админом. Есть несколько страниц: главная, об авторе, о компании, о товаре, страница админа. В странице админа я пытаюсь реализовать редактирование html кода главной страницы, об авторе и о компании. Но у меня почему-то не подгружается страница из БД. В БД(mysql) страницы хранятся в таблице(имя страницы, хтмл код). Форма, в которой у меня происходит редактирование, должна через POST отправлять выбранную в списке страницу, но в массиве POST почему-то ничего нет.

Ошибка, которая выводится в textarea:

<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: Undefined array key "page" in C:\Users\Максим\.vscode\website\elements\get_html.php on line <i>14</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0019</td><td bgcolor='#eeeeec' align='right'>443184</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\Users\Максим\.vscode\website\elements\get_html.php' bgcolor='#eeeeec'>...\get_html.php<b>:</b>0</td></tr>
</table></font>
Страница не найдена

admin.php:

<?php
session_start();

// Проверка, если пользователь не аутентифицирован, перенаправляем на форму входа
if (!isset($_SESSION["admin"])) {
    header("Location: pages/index.php");
    exit();
}

?>

<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Административная панель</title>
    <link rel="stylesheet" href="../css/common.css" />
    <link rel="stylesheet" href="../css/table.css" />
    <link rel="stylesheet" href="https://code.s3.yandex.net/web-code/fonts/fonts.css" />
    <link rel="preload" href="../css/common.css" as="style">
</head>

<body>
   
<?php require "../elements/header.php" ?>

<div class="container">
   <?php require "../elements/adminInterface.php"?>

   <?php require "../elements/content.php"?>

</div>

 <?php require "../elements/footer.php"?>

</body>

</html>

adminInterface.php:

<?php


if (!isset($_SESSION["admin"])) {
    header("Location: pages\index.php");
    exit();
}

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "миробоев";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["addProduct"])) {
        $productName = $_POST["productName"];
        $country = $_POST["country"];
        $width = $_POST["width"];
        $articul = $_POST["articul"];
        $price = $_POST["price"];
        $quantity = $_POST["quantity"];
        $image = $_POST["image"];
    
        // Добавление товара в базу данных
        $sql = "INSERT INTO обои (Товар, Страна, Ширина, Артикул, Цена, Количество, Изображение)
                VALUES (:productName, :country, :width, :articul, :price, :quantity, :image)";
        
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':productName', $productName);
        $stmt->bindParam(':country', $country);
        $stmt->bindParam(':width', $width);
        $stmt->bindParam(':articul', $articul);
        $stmt->bindParam(':price', $price);
        $stmt->bindParam(':quantity', $quantity);
        $stmt->bindParam(':image', $image);
        $stmt->execute();
    
        header("Location: admin.php");
        exit();
    }
    

    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["editProduct"])) {
        $editProductArticle = $_POST["editProductArticle"];
    
        // Создаем массив для хранения полей и значений
        $updateFields = array();
    
        // Создаем массив для привязки параметров
        $params = array();
    
        // Проверяем каждое поле на заполненность и добавляем в массив
        if (!empty($_POST["newProductName"])) {
            $updateFields[] = "Товар = :newProductName";
            $params[':newProductName'] = $_POST["newProductName"];
        }
        if (!empty($_POST["newCountry"])) {
            $updateFields[] = "Страна = :newCountry";
            $params[':newCountry'] = $_POST["newCountry"];
        }
        if (!empty($_POST["newWidth"])) {
            $updateFields[] = "Ширина = :newWidth";
            $params[':newWidth'] = $_POST["newWidth"];
        }
        if (!empty($_POST["newArticul"])) {
            $updateFields[] = "Артикул = :newArticul";
            $params[':newArticul'] = $_POST["newArticul"];
        }
        if (!empty($_POST["newPrice"])) {
            $updateFields[] = "Цена = :newPrice";
            $params[':newPrice'] = $_POST["newPrice"];
        }
        if (!empty($_POST["newQuantity"])) {
            $updateFields[] = "Количество = :newQuantity";
            $params[':newQuantity'] = $_POST["newQuantity"];
        }
        if (!empty($_POST["newImage"])) {
            $updateFields[] = "Изображение = :newImage";
            $params[':newImage'] = $_POST["newImage"];
        }
    
        // Формируем SQL-запрос с учетом только заполненных полей
        $sql = "UPDATE обои SET " . implode(", ", $updateFields) . " WHERE Артикул = :article";
    
        $stmt = $conn->prepare($sql);
    
        // Привязываем параметры
        foreach ($params as $paramName => &$paramValue) {
            $stmt->bindParam($paramName, $paramValue);
        }
    
        $stmt->bindParam(':article', $editProductArticle);
        $stmt->execute();
    
        header("Location: admin.php");
        exit();
    }
    
    

    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["deleteProduct"])) {
        $deleteProductArticle = $_POST["deleteProductArticle"];
        // Удаление товара из базы данных
        $sql = "DELETE FROM обои WHERE Артикул = :article";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':article', $deleteProductArticle);
        $stmt->execute();
        header("Location: admin.php");
        exit();
    }

    $sqlSelect = "SELECT * FROM обои";
    $stmtSelect = $conn->query($sqlSelect);
    $rows = $stmtSelect->fetchAll(PDO::FETCH_ASSOC);

} catch (PDOException $e) {
    echo "Ошибка подключения: " . $e->getMessage();
}

$conn = null;
?>

<!DOCTYPE html>
<html lang="ru">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Административная панель</title>
    <link rel="stylesheet" href="../css/admin.css" />
</head>

<body>
<div class="admin-panel">
<form  class="welcome-form" action="logout.php" method="post">
    <p>Добро пожаловать, <?php echo $_SESSION["admin"]; ?>!</p>
    <button type="submit">Выход</button>
</form>
 <!-- Форма для добавления товара -->
 <div class="admin-forms">
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
    <label for="productName">Название товара:</label>
    <input type="text" id="productName" name="productName" required>

    <label for="country">Страна:</label>
    <input type="text" id="country" name="country" required>

    <label for="width">Ширина:</label>
    <input type="text" id="width" name="width" required>

    <label for="articul">Артикул:</label>
    <input type="text" id="articul" name="articul" required>

    <label for="price">Цена:</label>
    <input type="text" id="price" name="price" required>

    <label for="quantity">Количество:</label>
    <input type="text" id="quantity" name="quantity" required>

    <label for="image">Изображение:</label>
    <input type="text" id="image" name="image" required>

    <button type="submit" name="addProduct">Добавить товар</button>
</form>
   <!-- Форма для редактирования товара -->
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
    <label for="editProductArticle">Артикул товара для редактирования:</label>
    <input type="text" id="editProductArticle" name="editProductArticle" required>

    <!-- Другие поля для редактирования товара -->
    <label for="newProductName">Новое название товара:</label>
    <input type="text" id="newProductName" name="newProductName" >

    <label for="newCountry">Новая страна:</label>
    <input type="text" id="newCountry" name="newCountry" >

    <label for="newWidth">Новая ширина:</label>
    <input type="text" id="newWidth" name="newWidth" >

    <label for="newArticul">Новый артикул:</label>
    <input type="text" id="newArticul" name="newArticul" >

    <label for="newPrice">Новая цена:</label>
    <input type="text" id="newPrice" name="newPrice" >

    <label for="newQuantity">Новое количество:</label>
    <input type="text" id="newQuantity" name="newQuantity" >

    <label for="newImage">Новое изображение:</label>
    <input type="text" id="newImage" name="newImage" >

    <button type="submit" name="editProduct">Редактировать товар</button>
</form>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        <label for="deleteProductArticle">Артикул товара для удаления:</label>
        <input type="text" id="deleteProductArticle" name="deleteProductArticle" required>
        <button type="submit" name="deleteProduct">Удалить товар</button>
    </form>
</div>
<div>
    <!-- Форма с добавленным выпадающим списком -->
<form action="save_html.php" method="post">
    <label for="pageSelect">Выберите страницу:</label>
    <select id="pageSelect" name="page">
        <option value="">Выберите страницу</option>
        <option value="index">Главная страница</option>
        <option value="aboutAuthor">Об авторе</option>
        <option value="aboutCompany">О фирме</option>
    </select>
    <button type="button" id="editHtmlBtn">Редактировать HTML</button>
    <div id="htmlEditor">
        <textarea id="htmlTextArea" rows="10" cols="50"></textarea>
        <br>
        <button id="saveHtmlBtn">Сохранить HTML</button>
    </div>
</form>





</div>
</div>
<script src="../js/edit.js" > </script>

</body>

</html>

get-html.php:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Подключение к базе данных
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "html_pages";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Получаем имя страницы из формы
        $pageName = $_POST['page'];

        // Подготавливаем SQL-запрос для выбора HTML-кода страницы
        $sql = "SELECT html_code FROM pages WHERE page_name = :pageName";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':pageName', $pageName);
        $stmt->execute();

        // Получаем результат запроса
        $result = $stmt->fetch(PDO::FETCH_ASSOC);

        // Если страница найдена, выводим ее HTML-код
        if ($result) {
            $htmlCode = $result['html_code'];
            echo $htmlCode;
        } else {
            echo "Страница не найдена";
        }
    } catch (PDOException $e) {
        echo "Ошибка подключения: " . $e->getMessage();
    }
}
?>

save-html.php:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $pageName = $_POST['page'];
    $editedHtmlCode = $_POST['htmlCode'];

    // Здесь реализуйте сохранение $editedHtmlCode в базе данных
    $sql = "UPDATE html_pages SET html_code = :htmlCode WHERE page_name = :pageName";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':htmlCode', $editedHtmlCode);
    $stmt->bindParam(':pageName', $pageName);
    $stmt->execute();
}
?>

edit.js:

document.getElementById('pageSelect').addEventListener('change', function () {
    var selectedPage = this.value;

    // Отправляем AJAX-запрос для получения HTML-кода выбранной страницы
    fetch('../elements/get_html.php', {
        method: 'POST',
        body: JSON.stringify({ page: selectedPage }),
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(response => response.text())
    .then(htmlCode => {
        document.getElementById('htmlTextArea').value = htmlCode;
        document.getElementById('htmlEditor').style.display = 'block';
    });
});

document.getElementById('editHtmlBtn').addEventListener('click', function () {
    document.getElementById('htmlEditor').style.display = 'block';

});

document.getElementById('saveHtmlBtn').addEventListener('click', function () {
    var selectedPage = document.getElementById('pageSelect').value;
    var editedHtmlCode = document.getElementById('htmlTextArea').value;

    // Отправляем AJAX-запрос для сохранения HTML-кода выбранной страницы
    fetch('../elements/save_html.php', {
        method: 'POST',
        body: JSON.stringify({ page: selectedPage, htmlCode: editedHtmlCode }),
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(response => response.json())
    .then(data => {
        // Обработка ответа
    });
});

Ответы (0 шт):