我有一个从数据库中检索到的扇区列表,我试图仅根据用户填充所选扇区。共有7个部门(如下所示)。
HTML:
<p class="sector"><span>North East</span><input type="checkbox" class="sector-list" name="sector[]" value="1" /></p>
<p class="sector"><span>City of Sunderland</span><input type="checkbox" class="sector-list" name="sector[]" value="2" /></p>
<p class="sector"><span>Sunderland East</span><input type="checkbox" class="sector-list" name="sector[]" value="3" /></p>
<p class="sector"><span>Sunderland North</span><input type="checkbox" class="sector-list" name="sector[]" value="4" /></p>
<p class="sector"><span>Sunderland West</span><input type="checkbox" class="sector-list" name="sector[]" value="5" /></p>
<p class="sector"><span>Coalfield</span><input type="checkbox" class="sector-list" name="sector[]" value="6" /></p>
<p class="sector"><span>Washington</span><input type="checkbox" class="sector-list" name="sector[]" value="7" /></p>
控制器:
foreach($data['all_sectors'] as $sectors):
echo"<p class='service'><span>$sectors->sector</span><input type='checkbox' class='sector-list' name='sector[]' value='$sectors->ID' /></p>";
endforeach;
现在,当用户去编辑他们的个人资料时,我正在尝试预先填充用户之前选择的复选框。
我很困惑如何在创建帐户时重新填充这些行业。我尝试了以下内容。
控制器:
$data['assigned_sectors'] = $this->info_model->getAssignedSectors();
foreach($data['assigned_sectors'] as $sector)
{
$id_str = array(
'ID' => $sector->sector_ID
);
}
print_r($id_str);
以下是'$ data ['assigned_sectors']'
的结果Array ( [0] => stdClass Object ( [agency_ID] => 2 [sector_ID] => 3 [ID] => 3 [sector] => Sunderland East ) [1] => stdClass Object ( [agency_ID] => 2 [sector_ID] => 4 [ID] => 4 [sector] => Sunderland North ) )
我尝试将两者都添加到foreach复选框html但没有运气
set_checkbox('sector[]', $data['assigned_sectors']->sector_ID) //not working
set_checkbox('sector[]', $id_str->ID) //not working
我可能忽略了一些简单的东西,但任何帮助都会非常感激。谢谢!
更新:
$this->load->model('admin/info_model');
$data['agency_sectors'] = $this->info_model->getAgencySectors($agency);
$this->load->model('admin/agencies_model');
$data['all_sectors'] = $this->agencies_model->getAgencySectors($agency);
echo"<p id='sectors'><label for='sectors'>Sector</label></p>";
echo"<div id='sector_list' style='float: left;width: 70%;'>";
foreach($data['agency_sectors'] as $sector):
foreach($data['all_sectors'] as $sectors):
$selected_text = ($sector->sector_ID === $sectors->ID)
? " checked='checked'"
: '' ;
echo"<p class='service'><span>$sectors->sector</span><input type='checkbox' class='sector-list' name='sector[]' value='$sectors->ID' " . $selected_text . "/></p>";
endforeach;
endforeach;
echo"</div>";
如果从7中选择了2个代理扇区,则会将列表重复两次,3个结果相同,等等
答案 0 :(得分:3)
name
属性应与set_checkbox
的第一个参数匹配:
变化:
set_checkbox('sector', '1')
为:
set_checkbox('sector[]', '1')
****** **** UPDATE
我之前的回答是不正确的。您无法从数据库中的值设置set_checkbox
的复选框选中状态。 See @Raidenace's answer
您必须通过检查循环中的值是否相同来设置它:
而不是这段代码:
<p class='sector'><span>$sectors->sector</span>
<input type='checkbox' class='sector-list' name='sector[]'
value='1' "
. set_checkbox('sector', $data['assigned_sectors']->sector_ID) . " />
</p>
试试这段代码:
$selected_text = ($data['assigned_sectors']->sector_ID === $sectors->ID)
? " checked='checked'"
: '' ;
<p class='sector'><span>$sectors->sector</span>
<input type='checkbox' class='sector-list' name='sector[]'
value='$sectors->ID' " . $selected_text . " />
</p>
答案 1 :(得分:3)
好吧,这似乎不直观但是set_checkbox()函数“允许你通过传递的POST数组中的值设置复选框的选定值。所以这意味着要恢复一个复选框到表单提交期间用户选择的值,在表单的用例中得到验证,并且由于验证错误,用户返回到同一表单。我不认为这是你正在尝试的在你的情况下完成。
我必须从他们的功能定义中弄明白
/**
* Set Checkbox
*
* Let's you set the selected value of a checkbox via the value in the POST array.
* If Form Validation is active it retrieves the info from the validation class
*
* @access public
* @param string
* @param string
* @param bool
* @return string
*/
if ( ! function_exists('set_checkbox'))
{
function set_checkbox($field = '', $value = '', $default = FALSE)
{
$OBJ =& _get_validation_object();
if ($OBJ === FALSE)
{
if ( ! isset($_POST[$field]))
{
if (count($_POST) === 0 AND $default == TRUE)
{
return ' checked="checked"';
}
return '';
}
$field = $_POST[$field];
if (is_array($field))
{
if ( ! in_array($value, $field))
{
return '';
}
}
else
{
if (($field == '' OR $value == '') OR ($field != $value))
{
return '';
}
}
return ' checked="checked"';
}
return $OBJ->set_checkbox($field, $value, $default);
}
}