通过php mysql更新表

时间:2009-05-14 07:46:43

标签: php mysql

这是我更新表格的代码。我的问题是,提交新记录后我第一次无法更新(显示空白),但第二次工作正常。

还有一件事:当我删除include语句时,它在submessage.php上运行正常,没有任何phpcode。 [annakata:我不知道这意味着什么]

$pid = $_GET['id'];
$title = $_POST['title'];
$summary = $_POST['summary'];
$content = $_POST['content'];
$catid = $_POST['cid'];
$author = $_POST['author'];
$keyword = $_POST['keyword'];
$result1= mysql_query("update listing set catid='$catid',title='$title',
summary='$summary',content='$content', author='$author', keyword='$keyword' where pid='$pid'",$db);
    include("submessage.php");

3 个答案:

答案 0 :(得分:1)

这段代码出错的地方很难枚举。但是,至少,您应该establish a connection to the database才能查询它。

答案 1 :(得分:1)

为什么不重定向到submessage.php而不是内联?当用户刷新页面时,重定向还可以防止重复的数据库操作。只需将include语句替换为:

即可
header('Location: submessage.php?id=' . $pid);
die();

此外,在部署应用程序之前:不要在SQL QUERY中直接输入用户输入。您应该使用绑定参数。否则,您也可以公开宣传您的数据库管理员密码。在http://ie.php.net/pdo

上阅读有关PDO和准备好的陈述的更多信息

我将如何做到这一点:

$pdo = new PDO(....); // some configuration parameters needed
$sql = "
    UPDATE listing SET
        catid=:catid, title=:title, summary=:summary,
        content=:content, author=:author, keyword=:keyword
    WHERE pid=:pid
";
$stmt = $pdo->prepare($sql);
$stmt->bindValue('catid', $_POST['catid']);
$stmt->bindValue('title', $_POST['title']);
$stmt->bindValue('summary', $_POST['summary']);
$stmt->bindValue('content', $_POST['content']);
$stmt->bindValue('author', $_POST['author']);
$stmt->bindValue('keyword', $_POST['keyword']);
$stmt->bindValue('pid', $pid = $_GET['id']);
$stmt->execute();

header('Location: submessage.php?id=' . $pid);
die();

或者事实上,我会使用一些ORM解决方案让它看起来更像:

$listing = Listing::getById($pid = $_GET['id']);
$listing->populate($_POST);
$listing->save();

header('Location: submessage.php?id=' . $pid);
die();

答案 2 :(得分:0)

除了SQL注入的常见警告 - 非常可能给出您的代码以及从哪里获取查询参数(没有任何类型的验证) - 那么您的问题很可能与查询无关,特别是如果它正在进行后续尝试。你确定第一次调用脚本时是否设置了$ _GET ['id']?

请注意,绝对没有必要为您需要更新的每个字段执行多个更新查询 - 只需将它们组合到一个查询中即可。