PHP代码不更新SQL数据库,尽管print\r建议正确输入

PHP代码不更新SQL数据库,尽管print\r建议正确输入,php,mysql,Php,Mysql,首先,这是我在这里的第一个问题,尽管我已经搜索了这个网站,但我所看到的答案都不能解决我目前的问题 我是一名PHP新手,目前正在为一门课程的最终项目工作。目标是建立一个基本的博客,用户可以发布,删除和编辑他们的新闻,管理员可以编辑或删除一切等等。我做得很好,但编辑功能有点麻烦 以下代码显示所有博客文章、作者和发布日期。如果当前登录的人是帖子的作者或管理员,他们可以选择删除或编辑每个帖子。此时会出现一个小表单,其中包含标题和帖子文本。当用户在中键入其他内容时,单击编辑按钮应将数据库中的值更改为用户指

首先,这是我在这里的第一个问题,尽管我已经搜索了这个网站,但我所看到的答案都不能解决我目前的问题

我是一名PHP新手,目前正在为一门课程的最终项目工作。目标是建立一个基本的博客,用户可以发布,删除和编辑他们的新闻,管理员可以编辑或删除一切等等。我做得很好,但编辑功能有点麻烦

以下代码显示所有博客文章、作者和发布日期。如果当前登录的人是帖子的作者或管理员,他们可以选择删除或编辑每个帖子。此时会出现一个小表单,其中包含标题和帖子文本。当用户在中键入其他内容时,单击编辑按钮应将数据库中的值更改为用户指定的新值。问题是,每当我在当前设置中单击“编辑”按钮时,什么都不会发生。如果我将If语句移到另一个If语句之外,则POST会更新,但在数据库中会变为空白

在事件发生后运行print\r($\u POST)会显示它构建的数组具有正确的名称和更新的值,但它们仍然没有在数据库中更新。这是代码,相关部分从最后一个if语句开始(我知道,它不是注入证明,一工作就会开始):

