在CodeIgniter 3.x中点击按钮时向数据库插入值为1的单条数据
CodeIgniter 3.x 实现点击按钮插入值为1的数据到数据库
1. 调整视图代码
优化原有视图片段,适配请求提交逻辑,同时处理CodeIgniter的CSRF安全验证:
<?php if(intval($fspd->quantity) <= 0): ?> <form id="restockForm"> <!-- 可选:如果需要关联商品ID等额外数据,添加隐藏字段 --> <input type="hidden" name="product_id" value="<?= $fspd->id ?>"> <!-- CSRF令牌,CodeIgniter默认开启保护,必须携带 --> <input type="hidden" name="<?= $this->security->get_csrf_token_name() ?>" value="<?= $this->security->get_csrf_hash() ?>"> <input type="text" id="demo" value="" readonly> <a href="javascript:;" onclick="clickdata()" class="btn btn-secondary btn-lg">Request For Restock</a> </form> <?php else: ?> <?php if($fspd->stock_status == 1): ?> <!-- 原有其他内容 --> <?php endif; ?> <?php endif; ?>
2. 实现前端点击触发函数
在视图底部或独立JS文件中添加AJAX请求,提交数据到控制器:
function clickdata() { const formData = new FormData(document.getElementById('restockForm')); // 手动添加要插入的固定值1 formData.append('status', 1); fetch('<?= base_url('inventory/submit_restock') ?>', { method: 'POST', body: formData }) .then(res => res.json()) .then(data => { if(data.success) { alert('补货请求已提交'); // 可选:提交后隐藏按钮区域 document.getElementById('restockForm').style.display = 'none'; } else { alert('提交失败,请重试'); } }) .catch(err => { console.error('请求错误:', err); alert('网络异常,请稍后再试'); }); }
3. 控制器处理请求
创建或修改控制器(示例命名为Inventory),添加数据处理方法:
<?php class Inventory extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('Restock_model'); // 可选:验证用户登录状态 $this->load->library('session'); if(!$this->session->userdata('logged_in')) { redirect('login'); } } public function submit_restock() { if($this->input->post()) { // 构造插入数据,status固定为1 $insertData = [ 'status' => 1, 'product_id' => $this->input->post('product_id'), 'created_at' => date('Y-m-d H:i:s') // 可选:添加时间戳 ]; // 调用模型执行插入 $result = $this->Restock_model->add_restock_request($insertData); echo json_encode(['success' => $result]); } else { echo json_encode(['success' => false, 'msg' => '非法请求']); } } } ?>
4. 模型实现数据库插入
创建Restock_model.php模型文件,编写数据库操作逻辑:
<?php class Restock_model extends CI_Model { public function __construct() { parent::__construct(); $this->load->database(); } public function add_restock_request($data) { // 替换为你的实际数据表名 $this->db->insert('restock_requests', $data); return $this->db->affected_rows() > 0; } } ?>
注意事项
- 确保数据库表
restock_requests存在对应字段(如status、product_id等,可根据业务调整) - 不要随意关闭CSRF保护,这是CodeIgniter的安全基础
- 可在控制器中添加表单验证逻辑,比如校验
product_id的合法性
内容的提问来源于stack exchange,提问作者Rahul tiwari
相关产品推荐
相关产品推荐

