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

如何通过jQuery调用目标函数?实现点击按钮触发Ajax请求删除数据库指定行的PHP代码编写方案

解决Ajax触发PHP删除数据库指定行的问题

首先,咱们先把前端的jQuery代码调整得更合理——原来的{$hook_name}应该是要删除的目标ID(比如订单ID),建议用按钮的data-id属性来存储这个动态值,这样点击不同按钮就能删除对应的数据:

$(".remove_order_submit").click(function(){ 
  // 从按钮的data-id属性获取要删除的订单ID
  const targetId = $(this).data('id');
  
  $.ajax({ 
    url: "/modules/ps_customercedula/ps_customercedula.php", 
    method: "post", 
    data: { method: 1, id_order_remove: targetId }, 
    success: function(data){ 
      // 处理后端返回的JSON结果
      const response = JSON.parse(data);
      if(response.hasError) {
        alert('删除失败:' + response.errors.join(', '));
      } else {
        alert('删除成功!');
        // 可选:直接在页面上移除对应的订单行,提升用户体验
        $(this).closest('.order-item-row').remove();
      }
    },
    error: function() {
      alert('请求出错,请稍后重试');
    }
  }); 
}); 

接下来是后端的PHP代码,因为这是PrestaShop模块的场景,咱们需要确保模块入口文件能正确初始化模块并调用displayAjax方法:

模块入口文件(ps_customercedula.php)

<?php
if (!defined('_PS_VERSION_')) {
    exit; // 防止直接访问
}

// 加载模块的核心类文件
require_once _PS_MODULE_DIR_ . 'ps_customercedula/ps_customercedula.php';

// 实例化模块对象
$module = new PsCustomerCedula();

// 判断是否是指定的Ajax请求
if (Tools::isSubmit('method') && Tools::getValue('method') === '1') {
    // 调用displayAjax方法处理删除逻辑
    $module->displayAjax();
}

模块类中的displayAjax方法优化

你原来的方法里有固定删除id_log=2的问题,咱们改成用前端传入的id_order_remove参数来动态删除指定行,同时加上权限验证防止恶意请求:

public function displayAjax() { 
    $db = \Db::getInstance(); 

    // 先验证操作权限:仅允许后台登录员工执行删除
    if (!Context::getContext()->employee->isLoggedBack()) {
        die(Tools::jsonEncode([
            'hasError' => true,
            'errors' => ['无权限执行此操作']
        ]));
    }

    // 如果模块已有错误,直接返回
    if (!empty($this->errors)) {
        die(Tools::jsonEncode([
            'hasError' => true,
            'errors' => $this->errors
        ])); 
    }

    $method = Tools::getValue('method');
    $targetId = (int)Tools::getValue('id_order_remove');

    // 验证参数有效性
    if($method === '1' && $targetId > 0) { 
        // 这里根据你的实际业务调整删除条件:
        // 示例:删除log表中与传入订单ID关联的记录
        $deleteResult = $db->delete('log', 'id_order = ' . $targetId);
        
        // 如果是直接删除指定ID的log记录,改成下面这行:
        // $deleteResult = $db->delete('log', 'id_log = ' . $targetId);

        // 根据删除结果返回对应信息
        if ($deleteResult) {
            die(Tools::jsonEncode([
                'hasError' => false,
                'message' => '删除成功'
            ]));
        } else {
            die(Tools::jsonEncode([
                'hasError' => true,
                'errors' => ['删除失败,目标记录不存在或无权限删除']
            ]));
        }
    } else {
        die(Tools::jsonEncode([
            'hasError' => true,
            'errors' => ['请求参数错误']
        ]));
    }
}

几个关键注意点:

  • 前端按钮需要添加data-id="要删除的ID"属性,比如<button class="remove_order_submit" data-id="123">删除</button>
  • 后端一定要做参数校验和权限验证,避免SQL注入和未授权操作
  • 删除条件要根据你的实际数据库表结构调整,确保删除的是正确的行

内容的提问来源于stack exchange,提问作者Сергій Сергійович

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 02:57:40