繁体   English   中英

PHP / MySQL更新数据库中的新闻记录问题

[英]PHP/MySQL update a news record in a database problem

我有这个PHP代码,试图让用户以某种形式编辑新闻记录,然后当他们单击“提交”按钮时,它将更新数据库中的记录。 问题是,一切正常,但记录实际上未在数据库中更新。

有人可以看一下我的代码,看看哪里可能出现问题吗?

<?php
    $title = "Edit News";
    include("../includes/header.php");
    include("../includes/database.php");
    $done = false;
    $expected = array('newstitle', 'newscontent', 'id');
    if ($_GET && !$_POST) { 
        if (isset($_GET['id']) && is_numeric($_GET['id'])) { 
            $id = $_GET['id']; 
        } 
        else { 
            $id = NULL; 
        } 
        if ($id) { 
            $sql = "SELECT * FROM news WHERE id = $id"; 
            $result = mysql_query($sql) or die ("Error connecting to database..."); 
            $row = mysql_fetch_assoc($result);
        } 
        // if form has been submitted, update record 
        if (array_key_exists('update', $_POST)) { 
            // prepare expected items for insertion into database 
            foreach ($_POST as $key => $value) { 
                if (in_array($key, $expected)) { 
                    ${$key} = mysql_real_escape_string($value); 
                } 
            } 
            // abandon the process if primary key invalid 
            if (!is_numeric($id)) { 
                die('Invalid request'); 
            }
            // prepare the SQL query 
            $query = "UPDATE news SET title = '$title', content = '$content' WHERE id = $id"; 
            // submit the query 
            $done = mysql_query($query) or die("Error connecting to database..."); 
        }
    }
    // redirect page if $id is invalid 
    if ($done) { 
        header("Location: $ROOT/admin/listnews.php"); 
        exit; 
    }
?>
if ($_GET && !$_POST) { 

...

if (array_key_exists('update', $_POST)) { 

不能确保更新代码永远不会触发吗?

如果您使用相同的数据从mysql cli运行该UPDATE,那么用户发送的更新会更新吗?

如果没有,请检查转义字符。

下面一行中的$ content和$ title应该是$ newstitle和$ newscontent吗?

// prepare the SQL query 
$query = "UPDATE news SET title = '$newstitle', content = '$newscontent' WHERE id = $id";

可以尝试缩小问题范围的几件事:

  • if (array_key_exists('update', $_POST))块内回显一些调试文本if (array_key_exists('update', $_POST))以确保您真正进入那里。 “ if”的顶部是if($_GET && !$_POST) ,因此您可能需要将此$_POST更改为$_GET
  • 您是否尝试在数据库调用之前回显$query 它可以在命令行mysql接口上运行吗?
  • 如果我对您的foreach ($_POST as $key => $value)读法foreach ($_POST as $key => $value)是正确的,您将最终设置与$expected -( $newstitle, $newscontent, $id )中相同名称的变量。您的sql参考$content$title 它们可能是导致此错误的原因,但需要引起注意。

在不查看表单HTML源代码的情况下,很难确切知道发生了什么,但是我认为

if (array_key_exists('update', $_POST)) {

如果需要,则需要将块移出外部,因为如果在那里,则永远不会执行该块。

如果您不想使用某种测试框架,则在调试代码时, print()是您的朋友。 尝试找出正在执行和未执行的内容; 您将迅速发现您的哪些假设不正确,以及错误的出处。

从嵌套if中取出if语句:


 if (array_key_exists('update', $_POST)) { 
...
}

然后添加以下条件:


 if (count($_POST) && array_key_exists('update', $_POST)) { 
...
}

我敢肯定,它将解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM