更新数据库不起作用

时间:2011-03-08 13:16:11

标签: mysql database

谁能告诉我为什么这不起作用?一切都很好,但是当我点击提交时,它不会更新数据库。

$row = mysql_fetch_array($sql);
$title = $row['title'];
$content = $row['content'];
$author = $row['author'];
$author_email = $row['author_email'];
$cat = $row['category'];
$date = $row['date'];
$id = $row['id'];


$form = "<tr><td>$id
    <form action='edit.php' method='post'>
    <input type='text' value='$title' name='title'><br>
    <textarea name='content'>$content</textarea><br>
    <input type='submit' name='submit'>
        </td></tr>";

$ptitle = htmlentities($_POST['title']);
$pcontent = htmlentities($_POST['content']);

if($_POST['submit']){
    if ($ptitle && $pcontent){
        mysql_query("UPDATE blogdata SET id='$id', title='$ptitle', author='$author', author_email='$author_email', date='$date', category='$category', content='$pcontent' WHERE id='$id'");
    }
    else
        echo "A forms empty.";
}
else
    echo "$form";

2 个答案:

答案 0 :(得分:1)

首先请注意,在未事先验证表单的情况下,您不应使用直接从表单提交的值。我不会在这里解决,但我会解决你的问题:

您无法设置计划在WHERE子句中使用的行标识符的值;这会导致并发问题。您的行标识符应该是不可变的。

因此,您的查询应该如下所示(提醒:我没有修复与安全相关的问题):

UPDATE blogdata SET title='$ptitle', author='$author', 
author_email='$author_email', date='$date', category='$category', 
content='$pcontent' WHERE id='$id'

答案 1 :(得分:0)

因为编写错误的代码中有错误吗?

您应该使用htmlentities来逃避您正在将写入浏览器的内容。您应该使用mysql_real_escape_string来转义您正在将写入数据库的内容。您的代码应该在其中有注释,解释它的作用。你应该检查mysql_query的返回值,并在适当的时候轮询mysql_error。您不应在SQL中引用数值。