Изначально мой блог публиковал сообщения, однако, когда вы работаете над чем-то, все ломается. Теперь я хоть убей не могу понять, почему ничего не происходит! Категории публикуются в базе данных нормально, но мои сообщения отказываются. Вот что у меня есть
<?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();
}






Я думаю, проблема в вашей таблице базы данных 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.
К сожалению, он настроен на автоматическое увеличение. изначально он работал нормально. Я надеялся, что проблема в этом!
Как называется поле автоматического увеличения в вашей таблице posts?
это называется "id"
Как и в случае с любой другой проблемой, это всегда иголка в стоге сена! Я запустил код через рабочую среду MYSQL и обнаружил, что это мой внешний ключ, для которого не нужны отношения. Теперь все исправлено!
Как ты это починил? вы удалили внешний ключ из структуры?
Да, удаление внешнего ключа из структуры позволило моим сообщениям работать нормально. Они по-прежнему ссылаются на другую таблицу, внешний ключ в этом случае не имеет значения, поскольку мои методы не используют его с реляционной точки зрения. Он по-прежнему отображает посты и категории, от которых они не относятся, теперь, когда я его удалил :) imgur.com/lpn503Oimgur.com/OMmNd3k
Предполагая, что проблема связана с линией
$id = mysqli_insert_id($mysql_connect);.