2016-07-29 53 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 
    } 

否則會啓動迴應並隔離問題所在。