我应该使用set_value()在CodeIgniter中重新填充表单

时间:2014-01-20 11:36:24

标签: php forms codeigniter

我的问题是我是否应该使用set_value()来重新填充表单。这可能看起来很奇怪,但是我正在创建一个共享控制器功能和视图,可用于添加新记录或编辑现有记录。这样做似乎很有意义,因为功能非常相似。

因此,如果我们调用现有记录进行编辑,我会这样做:

$data['fields'] = $this->customer_model->get_customer($id);

如果表单已提交以保存记录,或者我们是第一次添加记录,则表单有可能在用户出错时重新加载,因此我填充$ data ['fields']这个改为:

$data['fields'] = array(
    'company' => $this->input->post('company') ?: '',
    'website' => $this->input->post('website') ?: '',
    'credit_limit' => $this->input->post('credit_limit') ?: ''
);

我的表单元素如下所示:

<input type="text" name="company" value="<?php echo set_value('company', $fields['company']); ?>"  />

但我认为它可能看起来像这样:

<input type="text" name="company" value="<?php echo escape_html($fields['company']); ?>"  />

由于表单数据可能来自用户输入(添加或保存时),也可能来自数据库(检索要编辑的记录时),如果没有第2个,我不能完全依赖post()set_value()参数。此外,set_value()的第二个参数将始终存在(在此示例中为$fields['company']),因为它是从头开始初始化的,这就是我想直接使用它的原因。

这种方法有问题吗?

3 个答案:

答案 0 :(得分:0)

如果您想在FALSE返回表单验证时填写表单字段或插入数据以进行编辑操作,我建议您使用以下帮助程序:

<强>用法

<input type="text" name="last_name" value="<?=vset_value('last_name','',$rs);?>">

<强>解释

$rs这里是记录的$ db数据(如果要将其发送到视图中)。为了保持安全,请在控制器中加入$this->data['rs'] = false;。如果$rs设置为true,则helper从中获取结果并显示它。否则,如果密钥存在于$_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;
  }
}

如果您喜欢这种方式,请告诉我。我可以提供更多表单输入类型,如select,checkbox等。

答案 1 :(得分:0)

这种方法是正确的,如CodeIgniter文档中所述。实际上,您不需要在set_value中包含第二个参数。

set_value definition:

string set_value(string $field = '', string $default = '')

//$field: If there is a submitted field with this name, its value is returned.
//$default: If there is no matching submitted field, this value is returned.

答案 2 :(得分:0)

是的,你应该。

 set_value() is used to re-populate a form has failed validation. 
  There is no additional filtering on it,  so it faster.

 But, I prefer some times to use $this->input->post() for the secure.