如何用PHP实现审批/驳回按钮功能 数据存入phpMyAdmin并设置状态生效/失效
1. 数据库设计(phpMyAdmin 中操作)
首先在 phpMyAdmin 对应的业务数据库中创建审批记录表,示例建表SQL如下:
CREATE TABLE `approval_records` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `title` varchar(255) NOT NULL COMMENT '审批事项标题', `content` text COMMENT '审批内容详情', `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态:0待审批 1审批通过 2驳回 3生效 4失效', `operator` varchar(100) DEFAULT NULL COMMENT '最后操作人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批记录表';
2. 审批列表页(带操作按钮)
页面渲染所有审批记录,每行对应审批、驳回、生效、失效操作按钮,且按钮会根据当前状态自动置灰不可操作,示例代码:
<?php // 数据库连接配置修改为自己的实际参数 $conn = mysqli_connect('localhost', '数据库用户名', '数据库密码', '数据库名'); mysqli_set_charset($conn, 'utf8mb4'); // 查询所有审批记录 $sql = "SELECT * FROM `approval_records` ORDER BY `create_time` DESC"; $res = mysqli_query($conn, $sql); ?> <table border="1" cellpadding="10" cellspacing="0"> <tr> <th>ID</th> <th>审批标题</th> <th>当前状态</th> <th>操作</th> </tr> <?php while($row = mysqli_fetch_assoc($res)): ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo $row['title']; ?></td> <td> <?php $statusMap = [0=>'待审批',1=>'审批通过',2=>'驳回',3=>'生效',4=>'失效']; echo $statusMap[$row['status']]; ?> </td> <td> <form method="post" action="handle_operation.php" style="display:inline-block;margin-right:5px;"> <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> <input type="hidden" name="op_type" value="pass"> <button type="submit" <?php if($row['status']!=0) echo 'disabled'; ?>>审批通过</button> </form> <form method="post" action="handle_operation.php" style="display:inline-block;margin-right:5px;"> <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> <input type="hidden" name="op_type" value="reject"> <button type="submit" <?php if($row['status']!=0) echo 'disabled'; ?>>驳回</button> </form> <form method="post" action="handle_operation.php" style="display:inline-block;margin-right:5px;"> <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> <input type="hidden" name="op_type" value="enable"> <button type="submit" <?php if($row['status']!=1) echo 'disabled'; ?>>设为生效</button> </form> <form method="post" action="handle_operation.php" style="display:inline-block;"> <input type="hidden" name="id" value="<?php echo $row['id']; ?>"> <input type="hidden" name="op_type" value="disable"> <button type="submit" <?php if($row['status']!=1 && $row['status']!=3) echo 'disabled'; ?>>设为失效</button> </form> </td> </tr> <?php endwhile; ?> </table>
3. 后端操作处理逻辑
新建handle_operation.php文件处理所有状态变更请求,示例代码:
<?php // 数据库连接配置修改为自己的实际参数 $conn = mysqli_connect('localhost', '数据库用户名', '数据库密码', '数据库名'); mysqli_set_charset($conn, 'utf8mb4'); // 接收请求参数 $id = intval($_POST['id']); $op_type = trim($_POST['op_type']); // 操作类型对应状态映射 $opToStatus = [ 'pass' => 1, 'reject' => 2, 'enable' => 3, 'disable' => 4 ]; // 参数校验 if(!isset($opToStatus[$op_type]) || $id <=0){ die('参数错误'); } $targetStatus = $opToStatus[$op_type]; // 预处理更新语句,避免SQL注入 $stmt = mysqli_prepare($conn, "UPDATE `approval_records` SET `status` = ? WHERE `id` = ?"); mysqli_stmt_bind_param($stmt, "ii", $targetStatus, $id); $execRes = mysqli_stmt_execute($stmt); if($execRes){ // 操作成功跳转回列表页 header('Location: 你的列表页访问地址'); exit; }else{ die('操作失败:'.mysqli_error($conn)); } ?>
功能优化建议
- 可以把表单提交改为AJAX异步请求,操作无需刷新页面,体验更好
- 新增操作权限校验逻辑,仅允许对应角色的用户执行审批、状态变更操作
- 额外新增操作日志表,记录每次状态变更的操作人、操作时间、操作IP等信息,方便后续溯源
- 增加操作前二次确认弹窗,避免误操作
内容的提问来源于stack exchange,提问作者Mohamed Adel
相关产品推荐
相关产品推荐

