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