Приветствую зашедших в данную тему, хоть и сомневаюсь что кто то будет читать столько букв и вникать, но была не была.
В общем столкнулся с очередной проблемой, с которой бьюсь уже неделю почти. В 7 главе вышеописанной книги приступил к созданию простенькой CMS для сайта с шутками, вот оригинальный код контроллёра по управлению авторами шуток:
<?php
if (isset($_POST['action']) and $_POST['action'] == 'Удалить')
{
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
// Получаем шутки, принадлежащие автору
try
{
$sql = 'SELECT id FROM joke WHERE authorid = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при получении списка шуток, которые нужно удалить.';
include 'error.html.php';
exit();
}
$result = $s->fetchAll();
// Удаляем записи о категориях шуток
try
{
$sql = 'DELETE FROM jokecategory WHERE jokeid = :id';
$s = $pdo->prepare($sql);
// Для каждой шутки
foreach ($result as $row)
{
$jokeId = $row['id'];
$s->bindValue(':id', $jokeId);
$s->execute();
}
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении записей о категориях шутки.';
include 'error.html.php';
exit();
}
// Удаляем шутки, принадлежащие автору
try
{
$sql = 'DELETE FROM joke WHERE authorid = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении шуток принадлежащих автору.';
include 'error.html.php';
exit();
}
// Удаляем имя автора
try
{
$sql = 'DELETE FROM author WHERE id = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении автора.';
include 'error.html.php';
exit();
}
header('Location: .');
exit();
}
// Выводим список авторов
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
try
{
$result = $pdo->query('SELECT id, name FROM author');
}
catch (PDOException $e)
{
$error = 'Ошибка при извлечении авторов из базы данных!';
include 'error.html.php';
exit();
}
foreach ($result as $row)
{
$authors[] = array('id' => $row['id'], 'name' => $row['name']);
}
include 'authors.html.php';
Он выводит список всех авторов, а рядом 2 кнопки : Редактировать и Удалить (хотел добавить скриншот для наглядности, но выскакивает ошибка при попытке). При нажатии кнопки удалить, автор и все принадлежащие ему шутки удаляются с сайта (и из базы данных соответственно). Далее автор книги просит попробовать самостоятельно изменить код контроллёра так, чтобы при нажатии кнопки Удалить выскакивала таблички просящая подтвердить удаление и уж только после нажатия кнопки подтверждаю, скрипт сработал как и в оригинале. Вот тут то я и запоролся((
Вот что у меня получилось:
<?php
if (isset($_POST['action']) and $_POST['action'] == 'Удалить')
{
///////
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
try
{
$sql = 'SELECT id FROM author WHERE id = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при извлечении авторов из базы данных!';
include 'error.html.php';
exit();
}
$result = $s->fetchAll();
foreach ($result as $row)
{
$authorid = $row['id'];
}
include $_SERVER['DOCUMENT_ROOT'] . '/admin/authors/rly.html.php';
if (isset($_POST['rly']) and $_POST['rly'] == 'Подтверждаю')
{
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
///////
// Получаем шутки, принадлежащие автору
try
{
$sql = 'SELECT id FROM joke WHERE authorid = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при получении списка шуток, которые нужно удалить.';
include 'error.html.php';
exit();
}
$result = $s->fetchAll();
// Удаляем записи о категориях шуток
try
{
$sql = 'DELETE FROM jokecategory WHERE jokeid = :id';
$s = $pdo->prepare($sql);
// Для каждой шутки
foreach ($result as $row)
{
$jokeId = $row['id'];
$s->bindValue(':id', $jokeId);
$s->execute();
}
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении записей о категориях шутки.';
include 'error.html.php';
exit();
}
// Удаляем шутки, принадлежащие автору
try
{
$sql = 'DELETE FROM joke WHERE authorid = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении шуток принадлежащих автору.';
include 'error.html.php';
exit();
}
// Удаляем имя автора
try
{
$sql = 'DELETE FROM author WHERE id = :id';
$s = $pdo->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
}
catch (PDOException $e)
{
$error = 'Ошибка при удалении автора.';
include 'error.html.php';
exit();
}
header('Location: .');
exit();
}
}
// Выводим список авторов
else {
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';
try
{
$result = $pdo->query('SELECT id, name FROM author');
}
catch (PDOException $e)
{
$error = 'Ошибка при извлечении авторов из базы данных!';
include 'error.html.php';
exit();
}
foreach ($result as $row)
{
$authors[] = array('id' => $row['id'], 'name' => $row['name']);
}
include 'authors.html.php';
}
Контроллёр подключает табличку с просьбой подтвердить удаление автора, вот её код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Подтверждение удаления</title>
</head>
<body>
<h1>Вы действительно хотите удалить этого автора?</h1>
<form action="" method="post">
<div>
<input type="hidden" name="id" value="<?php
echo $authorid; ?>">
<input type="submit" name="rly" value="Подтверждаю">
<input type="submit" name="rly" value="Отклоняю">
</div>
</form>
</body>
</html>
И передаёт в скрытоё поле правильный id нужного автора, но при нажатии кнопки Подтверждаю, ничего не удаляется и отображается список авторов в первозданном виде.
Если вдруг кто то прочтёт и даже поймёт что я тут понаписал, если это вообще возможно, буду очень благодарен помощи в решении данной проблемы. Сам к сожалению никак не могу понять что не так и почему не работает, потому и написал сюда от отчаяния))). Прошу понять и простить.