$query=“按id描述从posts订单中选择id、标题、正文、发布日期、用户id”;
$query\u fetch=mysql\u query($query);
而($blog\u post=mysql\u fetch\u assoc($query\u fetch)){
$author_id=$blog_post[“user_id”];
$post_id=$blog_post[“id”];
$post_id2=$blog_post[“id”]。2;
$title=$blog_post['title'];
$body=$blog_post['body'];
$query=“从id为“$author\u id”的用户中选择用户名”;
$query\u run=mysql\u query($query);
$author=mysql\u fetch\u assoc($query\u run);
echo“.censor($blog_post[“title”])。”
Autor:“$author[“username”]。”


Objavljeno:“$blog_post[“发布日期”]; 如果($\u会话['admin']==1或$\u会话['username']==$author[“username”]){ 回声“; 回声“; } echo“”.censor($blog_post[“body”])。“

”; 如果(isset($\u POST[“$POST\u id”])){ $del_post=“从id='$post_id'的帖子中删除”; mysql_查询($del_post); } 如果(isset($\u POST[“$POST\u id2]”){ 回显“新标题新文本$body”; 如果(isset($_POST['edit'])){ $edit_title=$_POST['title']; $edit_body=$_POST['body']; $query=“UPDATE posts SET title='$edit_title',body='$edit_body'其中id='$post_id'; mysql\u查询($query); } } }

任何帮助都将不胜感激。

首先检查您的查询是否正确。然后尝试硬编码您的查询。还可以在
phpMyAdmin
中测试您的查询,也可以尝试从每个查询的
编号
变量中删除
'

请问,你能告诉我们你的错误吗


您的数据库也可能已经更新。所以请仔细检查它。

这是我通常调试的方式<代码>回显查询。在PHPmyadmin中运行它,并查看错误

所以,在你的情况下

echo“updateposts SET title='$edit\u title',body='$edit\u body',其中id='$post\u id'

echo
然后您将得到脚本将尝试运行的查询


尝试在phpmyadmin中运行它,并检查错误是什么。

最后一段代码

if (isset($_POST["$post_id2"])) {
    echo "<form action='' method= 'POST'>New title<input type='text' value = '$title' name='title'>New text<textarea name='body' id='' cols='30' rows='10'>$body</textarea><input type='submit' name='edit' value='edit'></form>"; 
    if (isset($_POST['edit'])) {
        $edit_title = $_POST['title'];
        $edit_body = $_POST['body'];
        $query = "UPDATE posts SET title= '$edit_title', body= '$edit_body' WHERE id= '$post_id'";
        mysql_query($query);
    }
}
这样,您可以立即运行一个查询,而无需在一个周期内浏览所有帖子

另一个有用的方法是在不同的PHP文件之间拆分代码,并将通用代码保存在一个文件中,包括:

<?php // this is delete.php
    include "common.php";
    $post_id = my_get_var('post_id');
    my_sql_command("DELETE FROM posts WHERE...");
在显示周期中,我们将显示以下信息:

$query_fetch = mysql_query($query);

// This file will receive requests to edit or delete
// We can use a single form.
echo '<form action="manage.php">';

while ($post = mysql_fetch_assoc($query_fetch)) {

    echo "<h2>" . censor($post["title"]) . "</h2>" . "<br> <p> Autor: " . $post["username"] . "</p><br><p>Objavljeno: " . $post["pub_date"];
    if ((1 == $_SESSION['admin']) or ($_SESSION['username'] == $post["username"]) {
        echo "<input type=\"submit\" name=\"Obriši objavu\" value=\"{$post['id']}\" />";
        echo "<input type=\"submit\" name=\"Uredi objavu\" value=\"{$post['id']}\" />";
    }
    echo "<p>" . censor($blog_post["body"]) . "</p>";
}
echo "</form>";
$query\u fetch=mysql\u query($query);
//此文件将收到编辑或删除请求
//我们可以用一种形式。
回声';
while($post=mysql\u fetch\u assoc($query\u fetch)){
echo“.censor($post[“title”])。”
Autor:“.$post[“username”]。”


Objavljeno:“.$post[“发布日期”]; 如果((1=$\u会话['admin'])或($\u会话['username']==$post['username'])){ 回声“; 回声“; } echo“”.censor($blog_post[“body”])。“

”; } 回声“;
这样,您只需要一个表单,它将提交一个字段,其中包含描述要执行的操作的名称以及执行操作的帖子

然后文件manage.php将接收此信息,也可以用于更新它:

foreach(array(
    "delete" => "Obriši objavu", // from list.php
    "edit" => "Uredi objavu", // " "
    "update" => "update" // from this file itself (see below)
  )
    as $test_todo => $var) {
    if (array_key_exists($var, $_POST)) {
        $id   = $_POST[$var];
        $todo = $test_todo;
    }
}
if (isset($id)) {
    switch($todo) {
        case "delete":
            mysql_query("DELETE FROM posts WHERE id = '{$id}'");
            break;
        case "edit":
            // Get this post.
            $query = "SELECT posts.id, title, body, pub_date, user_id, username FROM posts JOIN users ON (posts.user_id = users.id) WHERE posts.id = '{$id}';";
            echo '<form action="manage.php" method= "POST">';
            // This is how we tell this file what to do, and to what.
            echo "<input type=\"hidden\" name=\"update\" value=\"{$id}\">";
            // run query, fetch the one record, display info...
            echo "</form>";
            break;
      case "update":
            // Build the update query from $_POST.
            mysql_query("UPDATE posts SET ...");
  }
foreach(数组)(
“delete”=>“Obriši objavu”,//来自list.php
“编辑”=>“Uredi objavu”
“更新”=>“更新”//来自此文件本身(见下文)
)
作为$test_todo=>$var){
如果(数组\u键\u存在($var,$\u POST)){
$id=$_POST[$var];
$todo=$test_todo;
}
}
如果(isset($id)){
交换机($todo){
案例“删除”:
mysql_查询(“从id='{$id}'的帖子中删除”);
打破
案例“编辑”:
//得到这个帖子。
$query=“选择posts.id、标题、正文、发布日期、用户id、来自(posts.user_id=users.id)的posts加入用户的用户名,其中posts.id='{$id}';”;
回声';
//这就是为什么我们不能
<?php // this is delete.php
    include "common.php";
    $post_id = my_get_var('post_id');
    my_sql_command("DELETE FROM posts WHERE...");
<form action="delete.php" method="post" ...>
$query = "SELECT posts.id, title, body, pub_date, user_id, username FROM posts JOIN users ON (posts.user_id = users.id) ORDER BY posts.id desc";
$query_fetch = mysql_query($query);

// This file will receive requests to edit or delete
// We can use a single form.
echo '<form action="manage.php">';

while ($post = mysql_fetch_assoc($query_fetch)) {

    echo "<h2>" . censor($post["title"]) . "</h2>" . "<br> <p> Autor: " . $post["username"] . "</p><br><p>Objavljeno: " . $post["pub_date"];
    if ((1 == $_SESSION['admin']) or ($_SESSION['username'] == $post["username"]) {
        echo "<input type=\"submit\" name=\"Obriši objavu\" value=\"{$post['id']}\" />";
        echo "<input type=\"submit\" name=\"Uredi objavu\" value=\"{$post['id']}\" />";
    }
    echo "<p>" . censor($blog_post["body"]) . "</p>";
}
echo "</form>";
foreach(array(
    "delete" => "Obriši objavu", // from list.php
    "edit" => "Uredi objavu", // " "
    "update" => "update" // from this file itself (see below)
  )
    as $test_todo => $var) {
    if (array_key_exists($var, $_POST)) {
        $id   = $_POST[$var];
        $todo = $test_todo;
    }
}
if (isset($id)) {
    switch($todo) {
        case "delete":
            mysql_query("DELETE FROM posts WHERE id = '{$id}'");
            break;
        case "edit":
            // Get this post.
            $query = "SELECT posts.id, title, body, pub_date, user_id, username FROM posts JOIN users ON (posts.user_id = users.id) WHERE posts.id = '{$id}';";
            echo '<form action="manage.php" method= "POST">';
            // This is how we tell this file what to do, and to what.
            echo "<input type=\"hidden\" name=\"update\" value=\"{$id}\">";
            // run query, fetch the one record, display info...
            echo "</form>";
            break;
      case "update":
            // Build the update query from $_POST.
            mysql_query("UPDATE posts SET ...");
  }