CodeIgniter 4 自定义用户ID提交后带斜杠,如何去除斜杠仅存数字?
解决CodeIgniter 4中自定义用户ID末尾带"/"的问题
问题根源
你视图里的隐藏input标签写法不规范:
<input type="hidden" name="user_id" value=<?=$userid?>/>
这里value属性未用引号包裹,<?=$userid?>后直接跟了标签闭合符/>,浏览器会把/解析为value值的一部分,导致提交的user_id变成数字/的格式。
修复方案
1. 修正视图的input标签写法
给value属性加上双引号,移除多余的/,保证代码解析正确:
<form action="/dashboard/post" method="post"> <input type="hidden" name="user_id" value="<?=$userid?>" /> <div class="form-group"> <label for="">Username</label> <input type="text" name="user_name" id="" class="form-control"> </div> <div class="form-group"> <label for="">Email</label> <input type="text" name="user_email" id="" class="form-control"> </div> </form>
2. 控制器接收数据时做兜底过滤(推荐)
为了彻底确保存入数据库的是纯数字,在处理表单提交的控制器方法中,对user_id做强制转换或过滤:
public function post() { // 获取提交的user_id并强制转为整数,自动去除非数字内容 $userId = (int)$this->request->getPost('user_id'); // 组装数据存入数据库 $model = new DataModel(); $data = [ 'user_id' => $userId, 'user_name' => $this->request->getPost('user_name'), 'user_email' => $this->request->getPost('user_email') ]; $model->save($data); // 后续业务逻辑... }
补充:优化自定义ID生成逻辑
你当前用count($user)生成ID存在隐患(数据删除后会出现重复ID),可以改成取现有最大ID再加1:
public function index() { $model = new DataModel(); // 获取当前最大的user_id,无数据时默认0 $maxUserId = $model->selectMax('user_id')->get()->getRow()->user_id ?? 0; $hidden_data = [ 'userid' => $maxUserId + 1 ]; return view('dashboard', $hidden_data); }
内容的提问来源于stack exchange,提问作者black dragon
相关产品推荐
相关产品推荐

