【问题标题】:CodeIgniter Error validation usernameCodeIgniter 错误验证用户名
【发布时间】:2016-07-29 16:16:29
【问题描述】:

我是使用 CI 的新手,我在尝试验证表单时遇到问题,当我让任何字段为空白时,它可以工作,代码向我显示验证错误,它可以将用户保存在数据库中太...但是验证保存了 2 个具有相同“usuario”的用户,我不想要这个

如果有人可以帮忙

这是控制器的代码。

<?php

class Usuarios extends CI_controller
{
  public function __construct()
  {
    parent::__construct();

    $this->load->helper('form');
    $this->load->library('form_validation');
    $this->load->model('usuarios_model');
  }

  public function index()
  {
    $this->load->view('usuarios_view');
  }

  public function registro()
  {

    $this->load->view('registro_view');
    //$this->load->model('usuarios_model');     
  }

  public function registro_very()
  {
    if($this->input->post('submit_reg'))
    {

      $this->form_validation->set_rules('nombre', 'Nombre', 'required');
      $this->form_validation->set_rules('correo', 'Correo', 'required|trim');
      $this->form_validation->set_rules('user', 'Usuario', 'required|trim|callback_veryuser');
      $this->form_validation->set_rules('pass', 'Contraseña', 'required|trim');

      $this->form_validation->set_message('required', 'El campo %s esobligatorio');
      $this->form_validation->set_message('veryuser', 'El %s ya existe');

      if($this->form_validation->run() != FALSE)
      {
        $this->usuarios_model->add_user();
        $data = array('mensaje' => 'El usuario se registro correctamente');
        $this->load->view('registro_view', $data);
      }
      else
      {
        $this->load->view('registro_view');
      }
    }
  }

  public function veryuser($user)
  {
    $variable = $this->usuarios_model->veryuser($user);
    if($variable == true)
    {
      return false;
    }
    else
    {
      return true;
    }
  }

}

型号:

class Usuarios_model extends CI_model
{
  public function __construct()
  {
    parent::__construct();
  }

  public function veryuser($user)
  {
    $consulta = $this->db->get_where('usuarios', array('usuario' => $user));

    $row_cnt = $consulta->num_rows;
    if($row_cnt == 1)
    {

      return true; //el usuario existe
    }
    else
    {
      return false; //el usuario no existe      
    }
  }

  public function add_user()
  {
    $this->db->insert('usuarios',
        array(
        'nombre' => $this->input->post('nombre', true),
        'correo' => $this->input->post('correo', true),
        'usuario' => $this->input->post('user', true),
        'pass' => $this->input->post('pass', true),
        'codigo' => '123456',
        'estado' => '0'
    ));
  }

}

还有风景

<html>
  <body>    
    <h1>Registrar Usuario</h1>  
    <?php if(isset($mensaje)): ?>   
      <h2><?= $mensaje; ?></h2>         
    <?php endif; ?>     

    <form name="form_reg" action="<?= base_url().'usuarios/registro_very' ?>" method="post">

      <label for="Nombre">Nombre</label>        
      <input type="text" name="nombre" value="<?= @set_value('nombre') ?>"><br>

      <label for="Correo">Correo</label>        
      <input type="text" name="correo" value="<?= @set_value('correo') ?>"><br>

      <label for="usuario">usuario</label>      
      <input type="text" name="user" value="<?= @set_value('user') ?>"><br>

      <label for="Contraseña">Contraseña</label>
      <input type="password" name="pass" value="<?= @set_value('pass') ?>"><br>

      <input type="submit" value="Registrar" name="submit_reg"> 
      <a href="<?= base_url().'usuarios/' ?>" title="Iniciar Sesión">Iniciar Sesión</a>     
    </form>     
    <hr>    <?= validation_errors(); ?> 
  </body>
</html>

【问题讨论】:

    标签: php codeigniter validation


    【解决方案1】:

    我认为问题出在您的代码以下行:

    $row_cnt = $consulta->num_rows;
    

    所以你必须替换这个:

    $row_cnt = $consulta->num_rows();
    

    $row_cnt = $consulta->count_all_results
    

    【讨论】:

      【解决方案2】:

      您是否尝试调试veryuser() 以检查它是否工作?你是在调用veryuser() 之前设置$user 吗?请尝试以下操作:

      $this->form_validation->set_rules('user', 'Usuario', 'required|trim|callback_veryuser['.$this->input->post('user').']');
      

      我的建议是在 stackoverflow 中发布问题之前阅读文档。

      【讨论】:

        【解决方案3】:

        这是一个小问题,可能不是问题 - 但如果您使用相同的用户名反复测试 - 在您的模型中 - 更改此

          if($row_cnt == 1)
            {
        
              return true; //el usuario existe
            }
        

        也就是说,如果只有一行,则返回 true。但是如果您在执行回调之前进行了测试,那么用户名将超过一行。改成

          if($row_cnt >= 1)
            {
        
              return true; //el usuario existe
            }
        

        否则,请开始回应并找出问题所在。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-26
          • 2012-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-13
          • 2016-12-11
          • 1970-01-01
          相关资源
          最近更新 更多