MrC*_*rot 5 php forms codeigniter
我的问题是我是否应该使用set_value()来重新填充表单.这可能看起来很奇怪,但是我正在创建一个共享控制器功能和视图,可用于添加新记录或编辑现有记录.这样做似乎很有意义,因为功能非常相似.
因此,如果我们调用现有记录进行编辑,我会这样做:
$data['fields'] = $this->customer_model->get_customer($id);
Run Code Online (Sandbox Code Playgroud)
如果表单提交保存记录,或者如果我们要添加一条记录的第一次,形式必须重新加载,如果用户出错的可能性,所以我填充$数据["域"]这种方式来代替:
$data['fields'] = array(
'company' => $this->input->post('company') ?: '',
'website' => $this->input->post('website') ?: '',
'credit_limit' => $this->input->post('credit_limit') ?: ''
);
Run Code Online (Sandbox Code Playgroud)
我的表单元素如下所示:
<input type="text" name="company" value="<?php echo set_value('company', $fields['company']); ?>" />
Run Code Online (Sandbox Code Playgroud)
但我认为它可能看起来像这样:
<input type="text" name="company" value="<?php echo escape_html($fields['company']); ?>" />
Run Code Online (Sandbox Code Playgroud)
由于表单数据可能来自任何用户输入(添加或保存时)或从数据库(检索记录进行编辑时),我不能完全依赖post()或set_value()没有第二个参数.此外,set_value()的第二个参数将始终存在($fields['company']在此示例中),因为它从头开始初始化,这就是为什么我想直接使用它.
这种方法有问题吗?
如果您想在表单验证返回 FALSE 时填充表单字段或插入数据以进行编辑操作,我建议您使用以下帮助程序:
用法
<input type="text" name="last_name" value="<?=vset_value('last_name','',$rs);?>">
Run Code Online (Sandbox Code Playgroud)
解释
$rs这是用于记录的 $db 数据(如果您要发送它来查看)。为了安全起见,请包含$this->data['rs'] = false;在您的控制器中。如果$rs设置为 true,则助手会从中获取结果并显示它。否则,它会显示该密钥是否存在于 中$_POST。如果两者都不存在,则显示默认值。
帮手
/**
* vayes_helper::vset_value
*
* Retains state of INPUT text after Form Validation
*
* @access public
* @param string name of INPUT tag
* @param string default value for INPUT tag
* @param mixed DB Result (array or object)
* @return string
*/
if(!function_exists('vset_value')) {
function vset_value ($name_of_input,$default_state='',$db_result_array='') {
$CI = &get_instance();
$render_state = $default_state;
if($CI->input->post()) {
$render_state = $CI->input->post($name_of_input);
} else {
if(is_object($db_result_array) && isset($db_result_array->$name_of_input)) {
$render_state = (isset($db_result_array->$name_of_input)) ? $db_result_array->$name_of_input : $default_state;
} else if($db_result_array != '' && array_key_exists($name_of_input,$db_result_array)) {
$render_state = (isset($db_result_array[$name_of_input])) ? $db_result_array[$name_of_input] : $default_state;
}
}
return $render_state;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你喜欢这种方式,请告诉我。我可以提供更多表单输入类型,如选择、复选框等。
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |