编辑来自 mysql 数据库的数据

edit data from mysql db

我在 CMS 上工作,我的编辑代码目前似乎有问题,我无法弄清楚我一生中的问题是什么,当我提交编辑时,一切都像编辑成功,但是没有任何更改或提交到数据库。

我一直在尝试很多不同的东西,但似乎没有什么不同,我完全迷失在这个上面。

editarticle.php

<?php
ob_start();
session_start();

include_once('includes/connection.php');
include_once('includes/news.php');
include_once('includes/functions.php');

$article = new Article;
$funct = new UserFunctions;

if (isset($_SESSION['logged_in'])) {
    $articles = $article->fetch_all();

    if (isset($_POST['title'], $_POST['content'])) {
        $title = $_POST['title'];
        $content = nl2br($_POST['content']);

        if (empty($title) or empty($content)) {
            $error = 'All fields are required!';
            header('Location: index.php?p=editarticle');
        } else {
            global $pdo;

            $query = $pdo->prepare('UPDATE articles SET article_title = ?, article_content = ? WHERE article_id=?');
            $query->bindValue(1, $title);
            $query->bindValue(2, $content);
            $query->bindValue(3, $id);

            $query->execute();

            header('Location: index.php');
        }
    }

    //check if an article is selected to be edited
    if (isset($_GET['id'])) {
        $id = $_GET['id'];

        $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ?");
        $query->bindValue(1, $id);
        $query->execute();

        $rows = $query->fetchAll();

        //get the article title and content to put in edit inputs
        foreach ($rows as $row) {
            $id = $row['article_id'];
            $title = $row['article_title'];
            $content = $funct->br2nl($row['article_content']);
        }
?>
<!-- POST -->
<div class="post">
    <div class="topwrap">
        <div class="userinfo pull-left">
            <div class="avatar">
                <img src="images/avatar.jpg" alt="" />
                <div class="status green">&nbsp;</div>
            </div>

            <div class="icons">
                <img src="images/icon1.jpg" alt="" /><img src="images/icon4.jpg" alt="" /><img src="images/icon5.jpg" alt="" /><img src="images/icon6.jpg" alt="" />
            </div>
        </div>
        <div class="posttext pull-left">
            <h2>Edit Article</h2>
            <!-- add Article form start !-->
            <form action="editarticle.php" method="post" autocomplete="off">
                <input type="text" name="title" value="<?php echo $title; ?>" /><br /><br />
                <textarea rows="10" cols="87" name="content" /><?php echo $content; ?></textarea>
                <!-- add article form break !-->
        </div>
        <div class="clearfix"></div>
    </div>                              
    <div class="postinfobot">

        <div class="dateposted pull-right">
                <!-- add article form continue !-->
                <input class="btn btn-primary" type="submit" value="Submit Changes" />
            </form>
            <!-- add article form end !-->
        </div>

        <div class="clearfix"></div>
    </div>
</div>
<!-- POST -->
<?php
    } else {
?>
<!-- POST -->
<div class="post">
    <div class="topwrap">
        <div class="userinfo pull-left">

        </div>
        <div class="posttext pull-left">
            <h2>Select an Article to Edit</h2>
                    <?php foreach ($articles as $article) { ?>
                        <?php echo $article['article_id']; ?> - <a href="index.php?p=editarticle&id=<?php echo $article['article_id']; ?>"><?php echo $article['article_title']; ?></a><br />
                    <?php } ?>
        </div>
        <div class="clearfix"></div>
    </div>                              
    <div class="postinfobot">
        <div class="dateposted pull-right"> </div>

        <div class="clearfix"></div>
    </div>
</div>
<!-- POST -->
<?php
    }
} else {
    header('Location: index.php');
}

?>

includes/news.php

class Article {
    public function fetch_all() {
        global $pdo;
        $article_status = 1;

        $query = $pdo->prepare("SELECT * FROM articles WHERE article_status = ? ORDER BY article_timestamp DESC");
        $query->bindValue(1, $article_status);
        $query->execute();

        return $query->fetchAll();
    }

    public function fetch_data($article_id) {
        global $pdo;
        $article_status = 1;

        $query = $pdo->prepare("SELECT * FROM articles WHERE article_id = ? AND article_status = ?");
        $query->bindValue(1, $article_id);
        $query->bindValue(2, $article_status);
        $query->execute();

        return $query->fetch();
    }
}

我 10 年来第一次回到 PHP,并且在过去 2 年中一直在进行大量 C# 开发。到目前为止,我发现很难解决 PHP 的问题,因为我收到的错误消息很少或没有(甚至在我主机上的 error_log 中也没有)。

知道为什么不将更改提交到数据库吗?

该页面在加载时正在使用 get 设置 $id。但是话又说回来,您通过创建 post 的新实例来 post 将数据传递给自己,这个新的 post 对 $id

一无所知

因此您需要在表单中显式传递 $id(除非它是一个会话变量,您可以使用 $_session 变量来检索它)作为隐藏值 尝试将此添加到表单中:

<input type="hidden" value="<?php echo $id;?>">

正如@noob 指出的那样,您需要以第一种形式传递文章 ID,因为您的 UPDATE 语句需要它。

因此:

if (isset($_POST['title'], $_POST['content'], $_POST['id'])) {
        $title = $_POST['title'];
        $content = nl2br($_POST['content']);
        $id= $_POST['id'];

在你的表单中:

<form action="editarticle.php" method="post" autocomplete="off">
                <input type="hidden" value="<?php echo $id;?>">
                <input type="text" name="title" value="<?php echo $title; ?>" /><br /><br />
                <textarea rows="10" cols="87" name="content" /><?php echo $content; ?></textarea>
                <!-- add article form break !-->
        </div>
        <div class="clearfix"></div>
    </div>                              
    <div class="postinfobot">

        <div class="dateposted pull-right">
                <!-- add article form continue !-->
                <input class="btn btn-primary" type="submit" value="Submit Changes" />
            </form>