CodeIgniter错误验证用户名

时间:2016-07-29 16:16:30

标签: php codeigniter validation

我是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>

3 个答案:

答案 0 :(得分:0)

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

fileProcessingTrial.txt

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

答案 1 :(得分:0)

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

  if($row_cnt == 1)
    {

      return true; //el usuario existe
    }

那就是说,如果只有一行,则返回true。但如果你在进行回调之前进行了测试,那么将会有一行带有用户名。将其更改为

  if($row_cnt >= 1)
    {

      return true; //el usuario existe
    }

否则开始回声并找出问题所在。

答案 2 :(得分:0)

我认为问题出现在您的代码后面:

$row_cnt = $consulta->num_rows;

所以你必须替换它:

$row_cnt = $consulta->num_rows();

$row_cnt = $consulta->count_all_results