因为我用的是WordPress博客,然后搭建的子比主题,有时候需要删除大量的垃圾贴和水帖,所以我直接问ChatGPT如何实现这个功能,我们首先需要告诉他怎么去实现这个功能,比如我删除帖子的SQL代码是:
代码语言:javascript复制delete from wp_posts where `post_author` = 1 AND `post_date` >='2023-06-01 00:00:00' and `post_date` < '2023-08-2 23:59:59';
这段代码就是删除了用户ID为1在2023-06-01 00:00:00到2023-08-2 23:59:59之间发布的帖子,我们提问的方式是,需要按照这段SQL代码然后写出一个可以填写用户ID和删除日期时间的PHP页面。
多次调试后,我得到了这样一段代码:
代码语言:javascript复制<?php
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取表单提交的用户ID和时间区间
$postAuthor = $_POST['post_author'];
$startDate = $_POST['start_date'];
$endDate = $_POST['end_date'];
// 连接到数据库
$host = '数据库主机名';
$dbname = '数据库名称';
$username = '数据库用户名';
$password = '数据库密码';
try {
// 连接到数据库
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 构建 SQL 删除命令
$sql = "DELETE FROM wp_posts WHERE `post_author` = :postAuthor AND `post_date` >= :startDate AND `post_date` < :endDate";
// 准备和执行删除命令
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':postAuthor', $postAuthor, PDO::PARAM_INT);
$stmt->bindParam(':startDate', $startDate, PDO::PARAM_STR);
$stmt->bindParam(':endDate', $endDate, PDO::PARAM_STR);
$stmt->execute();
// 输出删除成功的提示
$rowCount = $stmt->rowCount();
echo "成功删除了 $rowCount 条帖子。";
} catch (PDOException $e) {
// 输出错误信息
echo "删除帖子时发生错误:" . $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>删除帖子</title>
<!-- 引入 Bootstrap 样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
<!-- 引入 Flatpickr 样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
</head>
<body>
<div class="container">
<h1>删除帖子</h1>
<form method="POST" action="">
<div class="mb-3">
<label for="post_author" class="form-label">用户ID:</label>
<input type="text" class="form-control" name="post_author" id="post_author" required>
</div>
<div class="mb-3">
<label for="start_date" class="form-label">开始日期:</label>
<input type="text" class="form-control" name="start_date" id="start_date" required>
</div>
<div class="mb-3">
<label for="end_date" class="form-label">结束日期:</label>
<input type="text" class="form-control" name="end_date" id="end_date" required>
</div>
<input type="submit" class="btn btn-primary" value="删除帖子">
</form>
</div>
<!-- 引入 Bootstrap 和 Flatpickr -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<script>
// 初始化日期和时间选择器
$(function () {
$('#start_date').flatpickr({
enableTime: true,
dateFormat: 'Y-m-d H:i:s'
});
$('#end_date').flatpickr({
enableTime: true,
dateFormat: 'Y-m-d H:i:s'
});
});
</script>
</body>
</html>
前端界面为:
发现确实可以删除帖子,然后我又将删除的提示美化了下,然后直接在用户ID下方设置了一个删除所有文章的按钮。逻辑是如果勾选了删除所有文章,起止日期将被停用,所以得到了这段代码:
代码语言:javascript复制<?php
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 获取表单提交的用户ID和时间区间
$postAuthor = $_POST['post_author'];
$startDate = $_POST['start_date'];
$endDate = $_POST['end_date'];
// 连接到数据库
$host = '数据库主机名';
$dbname = '数据库名称';
$username = '数据库用户名';
$password = '数据库密码';
try {
// 连接到数据库
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 构建 SQL 删除命令
$sql = "DELETE FROM wp_posts WHERE `post_author` = :postAuthor";
// 如果选择了删除所有,则不需要时间区间条件
if (!isset($_POST['delete_all'])) {
$sql .= " AND `post_date` >= :startDate AND `post_date` < :endDate";
}
// 准备和执行删除命令
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':postAuthor', $postAuthor, PDO::PARAM_INT);
if (!isset($_POST['delete_all'])) {
$stmt->bindParam(':startDate', $startDate, PDO::PARAM_STR);
$stmt->bindParam(':endDate', $endDate, PDO::PARAM_STR);
}
$stmt->execute();
// 输出删除成功的提示
$rowCount = $stmt->rowCount();
echo '<div class="container alert alert-success" role="alert">';
echo "成功删除了 $rowCount 条帖子。";
echo '</div>';
} catch (PDOException $e) {
// 输出错误信息
echo '<div class="container alert alert-danger" role="alert">';
echo "删除帖子时发生错误:" . $e->getMessage();
echo '</div>';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>删除帖子</title>
<!-- 引入 Bootstrap 样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
<!-- 引入 Flatpickr 样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
</head>
<body>
<div class="container">
<h1>删除帖子</h1>
<form method="POST" action="">
<div class="mb-3">
<label for="post_author" class="form-label">用户ID:</label>
<input type="text" class="form-control" name="post_author" id="post_author" required>
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" name="delete_all" id="delete_all">
<label class="form-check-label" for="delete_all">删除所有文章</label>
</div>
<div class="mb-3">
<label for="start_date" class="form-label">开始日期:</label>
<input type="text" class="form-control" name="start_date" id="start_date" required>
</div>
<div class="mb-3">
<label for="end_date" class="form-label">结束日期:</label>
<input type="text" class="form-control" name="end_date" id="end_date" required>
</div>
<input type="submit" class="btn btn-primary" value="删除帖子">
</form>
</div>
<!-- 引入 Bootstrap 和 Flatpickr -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
<script>
// 初始化日期和时间选择器
$(function () {
$('#start_date').flatpickr({
enableTime: true,
dateFormat: 'Y-m-d H:i:s'
});
$('#end_date').flatpickr({
enableTime: true,
dateFormat: 'Y-m-d H:i:s'
});
// 监听删除所有复选框的变化
$('#delete_all').change(function () {
if (this.checked) {
$('#start_date, #end_date').prop('disabled', true);
} else {
$('#start_date, #end_date').prop('disabled', false);
}
});
});
</script>
</body>
</html>
前端页面是:
效果还不错,删除也挺迅速的,至少比在WordPress后台删除速度快很多。
如果你觉得本文有用,希望能回来点个赞!