【发布时间】:2012-12-20 04:05:13
【问题描述】:
我不明白为什么我的博文没有被编辑。我有一个类('blog'),它的方法 update_post() 带有三个参数。这是我的代码(我跳过了连接和其他部分,因为我知道它们正在工作):
<?php
class blog{
function update_post($id, $title, $contents) {
try {
$update = $this->db->prepare("UPDATE posts SET title = $title, contents = $contents WHERE id = $id");
$update->execute();
}
catch (PDOException $e) {
}
}
}
$post = new blog;
if (isset($_GET['id'])) {
if (isset($_POST['publish'])) { // If submit button is clicked
$id = $_GET['id'];
$title = $_POST['title'];
$contents = $_POST['contents'];
$post->update_post($id, $title, $contents);
}
}
?>
编辑:所以,看来我有多个错误。上面的原始代码来自两个文件,我的 class.blog.php 文件和带有 HTML 表单的页面('edit_post.php')。经过一些实验,我发现错误必须出在edit_post页面。我用“if (1
<?php
if (isset($_GET['id'])) {
if (isset($_POST['publicera'])) {
$id = $_GET['id'];
$title = $_POST['title'];
$contents = $_POST['contents'];
$post->update_post($id, $title, $contents);
}
?>
<form method="post" action="edit_post.php">
Titel:<br />
<input type="text" name="title" size="80" value="<?php $post->get_title($_GET['id']); ?>"><br />
Inlägg:<br /><textarea name="contents" rows="20" cols="80"><?php $post->get_contents($_GET['id']); ?></textarea>
<br /><input type="submit" name="publicera" value="Publicera!">
</form>
<?php
} else {
$post->show_post_list();
}
?>
编辑 #2:已解决!除了错误的 SQL 查询之外,我还需要将表单操作的值修改为 action="edit_post.php?id=<?php echo $_GET['id']; ?>"。
【问题讨论】:
-
如果此代码有任何错误,请在此处提及
-
我正在上传到我的虚拟主机,但那里永远不会显示错误消息。我想我应该配置我的代码来显示错误。
-
$post = new blogg;应该是$post = new blog;(一克),对吧?像这样使用准备好的语句也是完全多余的。 -
您的查询失败,因为变量
$title、$contents没有被引用。他们应该是properly bound parameters。否则,您将获得 none 预准备语句提供的安全性,以及可能损坏的查询。 -
@Vienno 不,它不会更新帖子,因为除非你传入了像
$title = "'The quoted title'";这样用单引号括起来的变量,否则查询是无效 i> 并且会失败。
标签: php sql pdo sql-update