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

PHP/MySQL更新数据库问题中的新闻记录,php,mysql,Php,Mysql,我有这个PHP代码,我正试图使用它让用户编辑表单中的新闻记录,然后当他们点击提交按钮时,它将更新数据库中的记录。问题是,一切正常,但数据库中的记录实际上没有更新 有人能看看我的代码,看看哪里会出现问题吗 <?php $title = "Edit News"; include("../includes/header.php"); include("../includes/database.php"); $done = false; $expected

我有这个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; 
    }
?>

如果使用用户发送的相同数据从mysql cli运行更新,它会更新吗


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

如果使用用户发送的相同数据从mysql cli运行更新,它会更新吗

if ($_GET && !$_POST) { 
如果没有,请检查转义字符

if ($_GET && !$_POST) { 

这难道不能确保更新代码永远不会触发吗


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

下面一行中的$content和$title应该是$newsttitle和$newstcontent吗

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

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

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

尝试缩小问题范围的两件事:

  • if(array\u key\u exists('update',$\u POST))
    块中回显一些调试文本,以确保您实际进入其中。“如果”的顶部是
    if($\u GET&&!$\u POST)
    ,因此您可能需要将此
    $\u POST
    更改为
    $\u GET
  • 您是否在db调用之前尝试回显了
    $query
    ?它是否在命令行mysql界面上运行
  • 如果我对您的
    foreach($\u POST as$key=>$value)
    的理解是正确的,那么您最终将使用与
    $expected
    -(
    $newsttitle,$newstcontent,$id
    )中相同的名称设置变量,但是在您的sql引用
    $content
    $title
    中。它们可能是这个错误的原因,但需要注意

    • 尝试缩小问题范围的两件事:

      • if(array\u key\u exists('update',$\u POST))
        块中回显一些调试文本,以确保您实际进入其中。“如果”的顶部是
        if($\u GET&&!$\u POST)
        ,因此您可能需要将此
        $\u POST
        更改为
        $\u GET
      • 您是否在db调用之前尝试回显了
        $query
        ?它是否在命令行mysql界面上运行
      • 如果我对您的
        foreach($\u POST as$key=>$value)
        的理解是正确的,那么您最终将使用与
        $expected
        -(
        $newsttitle,$newstcontent,$id
        )中相同的名称设置变量,但是在您的sql引用
        $content
        $title
        中。它们可能是这个错误的原因,但需要注意

        • 如果不查看表单的HTML源代码,就有点难以准确地知道发生了什么,但我认为

          if (array_key_exists('update', $_POST)) {
          
          块需要移出外部if,因为如果它在那里,它将永远不会被执行


          如果您不想使用某种测试框架,
          print()
          在调试代码时是您的朋友。试着找出什么在执行,什么不在执行;您将很快发现哪些假设是错误的,因此错误在哪里。

          如果不查看表单的HTML源代码,就很难确切地知道发生了什么,但我认为

          if (array_key_exists('update', $_POST)) {
          
          块需要移出外部if,因为如果它在那里,它将永远不会被执行


          如果您不想使用某种测试框架,
          print()
          在调试代码时是您的朋友。试着找出什么在执行,什么不在执行;您将很快发现哪些假设是错误的,从而发现错误所在。

          将此if语句从嵌套的if中删除:

          
           if (array_key_exists('update', $_POST)) { 
          ...
          }
          
          然后添加以下条件:

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

          我很确定这会解决您的问题。

          将此if语句从嵌套if中删除:

          
           if (array_key_exists('update', $_POST)) { 
          ...
          }
          
          然后添加以下条件:

          
           if (count($_POST) && array_key_exists('update', $_POST)) { 
          ...
          }
          
          我相信这会解决你的问题