【问题标题】:codeigniter validation error with field "required"字段“必需”的codeigniter验证错误
【发布时间】:2013-09-05 14:37:28
【问题描述】:

我的验证表单有问题。如果我输入“必需”,它就不起作用,例如:

控制器:

public function updateBenefit(){
    $result = array();
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    $this->form_validation->set_rules('beneficio', 'Nombre del Beneficio', 'required|alpha');
    $this->form_validation->set_rules('info', 'Info', 'alpha');
    $this->form_validation->set_rules('descrip', 'Descripción', 'alpha');
    $this->form_validation->set_rules('orden', 'Orden', 'integer');

    // $this->form_validation->set_rules('fecha', 'Fecha', 'date_valid');

    $this->form_validation->set_message('required', 'El campo %s es requerido');

    if ($this->form_validation->run() == TRUE){

        if (isset($_POST['id'])){

            $idb = $_POST['id'];
            $benefit = BeneficiosManager::getInstance()->getHome($idb);

            $result['message'] = "Se ha modificado el Beneficio con éxito"; 

        } else{
            $benefit = BeneficiosManager::getInstance()->create();

            $result['message'] = "Se ha cargado el Beneficio con éxito"; 
        }

        $benefit->nombre = ucfirst(strtolower($_POST['beneficio']));
        $benefit->content = ucfirst(strtolower($_POST['descrip']));
        $benefit->intro = ucfirst(strtolower($_POST['info']));
        $benefit->active = $_POST['optionsRadios2'];
        $benefit->orden = $_POST['orden'];

        // $benefit->date = $_POST['fecha'];

        BeneficiosManager::getInstance()->save($benefit);

        }else{
            //no se validaron los datos ingresados
            $result['message'] = "Error validación";
        }

        echo json_encode($result);
}

查看:

    {extends file='admin/base/base.tpl'}

{block name='content'}

<h3>Cargar Beneficio </h3>
</br>
<form action="{site_url()}admin/updateBenefit" class="form-horizontal" method="post" id="" enctype="multipart/form-data">

   <div class="control-group">
      <label class="control-label">Beneficio</label>
      <div class="controls">
         <input type="text" name="beneficio" value="" class="m-wrap medium" />
         <span class="help-inline">Nombre del Beneficio</span>
      </div>
   </div>

   <div class="control-group">
      <label class="control-label">Info</label>
      <div class="controls">
         <textarea name="info" class="medium m-wrap" rows="3"></textarea>
         <span class="help-inline">Información Clave</span>
      </div>
   </div>

   <div class="control-group">
      <label class="control-label">Descripción</label>
      <div class="controls">
         <textarea name="descrip" class="large m-wrap" rows="3"></textarea>
         <span class="help-inline">Descripción del Beneficio</span>
      </div>
   </div>

   <div class="control-group">
      <label class="control-label">Activo</label>
      <div class="controls">
            <label class="radio line">
               <input type="radio" name="optionsRadios2" value="1"/>Si</input>
            </label>
            <label class="radio line">   
               <input type="radio" name="optionsRadios2" value="0"/>No</input>
            </label>
         <span class="help-inline">Ofrecer Beneficio</span>
      </div>
   </div>

   <div class="control-group">
      <label class="control-label">Orden</label>
      <div class="controls">
         <input type="text" name="orden" value="" class="m-wrap small" />
         <span class="help-inline">Prioridad del Beneficio</span>
      </div>
   </div>

   <div class="control-group">
      <label class="control-label">Fecha</label>
      <div class="controls">
         <input type="text" name="fecha" value="{$smarty.now|date_format}" class="m-wrap medium" />
         <span class="help-inline"></span>
      </div>
   </div>   

   <div class="form-actions">
      <button type="submit" class="btn blue"><i class="icon-ok"></i> Guardar</button>
      <button type="button" class="btn">Cancelar</button>
   </div>

</form>

{/block}

可能是什么问题?

如果我删除“必填”字段,表单会验证...但如果我输入它,它不会...我不知道还能尝试什么,不明白为什么会这样

代码现在可以工作了,感谢@Jonathan 纠正了我,当我尝试这种方法时,我也犯了一个输入错误。我试图将两个词放在同一个字段中(即:bon vivir);所以正确的输入是:bonvivir。

【问题讨论】:

  • 你有一个叫“title”的字段吗?
  • it does not work 不是有用的错误描述。究竟是什么行不通?你有任何错误吗?预期的结果是什么?
  • 一个可能的问题是您缺少一些所需的代码。请完整阅读手册条目:ellislab.com/codeigniter/user-guide/libraries/…
  • @user1281385 是的,我有一个名为“title”的字段
  • @AmalMurali 当我使用“必填”字段时,我的表单无法验证,我收到验证错误。如果我删除“必填”字段,表单会验证,但我确实需要使用必填字段

标签: php codeigniter validation field required


【解决方案1】:

我不确定您是否使用“title”作为真实标题输入元素的名称。因为我发现你使用这个代码来分配你的头衔。

$benefit->title = ucfirst(strtolower(trim($_POST['beneficio'])));

所以你可能想尝试使用

$this->form_validation->set_rules('beneficio', 'Nombre del Beneficio', 'required|alpha');

改为。

我不确定我的猜测是否正确。试一试。希望这会有所帮助。

【讨论】:

  • IKR?如果您不使用它,为什么还需要“title”?
  • @Jonathan 我已将字段“title”更改为“nombre”,但仍然无法正常工作,显示相同的验证错误
  • @jcorry 标题是必需的,因为您无法上传没有名称的福利。这是一个关于人和奖品的网站,奖品是福利,所以我们需要保留他们的名字。
  • @Jimena 它看起来不像您的控制器正在使用 $_POST 元素“title”做任何事情,除了确认它在那里......您使用的唯一地方 $_POST['title' ] 在表单验证中...
  • @jcorry 我已经将“title”更改为“nombre”,但我不明白你的意思,你说我只使用“title”(或“nombre”)是什么意思表单验证?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多