You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP MySQL CRUD问题:kommenter_verwalter.php数据展示与删除功能修复

Fixing Comment Display & Delete Functionality in kommenter_verwalter.php

Hey there! Let's walk through fixing your comment table and delete button issues step by step. Since you're new to PHP and databases, I'll break this down clearly, keeping your existing classprove.php as the core comment manager.


Step 1: Verify classprove.php Has Core Functionality

First, make sure your classprove.php includes the necessary database connection and methods to fetch/delete comments. If it doesn't, add these key parts (adjust database credentials to match yours):

<?php
class CommentManager {
    private $db;

    public function __construct() {
        // Connect to your database
        $this->db = new mysqli('localhost', 'your_username', 'your_password', 'your_database');
        if ($this->db->connect_error) {
            die("Database connection failed: " . $this->db->connect_error);
        }
    }

    // Fetch all comments from the mela table
    public function getAllComments() {
        $query = "SELECT id, name, email, message FROM mela ORDER BY id DESC";
        $result = $this->db->query($query);
        return $result->fetch_all(MYSQLI_ASSOC); // Return as associative array
    }

    // Delete a comment by ID (using prepared statement to prevent SQL injection)
    public function deleteComment($commentId) {
        $stmt = $this->db->prepare("DELETE FROM mela WHERE id = ?");
        $stmt->bind_param("i", $commentId); // "i" = integer type
        return $stmt->execute();
    }
}
?>

Step 2: Rewrite kommenter_verwalter.php for Display & Delete

Now update your kommenter_verwalter.php to use the CommentManager class, display the table, and handle delete requests. Here's the full working version:

<?php
// Include the comment manager class
require_once 'classprove.php';

$commentManager = new CommentManager();

// Handle delete request first (before displaying content)
if (isset($_POST['delete_id'])) {
    $deleteId = (int)$_POST['delete_id']; // Cast to integer to prevent injection
    if ($commentManager->deleteComment($deleteId)) {
        $successMsg = "Comment deleted successfully!";
    } else {
        $errorMsg = "Failed to delete comment.";
    }
}

// Fetch all comments
$comments = $commentManager->getAllComments();
?>

<!DOCTYPE html>
<html>
<head>
    <title>Comment Management</title>
    <style>
        table { border-collapse: collapse; width: 80%; margin: 20px auto; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        .delete-btn { background-color: #ff4444; color: white; border: none; padding: 5px 10px; cursor: pointer; }
        .msg { padding: 10px; margin: 10px auto; width: 80%; }
        .success { background-color: #dff0d8; color: #3c763d; }
        .error { background-color: #f2dede; color: #a94442; }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Manage Comments</h1>

    <!-- Display success/error messages -->
    <?php if (isset($successMsg)): ?>
        <div class="msg success"><?= $successMsg ?></div>
    <?php endif; ?>
    <?php if (isset($errorMsg)): ?>
        <div class="msg error"><?= $errorMsg ?></div>
    <?php endif; ?>

    <!-- Comments Table -->
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
                <th>Message</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody>
            <?php if (empty($comments)): ?>
                <tr>
                    <td colspan="5" style="text-align: center;">No comments found.</td>
                </tr>
            <?php else: ?>
                <?php foreach ($comments as $comment): ?>
                    <tr>
                        <td><?= $comment['id'] ?></td>
                        <td><?= htmlspecialchars($comment['name']) ?></td>
                        <td><?= htmlspecialchars($comment['email']) ?></td>
                        <td><?= htmlspecialchars($comment['message']) ?></td>
                        <td>
                            <!-- Delete Form (POST method is more secure than GET) -->
                            <form method="POST" style="display: inline;">
                                <input type="hidden" name="delete_id" value="<?= $comment['id'] ?>">
                                <button type="submit" class="delete-btn" onclick="return confirm('Are you sure you want to delete this comment?');">Delete</button>
                            </form>
                        </td>
                    </tr>
                <?php endforeach; ?>
            <?php endif; ?>
        </tbody>
    </table>
</body>
</html>

Key Fixes & Explanations

  • Database Safety: We use prepared statements in deleteComment() to prevent SQL injection—critical for security.
  • Proper Request Handling: The delete logic runs before displaying the table, so the page refreshes with updated data immediately after deletion.
  • Data Sanitization: htmlspecialchars() is used to escape user input in the table, preventing XSS attacks.
  • User Feedback: Success/error messages let you know if the delete worked.
  • Fallback for Empty Data: The table shows a friendly message when there are no comments.

Testing Tips

  1. Double-check your database credentials in classprove.php (host, username, password, database name).
  2. Confirm your mela table has the exact fields: id, name, email, message (case-sensitive in some databases).
  3. Make sure your web server has permission to connect to the database and perform read/delete operations.

内容的提问来源于stack exchange,提问作者dsaj34v

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:32:41