2016-07-29 7 views
0

Ich bin neu mit CI arbeiten, und ich habe ein Problem Ich versuche, ein Formular zu validieren, es funktioniert, wenn ich Feld leer lassen den Code zeigt mir die Validierung Fehler und es kann die speichern Benutzer in der DB tooh ... aber die Validierung speichern 2 Anwender mit dem gleichen „usuario“ und ich will nicht diesenCodeIgniter Fehler Validierung Benutzername

, wenn jemand mit diesen

dies ist der Code der Steuerung helfen kann.

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

} 

Modell:

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' 
    )); 
    } 

} 

Und der Blick

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

Antwort

0

denke ich, das Problem hier auf dem Code ist folgende Zeile:

$row_cnt = $consulta->num_rows; 

so müssen Sie diese ersetzen:

$row_cnt = $consulta->num_rows(); 

oder

$row_cnt = $consulta->count_all_results 
0

Haben Sie versucht, das Debuggen veryuser() zu prüfen, ob es funktioniert oder nicht? Setzen Sie $ user, bevor Sie den veryuser() aufrufen? Versuchen Sie folgendes:

Mein Vorschlag ist, die Dokumentation zu lesen, bevor Sie eine Frage in stackoverflow.

0

dies ist ein kleiner Punkt und wahrscheinlich nicht das Problem - aber wenn Sie immer und immer wieder mit dem gleichen Benutzername testen - im Modell - ändert diese

if($row_cnt == 1) 
    { 

     return true; //el usuario existe 
    } 

das ist zu sagen, wenn es nur eine Zeile ist dann true zurück. Aber wenn Sie Tests vor dem Callback durchgeführt haben, wird es mehr als eine Zeile mit dem Benutzernamen geben. ändere es in

sonst starten Sie echo Dinge und isolieren, wo das Problem ist.