如何通过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,提问作者Сергій Сергійович
相关产品推荐
相关产品推荐

