3

我正在为 PHP 实践创建一个基本的内容管理系统。以下是从 CMS 中删除帖子的示例代码:

<?php

session_start();

include '../DatabaseConnection.php';

if (!isset($_SESSION['logged_in'])) {

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

}

if (isset($_POST['deleteconfirm'])) {
    $id = $_GET['id'];

    $dbobj = new DBConnect();

    $dbobj -> connect();

    $query = sprintf("delete from `data` where `id` = %d", $id);

    $results = $dbobj -> sqlQuery($query);

    if ($results) {

        $dbobj -> disconnect();
    }

    header('Location:home.php');
    exit();
} elseif (isset($_POST['deletecancel'])) {

    header('Location:home.php');
    exit();

}
?>

<html>
    <head>
        <title> Admin Area of CMS ! Delete Post</title>
        <link rel="stylesheet"  type="text/css" href="../template/style.css"/>
    </head>
    <body>
        <div id="container">
            <div id="logo">
                <h1><a href="../index.php">CMS</a></h1>
                A minimal Content Management System
            </div>
            <div id="content">
                <form action="post-delete.php" method="post">
                    <div id="deletealert">
                        <h3 >You really want to delete this post?</h3>
                        <p>
                            This action cannot be undone !
                        </p>
                        <input type="submit" name="deleteconfirm" value="Yes"/>
                        <input type="submit" name="deletecancel" value="No"/>
                    </div>
                </form>
            </div>
        </div>
    </body>
</html>

其他一切似乎都工作正常,除了当我点击删除帖子然后点击“是”确认时,页面被重定向到主页而不删除实际帖子。

任何指示或帮助表示赞赏。如果我错过了上下文中的重要内容,请告诉我。

更新:

问题出在代码中:

<form action="post-delete.php" method="post">

我还必须将 传递id给脚本,$id如下所示:

<form action="post-delete.php?id=<?php echo $id; ?>" method="post">

感谢大家的帮助。现在问题已经解决了:)

1> 查询之前运行完全正常,帖子实际上已被删除。然后我以是/否的形式添加了来自用户的额外确认。

此外,当用户单击“否”时,他会被正确重定向回来。只是当他单击“是”时,他被重定向到主页而没有实际删除帖子。

2> 该id字段是从处理主页(home.php)的脚本传递的。然后它将此页面称为“php-delete.php”。

4

2 回答 2

0

首先,将标题部分放入 中if,这样只有在元素被删除时才会重定向。

if ($results) {

        $dbobj -> disconnect();
        header('Location:home.php');
    }

第一次,这绝对不会重定向你,因为你应该在你的 sql 查询中遇到错误;

mysql_error()在零件中使用else以查看问题。

于 2013-07-28T13:22:21.010 回答
0

将以下内容添加到您的表单中:

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

改变:

$id = $_GET['id'];

至:

$id = $_POST['id'];
于 2013-07-28T13:26:22.170 回答