2016-07-29 64 views
0

我新与CI工作,我有一个问题我试图验证窗体,它工作时,我让任何领域在空白代码显示我验证错误,它可以保存用户在DB tooh ......但确认保存2用户提供相同的“usuario”我不希望这CodeIgniter错误验证用户名

如果任何人都可以用

帮助,这是控制器的代码。

<?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> 

回答

0

我认为这个问题是在这里对您的代码下面一行:

$row_cnt = $consulta->num_rows; 

所以你必须替换此:

$row_cnt = $consulta->num_rows(); 

$row_cnt = $consulta->count_all_results 
0

你尝试调试veryuser()来检查是否正常工作或没有?你在调用veryuser()之前是否设置了$ user?请尝试以下操作:

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

我的建议是在发布问题之前先阅读文档,然后再发送到stackoverflow。

0

这是一个小点,可能不是问题 - 但如果你是使用相同的用户名测试一遍又一遍 - 在你的模型 - 如果只有一个行改变这种

if($row_cnt == 1) 
    { 

     return true; //el usuario existe 
    } 

多数民众赞成说然后返回true。但如果您在回调之前进行了测试,那么用户名将会出现多行。将其更改为

if($row_cnt >= 1) 
    { 

     return true; //el usuario existe 
    } 

否则会启动回应并隔离问题所在。