从视图传递无线电输入到控制器codeigniter4



我想让所选值从视图传递到控制器,但它不工作,我尝试了一百种不同的方法来实现它,我试过用复选框代替单选,它工作了,但我不能选择产品,它只是一直选择第一个产品,使用set单选,我看到当我想选择产品时,它添加了checked=checked但它不传递给控制器。

Controller.php

public function form()

{

helper(['form']);

$projectModel = new ProjectsModel();

if ($this->request->getMethod() == 'post') {

$rules = [

'firstname' => 'required|min_length[3]|max_length[20]',
'lastname' => 'required|min_length[3]|max_length[20]',
'email' => 'required|min_length[6]|max_length[60]|valid_email|is_unique[accounts.email]',
'company' => 'required|min_length[3]|max_length[20]',
'location' => 'required|min_length[3]|max_length[20]',
'address' => 'required|min_length[3]|max_length[20]',
'product' => 'required',


];

if(!$this->validate($rules)) {
$data['validation'] = $this->validator;
}
else {
$newData = [
'id' => session()->get('os_id'),
'firstname' => $this->request->getVar('firstname'),
'lastname' => $this->request->getVar('lastname'),
'email' => $this->request->getVar('email'),
'company' => $this->request->getVar('company'),
'location' => $this->request->getVar('location'),
'address' => $this->request->getVar('address'),
'product' => $this->request->getVar('product'),
];
$projectModel->save($newData);
session()->setFlashdata('success', 'Successful updated');
return redirect()->to('form/success');
}
}

$data['user'] = $projectModel->where('id', session()->get('id'))->first();

echo view('templates/header', $data);
echo view('form', $data);
echo view('templates/footer', $data);
}

View.php

/>
<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shirt">
<input type="radio" name="product[]" value="2" <?php echo set_radio('product', '2'); ?> />
<div class="icon">
<img class="icons" src="../shirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="Chiloti">
<input type="radio" name="product[]" value="3" <?php echo set_radio('product', '3'); ?> />
<div class="icon">
<img class="icons" src="../tshirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>

<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shirt">
<input type="radio" name="product[]" value="4" <?php echo set_radio('product', '4'); ?> />
<div class="icon">
<img class="icons" src="../shirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shirt">
<input type="radio" name="product[]" value="5" <?php echo set_radio('product', '5'); ?> />
<div class="icon">
<img class="icons" src="../shirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shirt">
<input type="radio" name="product[]" value="5" <?php echo set_radio('product', '6'); ?> />
<div class="icon">
<img class="icons" src="../shirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="Chiloti">
<input type="radio" name="product[]" value="7" <?php echo set_radio('product', '7'); ?> />
<div class="icon">
<img class="icons" src="../tshirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>

<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shirt">
<input type="radio" name="product[]" value="8" <?php echo set_radio('product', '8'); ?> />
<div class="icon">
<img class="icons" src="../shirt.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>

<div class="col-sm-4">
<div class="choice" data-toggle="wizard-radio" rel="tooltip" title="shoes">
<input type="radio" name="product[]" value="9" <?php echo set_radio('product', '9'); ?> />
<div class="icon">
<img class="icons" src="shoes.svg" alt="" style="width:45%;margin-top: 25%;">
</div>
</div>
</div>
</div>
</div>
</div>

只是一个尝试,但是根据CI的文档,set_radio的第一个参数应该是字段的name属性。

您已经给这个无线电组起了一个通用名称"product[]"但是你在传递"产品"。作为set_radio的第一个参数。

我在看set_radio的代码,它没有用方括号做任何魔术,所以我看不出这两个字符串匹配的任何原因。

最新更新