Не удается отправить успешный запрос для создания записи в базе данных в PHP

Я создаю внутреннюю базу знаний и изо всех сил пытаюсь успешно создавать новые записи БД с помощью PHP.

Для использования этой функциональности я создал несколько файлов:

    * config.php, который подключается к базе данных;
    * post.php, отображающий пост;
    * post_list.php, отображающий список постов и позволяющий перенаправить на post.php?id=x, где x — id каждого поста в базе данных;
    * post_handler.php, который обрабатывает каждое сообщение, либо создает, либо обновляет запись;
    * post_controller.php — класс Post, выполняющий несколько функций: получение определенного сообщения по идентификатору; getAll получает все сообщения для отображения в post_list; создавать и обновлять посты;
    * post_editor.php, который представляет собой редактор, который получает определенную информацию о сообщении, если я редактирую сообщение, или пустой редактор, если я хочу создать сообщение.

Я вручную создал записи в таблице MySQL, чтобы проверить предыдущие файлы, и я могу успешно просматривать и редактировать сообщения, но когда я пытаюсь создать новую запись, она выдает ошибку 500 при вызове post_handler.php, и я не могу понять, почему.

Для простоты и поскольку другие функции работают, я покажу функцию создания сообщения в классе Post (post_controller.php):

    static $dbh;
    static function create ($post) {
        $sql = "INSERT INTO mydb.Posts (title, body) values (?.?)";  
        $stmt = self::$dbh -> prepare($sql);
        if ($stmt){
            $stmt -> bindValue(1, $post["title"]);                       
            $stmt -> bindValue(2, $post["body"]);                        
            return $stmt -> execute();
        }
    }

Вот сообщение handler.php:

    require_once("config.php");
    require_once("post_controller.php");

    if (!empty($_POST["id"])) {
        // update
        if (Post::update($_POST)) {
            echo "Successfully updated";
        } else {
            header("HTTP/1.0 500 Internal error");
            echo "Couldn't update";
        }
    } else {
        // create
        if (Post::create($_POST)) {
            echo "Successfully created new article";
            header ("Location: index.php");

        } else {
            header("HTTP/1.0 500 Internal error");
            echo "Couldn't create new article";
        }
    }

Вот скрипт AJAX для отправки формы в post_editor.php:

    $id = ($_GET["id"]);
    if ($id) {
        $post = Post::get((int) $id);  
    }

    // submit the form, delegation
    $(document).on("submit", "form#form", function(event){
        event.preventDefault();
        var data = $("#form").serialize();
        $.ajax({
            url: "post_handler.php",
            data: data,
            type: "post",
            success: function (response) {
                // if the request is successful
                alert(response);
                },
            error: function (xhr) {
                // if the request is not successful
                alert(xhr.responseText);
            }
        });
    }); 

Я не могу понять, почему обновление сообщения работает нормально, но я не могу создавать новые записи, используя этот код. Когда я пытаюсь отправить новое сообщение, текстовое поле предупреждения становится пустым, а при обновлении отображается правильное сообщение «Успешно обновлено».

Что я делаю неправильно?

Спасибо.

точка опечатка? values (?.?)

Kevin 26.07.2019 11:08

Да, это. Я исправил, спасибо! Теперь он работает нормально.

ThrowPopcorns 26.07.2019 11:29
Стоит ли изучать 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 и хотите разрабатывать...
1
2
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
"INSERT INTO mydb.Posts (title, body) values (?.?)";  

Да, замените точку (.) на запятую (,), и код будет работать правильно.

Большое спасибо! Не могу поверить, что пропустил эту ошибку. Ты спасатель, сводил с ума.

ThrowPopcorns 26.07.2019 11:27

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