当用户尝试编辑其博客文章并将某些字段留空时,他应该得到空字段错误,但是,应该执行的代码被忽略,而我却得到了完全不同的错误消息。
我的问题:如何正确显示空白字段错误消息?
editpost.php文件中的代码段:
1。检查空字段:
// Check for empty fields
if (empty($title) || empty($body)) {
// Save correct data into fields
header('Location: editpost.php?error=emptyeditpostfield&title='.$title.'&body='.$body);
// Stop script
exit();
} else {
$query = "UPDATE posts SET title='$title', body='$body' WHERE id = {$update_id}";
}
2。所需消息:
<!-- Check if user has rights to editing post -->
<?php if (isset($_SESSION['id'])) : ?>
<?php if ($_SESSION['name'] == $post['author']) : ?>
<div class="container">
<h1>Edit Post</h1>
<?php
// Message I want to show
if (isset($_GET['error'])) {
if ($_GET['error'] == 'emptyeditpostfield') {
echo '<p class="text-warning">Fill in all fields!</p>';
}
}
?>
<!-- Edit post form... -->
3。我收到的消息:
<!-- /Edit post form... -->
</div>
<?php else : header('Location: index.php?error=accessdenied'); exit(); // Message I got ?>
<?php endif; ?>
<?php else : header('Location: index.php?error=accessdenied'); exit(); ?>
<?php endif; ?>
已编辑(11月30日)。
4。代码也是此问题的一部分:
// Get ID
$id = mysqli_real_escape_string($conn, $_GET['id']);
// Create Query
$query = "SELECT * FROM posts WHERE id = $id";
// Get Result
$result = mysqli_query($conn, $query);
// Fetch Data
$post = mysqli_fetch_assoc($result);
// var_dump($posts);
// Free Result
mysqli_free_result($result);
// Close Connection
mysqli_close($conn);
图片1.带有空白字段的提交后的警告。
图片2.编辑帖子页面。
答案 0 :(得分:0)
在未填写字段时,您将重定向用户。您不保存该帖子,因此$ post不会填充您的表单数据。 $ post ['author']不存在。
答案 1 :(得分:0)
要解决此问题:
1。在第一个代码段中,需要在会话中存储帖子ID,如下所示:
// Store post id in session
session_start();
$_SESSION['update_id'] = $update_id;
2。在第四段代码中,需要检查会话是否具有id,如下所示:
// Get ID
if (isset($_SESSION['update_id'])) {
$id = $_SESSION['update_id'];
} else {
$id = $_GET['id'];
}
现在帖子ID存储在会话中,重定向后可以再次从数据库检索数据。