Jump to content

PHPitd

Newbie
  • Posts

    4
  • Joined

  • Last visited

Information

  • Sex
    не скажу

PHPitd's Achievements

Explorer

Explorer (1/14)

0

Reputation

  1. Приветствую зашедших в данную тему, хоть и сомневаюсь что кто то будет читать столько букв и вникать, но была не была. В общем столкнулся с очередной проблемой, с которой бьюсь уже неделю почти. В 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 нужного автора, но при нажатии кнопки Подтверждаю, ничего не удаляется и отображается список авторов в первозданном виде. Если вдруг кто то прочтёт и даже поймёт что я тут понаписал, если это вообще возможно, буду очень благодарен помощи в решении данной проблемы. Сам к сожалению никак не могу понять что не так и почему не работает, потому и написал сюда от отчаяния))). Прошу понять и простить.
  2. Всё, наконец то разобрался, нашёл решение начав перечитывать книгу с начала. Стал замечать детали на которые при первом прочтении не обратил внимания, это оказывается была только половина необходимого кода Приятно блин, а то как заноза уже который день.
  3. Думал над этим, но смутило то, что в книге вышеприведённый код из примера представляется как самодостаточный и работающий,поэтому подумал что проблема в чём то ещё, далее в книге также идут подобные примеры, которые вроде как должны работать. Ранее встречалось только такое объявление переменной: $pdo = new PDO('mysql:host=localhost;dbname=ijdb', 'ijdbuser', 'mypassword'); Причём, если добавить её в код, к примеру так: <?php try { $sql = 'CREATE TABLE joke( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, joketext TEXT, jokedate DATE NOT NULL ) DEFAULT CHARACTER SET utf8 ENGINE=MyISAM'; $pdo = new PDO('mysql:host=localhost;dbname=ijdb', 'ijdbuser', 'mypassword'); $pdo->exec($sql); } catch (PDOException $e) { $output = 'Ошибка при создании таблицы joke: ' . $e->getMessage(); include 'output.html.php'; exit(); } $output = 'Таблица joke была успешно создана.'; include 'output.html.php'; То скрипт начинает "работать", но очень странно. Всегда выскакивает сообщение из переменной $output в конце, о том, что Таблица joke была успешно создана. И если изменить имя таблицы, она действительно создаётся, если же оставить имя тем же таблица не создаётся и вместо сообщении об ошибке выскакивает всё то же Таблица joke была успешно создана. Причём оно выскакивает, даже если допустить ошибку в команде указывающей на создание таблицы, к примеру: $sql = 'CRAT TABL ok( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, joketext TEXT, jokedate DATE NOT NULL ) DEFAULT CHARACTER SET utf8 ENGINE=MyISAM'; Вам спасибо за подсказку, буду дальше пытаться разобраться в проблеме, а то самообучение застопорилось на этом.
  4. Здравствуйте, начал изучать PHP с книги Кевина Янка - PHP и MySQL. От новичка к профессионалу. И всё шло хорошо, пока в главе 4 не наткнулся на такой пример: <?php try { $sql = 'CREATE TABLE joke ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, joketext TEXT, jokedate DATE NOT NULL ) DEFAULT CHARACTER SET utf8 ENGINE=MyISAM'; $pdo->exec($sql); } catch (PDOException $e) { $output = 'Ошибка при создании таблицы joke: ' . $e->getMessage(); include 'output.html.php'; exit(); } $output = 'Таблица joke была успешно создана.'; include 'output.html.php'; Автор пишет, что должно выскочить сообщение о невозможности создании данной таблицы: Ошибка при создании таблицы joke: SQLSTATE[42S01]: Base table or view already exists: 1050 Table ’joke* already exists, так как в предыдущих заданиях эта таблица уже создавалась, но у меня выскакивает такая ошибка: Notice: Undefined variable: pdo in C:\xampp\htdocs\createtable\index.php on line 9 Fatal error: Call to a member function exec() on null in C:\xampp\htdocs\createtable\index.php on line 9 Пожалуйста помогите разобраться в чём проблема и решить её.Извините если вопрос совсем глупый, но в PHP я абсолютный новичок, попытки самому решить проблему или найти ошибку результата не дали к сожалению.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy