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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:00:00