php如何实现点击删除代码

发布时间:2021-11-16 09:37:09 作者:iii
来源:亿速云 阅读:242
# PHP如何实现点击删除代码

## 前言

在Web开发中,数据删除功能是几乎所有动态网站都需要实现的基础功能之一。PHP作为最流行的服务器端脚本语言之一,提供了多种方式来实现点击删除操作。本文将详细介绍如何使用PHP结合前端技术实现安全高效的点击删除功能。

## 目录

1. [基础删除原理](#基础删除原理)
2. [GET方式实现删除](#get方式实现删除)
3. [POST方式实现删除](#post方式实现删除)
4. [AJAX无刷新删除](#ajax无刷新删除)
5. [删除前的确认提示](#删除前的确认提示)
6. [安全性考虑](#安全性考虑)
7. [完整示例代码](#完整示例代码)
8. [总结](#总结)

## 基础删除原理

<a name="基础删除原理"></a>

PHP实现点击删除的核心原理是通过HTTP请求将待删除项的标识符(通常是数据库ID)传递给服务器,服务器端PHP脚本接收这个标识符后执行删除操作。

基本流程如下:

1. 前端页面生成包含删除按钮的HTML
2. 用户点击删除按钮时触发请求
3. 服务器接收请求并处理删除逻辑
4. 返回操作结果给前端
5. 前端更新显示

## GET方式实现删除

<a name="get方式实现删除"></a>

GET是最简单的实现方式,适合简单的删除操作。

### 实现步骤

1. 创建删除链接
```php
// list.php
echo "<a href='delete.php?id=1'>删除</a>";
  1. 创建删除处理脚本
// delete.php
if(isset($_GET['id'])) {
    $id = intval($_GET['id']);
    // 执行删除操作
    $result = $db->query("DELETE FROM table WHERE id = $id");
    
    if($result) {
        header("Location: list.php?msg=删除成功");
    } else {
        header("Location: list.php?msg=删除失败");
    }
}

优缺点分析

优点: - 实现简单 - 无需表单

缺点: - 安全性较低(URL可见) - 容易被CSRF攻击 - 不适合复杂数据

POST方式实现删除

POST方式比GET更安全,适合大多数删除场景。

实现步骤

  1. 创建删除表单
// list.php
echo "<form method='post' action='delete.php'>
        <input type='hidden' name='id' value='1'>
        <button type='submit'>删除</button>
      </form>";
  1. 删除处理脚本
// delete.php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['id'])) {
    $id = intval($_POST['id']);
    // 执行删除操作
    $result = $db->query("DELETE FROM table WHERE id = $id");
    
    if($result) {
        header("Location: list.php?msg=删除成功");
    } else {
        header("Location: list.php?msg=删除失败");
    }
}

优缺点分析

优点: - 比GET更安全 - 可传输更多数据 - 不会被浏览器缓存

缺点: - 需要表单提交 - 页面会刷新

AJAX无刷新删除

AJAX技术可以实现无刷新删除,提升用户体验。

实现步骤

  1. HTML部分
<button class="delete-btn" data-id="1">删除</button>
  1. JavaScript部分
document.querySelectorAll('.delete-btn').forEach(btn => {
    btn.addEventListener('click', function() {
        const id = this.getAttribute('data-id');
        
        if(confirm('确定要删除吗?')) {
            fetch('delete.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: 'id=' + id
            })
            .then(response => response.json())
            .then(data => {
                if(data.success) {
                    this.closest('tr').remove();
                } else {
                    alert('删除失败: ' + data.message);
                }
            });
        }
    });
});
  1. PHP处理脚本
// delete.php
header('Content-Type: application/json');

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['id'])) {
    $id = intval($_POST['id']);
    
    try {
        $result = $db->query("DELETE FROM table WHERE id = $id");
        
        if($result) {
            echo json_encode(['success' => true]);
        } else {
            echo json_encode(['success' => false, 'message' => '数据库操作失败']);
        }
    } catch(Exception $e) {
        echo json_encode(['success' => false, 'message' => $e->getMessage()]);
    }
    
    exit;
}

优缺点分析

优点: - 无刷新操作 - 用户体验好 - 可实时反馈

缺点: - 实现较复杂 - 需要JavaScript支持 - 需要考虑浏览器兼容性

删除前的确认提示

为了防止误操作,删除前应该添加确认提示。

JavaScript确认框

// 传统方式
if(confirm('确定要删除吗?')) {
    // 执行删除
}

// 使用SweetAlert等库
Swal.fire({
    title: '确定删除?',
    text: "删除后将无法恢复!",
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#d33',
    cancelButtonColor: '#3085d6',
    confirmButtonText: '确定删除'
}).then((result) => {
    if (result.isConfirmed) {
        // 执行删除
    }
});

服务器端验证

即使前端有验证,服务器端也必须进行验证:

// 检查权限
if(!$user->hasPermission('delete')) {
    die('无权操作');
}

// 验证数据存在
$item = $db->query("SELECT * FROM table WHERE id = $id");
if(!$item) {
    die('要删除的数据不存在');
}

安全性考虑

1. SQL注入防护

// 使用预处理语句
$stmt = $db->prepare("DELETE FROM table WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();

2. CSRF防护

// 生成token
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

// 表单中添加token
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">

// 验证token
if(!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    die('非法请求');
}

3. 权限验证

// 检查用户是否登录
if(!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

// 检查是否有删除权限
if(!$user->canDelete($id)) {
    die('无权删除此项');
}

4. 日志记录

// 记录删除操作
$log = sprintf(
    "[%s] 用户 %d 删除了ID为 %d 的记录",
    date('Y-m-d H:i:s'),
    $_SESSION['user_id'],
    $id
);
file_put_contents('delete.log', $log.PHP_EOL, FILE_APPEND);

完整示例代码

数据库连接 (config.php)

<?php
$db = new mysqli('localhost', 'username', 'password', 'database');
if($db->connect_error) {
    die("连接失败: " . $db->connect_error);
}
session_start();

列表页面 (list.php)

<?php
require 'config.php';

// 查询数据
$result = $db->query("SELECT * FROM products");

// CSRF token
$token = $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
?>

<!DOCTYPE html>
<html>
<head>
    <title>商品列表</title>
    <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</head>
<body>
    <h1>商品列表</h1>
    
    <?php if(isset($_GET['msg'])): ?>
        <div class="alert"><?php echo htmlspecialchars($_GET['msg']); ?></div>
    <?php endif; ?>
    
    <table>
        <tr>
            <th>ID</th>
            <th>名称</th>
            <th>价格</th>
            <th>操作</th>
        </tr>
        <?php while($row = $result->fetch_assoc()): ?>
        <tr id="row-<?php echo $row['id']; ?>">
            <td><?php echo $row['id']; ?></td>
            <td><?php echo htmlspecialchars($row['name']); ?></td>
            <td><?php echo $row['price']; ?></td>
            <td>
                <button class="delete-btn" 
                        data-id="<?php echo $row['id']; ?>"
                        data-token="<?php echo $token; ?>">
                    删除
                </button>
            </td>
        </tr>
        <?php endwhile; ?>
    </table>
    
    <script>
    document.querySelectorAll('.delete-btn').forEach(btn => {
        btn.addEventListener('click', function() {
            const id = this.getAttribute('data-id');
            const token = this.getAttribute('data-token');
            
            Swal.fire({
                title: '确定删除?',
                text: "删除后将无法恢复!",
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#d33',
                cancelButtonColor: '#3085d6',
                confirmButtonText: '确定删除'
            }).then((result) => {
                if (result.isConfirmed) {
                    fetch('delete.php', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                        },
                        body: `id=${id}&csrf_token=${token}`
                    })
                    .then(response => response.json())
                    .then(data => {
                        if(data.success) {
                            document.getElementById(`row-${id}`).remove();
                            Swal.fire('删除成功!', '', 'success');
                        } else {
                            Swal.fire('删除失败', data.message, 'error');
                        }
                    })
                    .catch(error => {
                        Swal.fire('错误', '请求失败: ' + error, 'error');
                    });
                }
            });
        });
    });
    </script>
</body>
</html>

删除处理 (delete.php)

<?php
require 'config.php';

header('Content-Type: application/json');

// 验证请求方法
if($_SERVER['REQUEST_METHOD'] != 'POST') {
    echo json_encode(['success' => false, 'message' => '非法请求方法']);
    exit;
}

// 验证CSRF token
if(!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
    echo json_encode(['success' => false, 'message' => '非法请求']);
    exit;
}

// 验证用户登录
if(!isset($_SESSION['user_id'])) {
    echo json_encode(['success' => false, 'message' => '请先登录']);
    exit;
}

// 获取并验证ID
if(!isset($_POST['id']) || !is_numeric($_POST['id'])) {
    echo json_encode(['success' => false, 'message' => '无效的ID']);
    exit;
}

$id = intval($_POST['id']);

try {
    // 验证数据存在
    $stmt = $db->prepare("SELECT id FROM products WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->store_result();
    
    if($stmt->num_rows == 0) {
        echo json_encode(['success' => false, 'message' => '要删除的数据不存在']);
        exit;
    }
    
    // 执行删除
    $stmt = $db->prepare("DELETE FROM products WHERE id = ?");
    $stmt->bind_param("i", $id);
    $result = $stmt->execute();
    
    if($result) {
        // 记录日志
        $log = sprintf(
            "[%s] 用户 %d 删除了ID为 %d 的商品",
            date('Y-m-d H:i:s'),
            $_SESSION['user_id'],
            $id
        );
        file_put_contents('delete.log', $log.PHP_EOL, FILE_APPEND);
        
        echo json_encode(['success' => true]);
    } else {
        echo json_encode(['success' => false, 'message' => '数据库操作失败']);
    }
} catch(Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}

总结

本文详细介绍了PHP实现点击删除功能的多种方法:

  1. GET方式:简单但不安全,适合不重要的数据
  2. POST方式:更安全,适合大多数场景
  3. AJAX方式:用户体验好,适合现代Web应用

实现删除功能时需要注意:

根据项目需求选择合适的方式,对于现代Web应用,推荐使用AJAX方式结合POST请求,既能保证安全性又能提供良好的用户体验。

希望本文能帮助你更好地理解和实现PHP中的点击删除功能。在实际开发中,还应该根据具体业务需求进行适当调整和扩展。 “`

这篇文章详细介绍了PHP实现点击删除功能的多种方法,从基础原理到安全考虑,再到完整示例代码,共约3050字,采用Markdown格式编写。内容涵盖了GET、POST、AJAX三种实现方式,并重点强调了安全性问题。

推荐阅读:
  1. php使用代码删除图片的方法
  2. bootstrap实现点击删除按钮弹出确认框的实例代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:css怎么设置鼠标放上图片出现文字

下一篇:binlog 备份是怎么样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》