我有一个edit.php文件,如下所示。该页面通过GET [' id']在一个表单中显示一篇博文,以编辑该帖子的标题和正文。提交editPostForm时,它应该使用新内容更新数据库并重定向回/ posts / page。重定向有效,但在查看帖子时,博客文章没有任何变化。
我做错了什么?
$post = isset($_GET['id']) ? $_GET['id'] : '';
if (isset($_GET['id']))
{
$id = $_GET['id'];
$sql = "SELECT * FROM posts WHERE id = ?";
$results = $db->prepare($sql);
$results->bindValue(1, $id);
$results->execute();
$post = $results->fetch(PDO::FETCH_ASSOC);
}
if (isset($_POST['editPostForm']))
{
$title = $_POST["title"];
$body = $_POST["body"];
$id = $_GET['id'];
$stmt = $db->prepare("UPDATE posts SET title = ?, body = ? WHERE id = ?");
$stmt->bindParam(1, $title);
$stmt->bindParam(2, $body);
$stmt->bindParam(3, $id);
$stmt->execute();
header("Location: posts");
}
$twigContext = array(
"post" => $post
);
echo $twig->render('edit.html.twig', $twigContext);
HTML文件:
<div class="wrapper">
<form method="post" action="edit.php" class="editComposeForm">
<h2>Edit Post</h2>
<input type="text" value="{{ post.title }}" name="title"><br>
<textarea name="body">{{ post.body }}</textarea><br>
<input type="submit" value="Update" name="editPostForm">
</form>
</div>
答案 0 :(得分:3)
html表单没有您尝试在php代码中访问的名称为id的输入。您可以将其添加为隐藏的表单元素(下面的第一个示例),也可以将其添加为action属性中的查询字符串的一部分(下面的第二个示例)。
将其添加为隐藏表单元素:
<div class="wrapper">
<form method="post" action="edit.php" class="editComposeForm">
<input type="hidden" value="{{ post.id }}" name="id">
<h2>Edit Post</h2>
<input type="text" value="{{ post.title }}" name="title"><br>
<textarea name="body">{{ post.body }}</textarea><br>
<input type="submit" value="Update" name="editPostForm">
</form>
</div>
并在PHP中
$id = $_POST['id'];
或者将其添加到action属性中的查询字符串。
<div class="wrapper">
<form method="post" action="edit.php/id={{ post.id }}" class="editComposeForm">
<h2>Edit Post</h2>
<input type="text" value="{{ post.title }}" name="title"><br>
<textarea name="body">{{ post.body }}</textarea><br>
<input type="submit" value="Update" name="editPostForm">
</form>
</div>
并在PHP中
$id = $_GET['id'];
答案 1 :(得分:2)
表单没有id
的输入,id
为''
这就是它不更新的原因。在表单中设置{{1像action="edit.php?id=somevalue"