Почему мой блог не публикуется?

Изначально мой блог публиковал сообщения, однако, когда вы работаете над чем-то, все ломается. Теперь я хоть убей не могу понять, почему ничего не происходит! Категории публикуются в базе данных нормально, но мои сообщения отказываются. Вот что у меня есть

<?php
include_once('header.php');

if (isset($_POST['title'], $_POST['contents'], $_POST['category'])){
    $errors = array();
    if (!empty(trim($_POST['title']))){
        $title = trim($_POST['title']);
    }else{
        $errors[] = 'Please enter title';
    }
    if (!empty(trim($_POST['contents']))){
        $contents = trim($_POST['contents']);
    }else{
        $errors[] = 'You need to supply the content';
    }
    if (!category_id_exists($_POST['category'])){
        $errors[] = 'That category does not exist.';
    }
    if (strlen(trim($_POST['title']))>255){
        $errors[] = 'The title cannot be longer than 255 characters.'; 
    }

    if (empty($errors)){
        add_post($title, $contents, $_POST['category']);
        $id = mysqli_insert_id($mysql_connect);
        $header_string = 'Location: index.php?id='.$id;
        header($header_string);
        die();
    }

} 
?>
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "utf-8">
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1">

    <style>
        label { display: block;}
    </style>

    <title>Add a Post</title>
</head>
<body>
    <h1> Add a Post </h1>
    <?php 
    if (isset($errors) && !empty($errors)){
        echo '<ul><li>', implode('</li><li>', $errors), '</li></ul>';
    }
    ?>

    <form action = "" method = "post">
        <div>
            <label for = "title"> Title </label>
            <input type = "text" name = "title" value = "<?php if (isset($_POST['title'])) echo $_POST['title']; ?>">
        </div>
        <div>
            <label for = "contents"> Contents </label>
            <textarea name = "contents" rows = "15" cols = "50"><?php if (isset($_POST['contents'])) echo $_POST['contents']; ?></textarea>
        </div>
        <div>
            <label for = "category"> Category </label>
            <select name = "category">
                <?php
                foreach(get_categories() as $category){
                    ?>
                    <option value = "<?php echo $category['id']; ?>"><?php echo $category['name']; ?> </option>
                    <?php
                }
                ?>
            </select>
        </div>
        <div>
            <input type = "submit" value = "Add Post">
        </div>
    </form>
</body>
</html>

Внутри файла header.php я вызываю init.php для подключения к файлу db, который также сам по себе включает все функции для моего блога (blog.php). Специально необходимая функция выглядит следующим образом ...

function add_post($title, $contents, $category){
    global $mysql_connect;

    $title = mysqli_real_escape_string($mysql_connect, $title);
    $contents = mysqli_real_escape_string($mysql_connect, $contents);
    $category = (int)$category;

    $result = mysqli_query($mysql_connect, "INSERT INTO posts SET cat_id = '$category', title = '$title', contents = '$contents', date_posted = NOW()");
}

Я подумал, что свежий взгляд может быть действительно ценным для меня прямо сейчас. Когда я нажимаю "Добавить сообщение", я попадаю на страницу с названием http: //localhost/blog/index.php? id = 0. Поэтому он не только не регистрируется в базе данных, но и не использует категории.

Надеюсь, я хорошо это объяснил! Я занимаюсь этим уже неделю.

Обновлено: я проверил ошибки и ничего не опубликовал, поэтому я не уверен, что происходит!

Edit2: Выбирая категории, которые я добавляю, также работаю и перечисляю так, как я хочу. Просто что-то происходит, когда я нажимаю на кнопку «Добавить сообщение», ничего не происходит. Я предполагаю, что это в этой области

if (empty($errors)){
    add_post($title, $contents, $_POST['category']);
    $id = mysqli_insert_id($mysql_connect);
    $header_string = 'Location: index.php?id='.$id;
    header($header_string);
    die();
}
Стоит ли изучать 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
0
73
2

Ответы 2

Я думаю, проблема в вашей таблице базы данных posts.

Один случай:

У вас должно быть поле AUTO_INCREMENT (например, id), чтобы функция mysqli_insert_id работала безупречно. И в вашем случае решением было бы сделать столбец id полем AUTO_INCREMENT.

Вот цитата:

The mysqli_insert_id() function returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.

Предполагая, что проблема связана с линией $id = mysqli_insert_id($mysql_connect);.

Ibrahim Mohamed 15.04.2018 06:15

К сожалению, он настроен на автоматическое увеличение. изначально он работал нормально. Я надеялся, что проблема в этом!

broda 15.04.2018 06:59

Как называется поле автоматического увеличения в вашей таблице posts?

Ibrahim Mohamed 15.04.2018 07:19

это называется "id"

broda 15.04.2018 07:44

Как и в случае с любой другой проблемой, это всегда иголка в стоге сена! Я запустил код через рабочую среду MYSQL и обнаружил, что это мой внешний ключ, для которого не нужны отношения. Теперь все исправлено!

Скриншот ошибки SQL

Как ты это починил? вы удалили внешний ключ из структуры?

Ibrahim Mohamed 15.04.2018 16:11

Да, удаление внешнего ключа из структуры позволило моим сообщениям работать нормально. Они по-прежнему ссылаются на другую таблицу, внешний ключ в этом случае не имеет значения, поскольку мои методы не используют его с реляционной точки зрения. Он по-прежнему отображает посты и категории, от которых они не относятся, теперь, когда я его удалил :) imgur.com/lpn503Oimgur.com/OMmNd3k

broda 15.04.2018 20:26

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