Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Principiante en Code

Estas en el tema de Principiante en Code en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a tod@s, Estoy empezando a romperme la cabeza con el Codeigniter, de momento iba todo más o menos bien, pero he llegado a un ...
  #1 (permalink)  
Antiguo 24/01/2011, 09:35
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 4 meses
Puntos: 0
Principiante en Code

Hola a tod@s,

Estoy empezando a romperme la cabeza con el Codeigniter, de momento iba todo más o menos bien, pero he llegado a un 'problema' que seguro que es una tontería pero que no veo donde xxxx está el lío.

Tengo un formulario de registro típico de ingresar nombre / dirección / cp / email / contrasenya. He conseguido ya que salte si el email está repetido dentro de la base de datos, todo bien, pero no consigo que al rellenar el formulario perfectamente se ingresen los datos

Así es como tengo el controlador :

Código PHP:
 public function addform()
    {  
        
$this->load->helper(array('form''url'));
        
$this->load->library('form_validation');


        
$this->form_validation->set_rules('nombre''Nombre''trim|required');
        
$this->form_validation->set_rules('direccion''Dirección''trim|required');
        
$this->form_validation->set_rules('cp''Código Postal''trim|required|exact_length[5]|numeric');
        
$this->form_validation->set_rules('email''Email''trim|required|valid_email|xss_clean|callback__comprobar_email_repetido');
        
$this->form_validation->set_rules('contrasenya''Contraseña''trim|required|min_length[5]|max_length[10]|matches[recontrasenya]|sha1');
        
$this->form_validation->set_rules('recontrasenya''Confirme contraseña''trim|required');

        
$this->load->view('miscelanea/cabecera_pagina.php');
        

        if (
$this->form_validation->run() === TRUE)
        {
            
$nombre $this->input->post('nombre');
            
$direccion $this->input->post('direccion');
            
$cp $this->input->post('cp');
            
$email $this->input->post('email');
            
$contrasenya $this->input->post('contrasenya');
            
$this->load->view('usuarios/formsuccess');
        }
        else
        {
            
$this->load->view('usuarios/addform');
        }


         
$usuario = array (

            
'nombre'=>$this->input->post('nombre'),
            
'direccion'=>$this->input->post('direccion'),
            
'cp'=>$this->input->post('cp'),
            
'email'=>$this->input->post('email'),
            
'contrasenya'=>$this->input->post('contrasenya')

        );
          
          
            if(
$this->form_validation->run() === TRUE){
            
$this->Usuario_model->create($usuario);
        }

    } 

Y este el modelo:

Código PHP:
public function create($usuario)
    
    {
        
        
// Produce: INSERT INTO usuarios VALUES ('{$usuario}')

         
$this->db->set($usuario);
         
$this->db->insert('usuarios');
    } 

Por lo que he leído (espero no meter mucha gamba en esto, un PERDÓN por delante si es así), se recogen los datos en un array asociativo y se pasan, pero no sé porqué no se insertan.

Muchas gracias por delante.
  #2 (permalink)  
Antiguo 26/01/2011, 08:01
Avatar de CodeIgniter  
Fecha de Ingreso: enero-2011
Ubicación: $this->load->view('Rafaela', 'Argentina')
Mensajes: 44
Antigüedad: 13 años, 2 meses
Puntos: 14
Respuesta: Principiante en Code

Hola Xirant,

En tu modelo, lo correcto sería:
$this->db->insert('usuarios',$usuarios);

Fijate que el primer parámetro del método "insert" es el nombre de tu tabla y el segundo es el nombre del array donde traes los datos provenientes del controlador, en tu caso el array $usuarios.

Si esto no te funciona puede ser por varios motivos,
+ que la estructura de la tabla tenga campos requeridos y no lo estés insertando
+ que un campo esté definido como integer y estés tratando de ingresar un string
+ que el nombre de las llaves de tu array asociativo no coincida con el nombre de los campos de tu tabla
etc

Por favor, comentame si con el cambio en el modelo pudiste resolver el problema.
Saludos.-
  #3 (permalink)  
Antiguo 26/01/2011, 09:37
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Principiante en Code

Hola!, gracias por la ayuda.

He probado con el cambio en el modelo y no ha ido :S

Estoy revisando y sigo sin verlo, no consigo que entren los datos en la db. Tengo puesto en el navegador (Firefox) tengo el Firebug y me salta al colocarme en el input del nombre un error ==> " _comprobar_email_repetido is not defined"

