Страница не найдена
Я делаю простой сайт с шаблонизатором 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 => {
// Обработка ответа
});
});