Я работаю над веб-сайтом блога, и в настоящее время я застрял на создании страницы редактирования блога. По какой-то причине мой запрос UPDATE в блоге не работает, и я не могу понять, почему он не работает. Я не получаю сообщения об ошибке. Просто ничего не обновляет.
Я собираю данные из старого блога и вставляю их в свою форму. А затем я пытаюсь обновить его, используя свой запрос на обновление.
Это мой код на данный момент:
aanpassen.php
<?php
$error=false;
include_once('includes/connection.php');
include_once('includes/article.php');
$article = new Article;
if ( isset( $_POST ['id'], $_POST['title'], $_POST['content'] ) ) {
$id = $_POST ['id'];
$title = $_POST['title'];
$content = nl2br( $_POST['content'] );
if (empty($title) || empty($content) || empty($id)){
$error='All fields are required!';
} else {
$query = $pdo->prepare("UPDATE articles SET article_title = :title,
article_content = :content WHERE id=:id");
if ( $query ){
$id = $_POST ['id'];
$query->bindValue(':title', $title);
$query->bindValue(':content', $content);
$query->bindValue(':id', $id);
$query->execute();
header( sprintf( 'Location: index.php?status=%s', $result ? 'ok' : 'failed' ) );
} else {
exit('bad foo - unable to prepare sql query');
}
}
}
if ( isset( $_GET['id'] ) ) {
$id = $_GET['id'];
$data = $article->fetch_data( $id );
} else {
header('Location: index.php');
exit();
}
?>
<form action = "aanpassen.php" method = "post" autocomplete = "off">
<input type = "hidden" name = "id" value = "<?php echo $id; ?>" />
<input type = "text" name = "title" class = "titleform" placeholder = "Blog naam" value = "<?php echo $data['article_title']; ?>" />
<textarea name = "content" id = "summernote" rows = "15" cols = "50"><?php echo $data['article_content'] ?></textarea>
<input type = "submit" class = "buttonclass" value = "Aanmaken" />
</form>
<?php
if ($error)
printf('<h1>%s</h1>', $error);
?>
connection.php
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=cms', 'root', 'root');
} catch (PDOException $e) {
exit('Database error.');
}
?>
Вы не проверяете наличие ошибок после вызова метода execute (), поэтому вы не можете знать, правильно ли выполнен оператор sql.
не следует использовать или в if, это || в php.
@ Уилс сделал это. По-прежнему ничего не делает для меня.
@KarloKokkak Пробовал. По-прежнему ничего не делает для меня.
Можете ли вы добавить в свой код немного echo или var_dump и удалить перенаправление, чтобы проверить, получаете ли вы нужные данные, когда они вам нужны?
И, возможно, попробуйте удалить action = "aanpassen.php" в вашей форме и просто напишите action = "", если вы выполняете обновление на той же странице, где находится форма
Этот код взят с сайта aanpassen.php?
@KarloKokkak Да.
Можете ли вы обновить опубликованный код?
Можете выложить код connection.php?
@KarloKokkak Обновлено и опубликовано.
Ответил ниже.






вы пропустили ":" во всех аргументах bindValue. должно быть так:
$query->bindValue(':title', $title);
$query->bindValue(':content', $content);
$query->bindValue(':id', $id);
а также if (empty($title) or empty($content) or empty($id)), это должен быть if (empty($title) || empty($content) || empty($id)) вот так
К сожалению, это ничего не меняет.
По-прежнему ничего не делает для меня. Он просто отправляет меня в index.html всякий раз, когда я нажимаю кнопку отправки.
header (sprintf ('Location: index.php? status =% s', $ result? 'ok': 'failed')); из-за этого он отправляет вас на index.php. что появляются после status = в адресной строке?
Вы имеете в виду это? "aanpassen.php? id = 33"
нет, как вы упомянули в своем предыдущем комментарии, он перенаправляет вас на index.php каждый раз, когда вы отправляете форму. Итак, вы получаете какие-либо аргументы после index.php после отправки формы?
Нет, я не получаю возражений.
если (isset ($ _GET ['id'])) {$ id = $ _GET ['id']; $ data = $ article-> fetch_data ($ id); } else {заголовок ('Местоположение: index.php'); выход(); } можете ли вы прокомментировать этот код и попробовать еще раз ??
Пробовал. Пока ничего не делает для меня.
что вы получаете в $ result, вы использовали его в операторе if, но ничего не сохраняет в $ result ??
$ query-> выполнить (); должно быть так $ result = $ query-> execute ();
Я изменил его на: $ result = $ query-> execute (); Но по-прежнему ничего не делает.
Когда вы обращаетесь к aanpassen.php изначально, он имеет правильный формат - aanpassen.php? Id = 1 ??
В противном случае ваш код выглядит нормально, когда я его тестировал.
Просто измените:
$query->execute();
header( sprintf( 'Location: index.php?status=%s', $result ? 'ok' : 'failed' ) );
К:
$success = $query->execute();
header( 'Location: index.php?status='.( $success ? 'ok' : 'failed' ) );exit();
Да, когда я открываю страницу, "aanpassen.php? Id = 1" - это URL-адрес.
Ваш первый аргумент для
bindValue()должен иметь в начале:, например -:title