Почему мой запрос UPDATE не работает? MySQL

Я работаю над веб-сайтом блога, и в настоящее время я застрял на создании страницы редактирования блога. По какой-то причине мой запрос 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.');
}
?>

Ваш первый аргумент для bindValue() должен иметь в начале :, например - :title

Karlo Kokkak 10.04.2018 11:18

Вы не проверяете наличие ошибок после вызова метода execute (), поэтому вы не можете знать, правильно ли выполнен оператор sql.

Shadow 10.04.2018 11:18

не следует использовать или в if, это || в php.

Wils 10.04.2018 11:21

@ Уилс сделал это. По-прежнему ничего не делает для меня.

Mr. Code 10.04.2018 11:35

@KarloKokkak Пробовал. По-прежнему ничего не делает для меня.

Mr. Code 10.04.2018 11:36

Можете ли вы добавить в свой код немного echo или var_dump и удалить перенаправление, чтобы проверить, получаете ли вы нужные данные, когда они вам нужны?

Mickaël Leger 10.04.2018 11:36

И, возможно, попробуйте удалить action = "aanpassen.php" в вашей форме и просто напишите action = "", если вы выполняете обновление на той же странице, где находится форма

Mickaël Leger 10.04.2018 11:39

Этот код взят с сайта aanpassen.php?

Karlo Kokkak 10.04.2018 11:43

@KarloKokkak Да.

Mr. Code 10.04.2018 11:45

Можете ли вы обновить опубликованный код?

Karlo Kokkak 10.04.2018 11:46

Можете выложить код connection.php?

Karlo Kokkak 10.04.2018 11:48

@KarloKokkak Обновлено и опубликовано.

Mr. Code 10.04.2018 11:50

Ответил ниже.

Karlo Kokkak 10.04.2018 12:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
13
83
2

Ответы 2

вы пропустили ":" во всех аргументах 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)) вот так

К сожалению, это ничего не меняет.

Mr. Code 10.04.2018 11:23

По-прежнему ничего не делает для меня. Он просто отправляет меня в index.html всякий раз, когда я нажимаю кнопку отправки.

Mr. Code 10.04.2018 11:34

header (sprintf ('Location: index.php? status =% s', $ result? 'ok': 'failed')); из-за этого он отправляет вас на index.php. что появляются после status = в адресной строке?

Darsh khakhkhar 10.04.2018 11:36

Вы имеете в виду это? "aanpassen.php? id = 33"

Mr. Code 10.04.2018 11:46

нет, как вы упомянули в своем предыдущем комментарии, он перенаправляет вас на index.php каждый раз, когда вы отправляете форму. Итак, вы получаете какие-либо аргументы после index.php после отправки формы?

Darsh khakhkhar 10.04.2018 11:54

Нет, я не получаю возражений.

Mr. Code 10.04.2018 11:57

если (isset ($ _GET ['id'])) {$ id = $ _GET ['id']; $ data = $ article-> fetch_data ($ id); } else {заголовок ('Местоположение: index.php'); выход(); } можете ли вы прокомментировать этот код и попробовать еще раз ??

Darsh khakhkhar 10.04.2018 12:01

Пробовал. Пока ничего не делает для меня.

Mr. Code 10.04.2018 12:05

что вы получаете в $ result, вы использовали его в операторе if, но ничего не сохраняет в $ result ??

Darsh khakhkhar 10.04.2018 12:09

$ query-> выполнить (); должно быть так $ result = $ query-> execute ();

Darsh khakhkhar 10.04.2018 12:11

Я изменил его на: $ result = $ query-> execute (); Но по-прежнему ничего не делает.

Mr. Code 10.04.2018 12:20

Когда вы обращаетесь к 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-адрес.

Mr. Code 10.04.2018 12:10

Другие вопросы по теме