El form está montado así =

Código PHP:
<?php echo form_open('usuarios/addform')?>


    <h5>Nombre</h5>
    <input type="text" name="nombre" id="nombre" value="<?php echo set_value('nombre')?>" size="50" />
    <span id="error_email"></span>
    <?php echo form_error('nombre')?>

    <h5>Direcci&oacute;n</h5>
    <input type="text" name="direccion" id="direccion" value="<?php echo set_value('direccion')?>" size="50" />
    <span id="error_email"></span>
    <?php echo form_error('direccion')?>

    <h5>C&oacute;digo Postal</h5>
    <input type="text" name="cp" id="cp" value="<?php echo set_value('cp')?>" size="50" />
    <span id="error_email"></span>
    <?php echo form_error('cp')?>


    <h5>E-mail</h5>
    <input type="text" name="email" id="email" value="<?php echo set_value('email')?>" size="50" />
    <span id="error_email"></span>
    <?php echo form_error('email')?>
 
    <h5>Contrase&ntilde;a</h5>
    <input type="password" name="contrasenya" value="<?php echo set_value('contrasenya')?>" size="50" />
    <?php echo form_error('contrasenya')?>

    <h5>Confime contrase&ntilde;a</h5>
    <input type="password" name="recontrasenya" value="<?php echo set_value('recontrasenya')?>" size="50" />
    <?php echo form_error('recontrasenya')?>

    <input type="submit" name="submit" value="Registrar"  />

<?php echo form_close()?>
  #4 (permalink)  
Antiguo 26/01/2011, 09:39
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Principiante en Code

El error era por una cosilla de Ajax que se me ha colado. Aún y todo, sigue sin grabarse los datos, nif!
  #5 (permalink)  
Antiguo 26/01/2011, 12:32
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 4 meses
Puntos: 890
Respuesta: Principiante en Code

Pero te das cuenta que hace dos comparaciones en caso de verdadero, termina el script y te muestra el formsuccess... Obviamente nunca lleva a la segunda validacion para guardar los datos.

Código PHP:
Ver original
  1. if ($this->form_validation->run() === TRUE)
  2.         {
  3.                      
  4.             $usuario = array (
  5.  
  6.             'nombre'=>$this->input->post('nombre'),
  7.             'direccion'=>$this->input->post('direccion'),
  8.             'cp'=>$this->input->post('cp'),
  9.             'email'=>$this->input->post('email'),
  10.             'contrasenya'=>$this->input->post('contrasenya')
  11.  
  12.         );
  13.                    
  14.            $this->Usuario_model->create($usuario);
  15.            $this->load->view('usuarios/formsuccess');
  16.         }
  17.  
  18. else{
  19.  
  20. //muestras el formulario....
  21. $this->load->view('usuarios/addform');
  22.  
  23. }
  24.  
  25. // y en el modelo
  26. $this->db->insert('nombre_de_la_tabla',$usuario);

Obviamente no esta probado, y no se que hay mas alla de esto. Asi que solo queda probar y contar que pasó. Por cierto donde estas llamando al modelo(recuerda que no hace autoloading, debes llamarlo explicitamente desde el controller o el autoload.php)

Algo más, olvidate de las "entidades" en tu HTML , estamos en el siglo XXI el estandar UTF-8 ya esta aqui :D usa las eñes y las tildes como corresponden.

Saludos
__________________
Drupal Argentina

Última edición por NUCKLEAR; 26/01/2011 a las 12:45
  #6 (permalink)  
Antiguo 26/01/2011, 14:27
Avatar de Xirant  
Fecha de Ingreso: noviembre-2010
Mensajes: 21
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Principiante en Code

Muchas MUCHÍSIMAS GRACIAS, efectivamente era eso, tenía primero que directamente mirara si estaba todo correcto, con lo que al final nunca cargaba el insertar los datos. Arreglado (con un error de base de datos, pero también solventado), funciona genial!

Jejeje... í, lo de las 'entidades' ya sé que es arcaico, pero nos obligan a añadirlas de esa manera en el proyecto, es lo que toca!!!

Muchas gracias de nuevo (seguiré dando guerra, espero que la siguiente no sea una tontería de este tipo, la verdad...)

Etiquetas: code, principiante
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:19.