Article

Insert en codeigniter

1x1.trans

Buenas como siempre a otro tutorial de codeIgniter, en esta ocasión pretendemos explicar como hacer una inserción de datos de forma completa pero que se entienda perfectamente, como siempre debemos trabajar desde el MVC(modelo-vista-controlador) que es como este fantástico framework trabaja correctamente, vamos al lío.

Necesitaremos crear varias cosas pero lo haremos de una forma simple para no alargarlo demasiado, el proyecto, nuestro htaccess para quitar el index.php, la base de datos para hacer las inserciones, el modelo, la vista y el controlador y las configuraciones en los archivos de la aplicación para que todo funcione, está vez lo haremos de forma más estricta utilizando todo lo que codeIgniter nos proporciona, que no es poco.

Insert en codeigniter


Nos vamos a la web de codeIgniter y nos descargamos la versión que hay disponible, la guardamos y la extraemos en nuestro directorio raíz, en mi caso C:\xampp\htdocs, una vez tengamos ya la carpeta con los archivos debemos cambiarle el nombre, le podemos poner insert_ci, sugiero que coloquen el mismo así será más sencillo seguir el tutorial.

Creamos la base de datos


Crearemos una base de datos que vamos a llamar comentarios.



Y como siempre creamos una tabla para insertar datos en este caso



El archivo .htaccess


El .htaccess, lo debemos colocar en el directorio raíz de nuestro proyecto para poder quitar el index.php de la url.



El archivo database.php


Ahora debemos dirigirnos a nuestro archivo database.php que está en la carpeta config y modificar el código para que quede así, siempre dependiendo de nuestros datos de acceso a la base de datos.



El archivo autoload.php


Ahora nos dirigimos al archivo autoload.php que está dentro de la carpeta config y en la línea 55 debemos modificar el código por éste.



De esta forma cargamos automáticamente la base de datos y la validación de formularios que nos propone codeIgniter, y en la línea 67 modificamos por este otro.



Con el helper url tendremos disponible las urls amigables y así podremos crear nuestra ruta, y el helper date es para poder trabajar con fechas en codeIgniter, que cosas como la función now() de php aquí no sirven. Y por último también cargamos el helper form para que veamos la forma en la que trabaja los formularios codeIgniter, con arrays.

El archivo config.php


Ahora vamos a nuestra carpeta config y abrimos el archivo config.php, en la línea 17 colocaremos este código.



Con esta línea podemos utilizar la función base_url() que nos proporciona codeIgniter, así cada vez que escribamos base_url() es como si escribimos http://localhost/insert_ci/, esto es muy bueno para poder trabajar con rutas absolutas y no tener problemas con nuestros archivos, hay que tenerlo muy en cuenta siempre por el tema de cambio de servidor o lo que sea, es importante.

Creamos la vista de nuestros comentarios


Este archivo lo pondremos dentro de la carpeta views de nuestro proyecto y le llamaremos comentarios_view.php, dentro de él introduciremos el siguiente código.



Que conste que no utilizo tablas para maquetar porque no me gusta, pero para no perdernos con diseños creo que es la mejor opción, suelo utilizar el framework css 960 grid system que es genial para los que no somos expertos en diseño, pasemos a crear el modelo y el controlador del proyecto.

Nuestro controlador(el puente del proyecto)


Ahora debemos crear en nuestra carpeta controllers un archivo llamado comentarios.php y dentro de él colocar el siguiente código.



Ahora debemos pasar a crear el modelo para que pueda procesar los datos contra la base de datos que llamaremos comentarios_model.php y lo guardaremos en la carpeta models, veamos.

El modelo




Y con todo lo anterior, aunque sencillo, hemos visto como trabaja codeIgniter los formularios, cosa bien distinta de hacerlo desde php que a mi parecer es más sencillo, espero que os haya gustado y os sea útil, disculpas por la tardanza en poder crear scripts pero apenas tengo tiempo y lo hago en los ratos que puedo, saludos a todos y hasta la próxima, a ver que hacemos.

31 Comments

  • This is my first time i visit here. I found so many entertaining stuff in your blog, especially its discussion. From the tons of comments on your articles,I guess I am not the only one having all the leisure here! Keep up the good work.

    • Thanks for your support!

  • Hey I am so happy I found your blog page, I really found you by mistake, while I was searching on Yahoo for something else, Anyways I am here now and would just like to say thank you for a incredible post and a all round enjoyable blog (I also love the theme/design), I don’t have time to look over it all at the moment but I have bookmarked it and also added in your RSS feeds, so when I have time I will be back to read more, Please do keep up the superb work.
    [url=http://monclershoes.webnode.fr/]moncler shoes[/url]
    moncler shoes

    • Your comments will help me to follow, thank you very much.

  • mira disculpa el problema es en este post, que despues que inserta la pagina se queda en blanco, y entonces yo quise volver al formulario de insercion con los ejemplos de sesiones flashdata.

  • Hola, para hacer eso simplemente debes seguir los siguientes pasos:

    1. En el modelo cambia

    por

    Hay que hacer un return para saber en el controlador si todo salió bien.

    2.En el controlador después de:

    añade

    De esta forma sabemos si salió bien el insert. Para hacer uso de sesiones debemos activar la librería session de codeigniter, o bien desde el autoload o en el método constructor de nuestro controlador con la siguiente línea.

    De la misma forma debemos asignar una clave de encriptación en el archivo config.php a las sesiones, más o menos en la línea 227 algo así:

    Y finalmente en la vista podemos comprobar si existe la sesión flashdata que hemos enviado con algo así:

    Espero que te sea de ayuda.

  • Hola amigos exelente explicacion en cuanto al insert, bueno en el aspecto de enviar todos mis parametros desde un formulario logro hacer un insert, mi problema es: no lograr hacer un insert cuando necesito enviar datos de mi formulario y datos consultados desde mi base de datos.

    en mi controller tengo:
    /////////////////////////////////////////////////////////////////////////////
    //guardo en $periodo el resultado retornato en mi model
    $periodo=$this->inscripcion_model->get_periodo_actual();

    //$x y $y son los que traigo de mi formulario (mi vista) y $periodo es del llamado a la consulta anterior
    $insercion=$this->inscripcion_model->get_inscribir_alumno($x,$y,$periodo);

    ///////////////////////////////////////////////////////////////////////////////////////////
    model:
    public function get_inscribir_alumno($x, $y, $periodo)
    {
    $data = array(‘x’ =>$x ,’y’=>$y, ‘periodo_grupo’=>$periodo, );
    $this->db->insert(‘registrar’,$data);
    }
    ////////////////////////////////////////////////////////

    como veran no me permitira por la compatibilidad del tipo de datos agregar $periodo mi duda es como lograr hacer mi insert, alguna recomendacion o sugerencia se les agradece.

    • Hola Marco Antonio, la verdad que es lo mismo insertar desde un formulario que haciendo la consulta a una tabla, recoger e insertar, no hay ningún problema al respecto, lo único que veo es que tienes una coma que sobra, de momento lo puedes mirar, y si no te he entendido bien comenta de nuevo a ver si lo podemos solucionar.

      En cuánto a lo de incompatibilidad no te entiendo, la consulta que haces supongo que obtiene algún tipo de dato, de ser así, lo puedes insertar de nuevo sin ningún tipo de problema.

  • Muy buen tutorial, espero que sigas colgando estos artículos tan actuales y útiles.

    Un saludo y te animo a seguir con esto por el bien de todos master.

    PD: No me ha pagado para que suelte esto y no soy israel965…………..

    Emilio.

    • Muchas gracias Emilio, me alegra que te sea de ayuda, para eso hago esta labor, un saludo (:

  • hola buenas de nuevo, despues de un break ijij gracias por la respuesta amigo, si el problema he logrado solucionarlo, dejo la solución a mi problema por si algún principiante más como yo le llega a suceder
    public function nombre_funcion ()
    {
    $consulta = $this->db->query(“select id_p p from periodo where id_status=’2′”);
    $row=$consulta->row_array();
    return $row[‘p’];
    }
    la cosa era de agregarle un alias a mi dato a seleccionar para poder despues tomar ese dato y poder retornarlo.
    gracias y saludos mi estimado

    • Me alegro, pero no es necesario asignarle un alias, puedes acceder hacer el retorno de $row[“id_p”] y te debe funcionar sin problemas.

  • hoo gracias perfecto lo checare, una duda has trabajado con postgres y haciendo usos de procedimientos almacenados??

    tengo esto en mi model:

    public function get_inscribir($nControl)
    {
    $consulta = $this->db->query(“CALL inscribir ($nControl)”);
    }

    mi configuracion de bd:

    $db[‘default’][‘hostname’] = ‘localhost’;
    $db[‘default’][‘username’] = ‘marco’;
    $db[‘default’][‘password’] = ‘password’;
    $db[‘default’][‘database’] = ‘database’;
    $db[‘default’][‘dbdriver’] = ‘postgre’;
    $db[‘default’][‘dbprefix’] = ”;
    $db[‘default’][‘pconnect’] = TRUE;
    $db[‘default’][‘db_debug’] = TRUE;
    $db[‘default’][‘cache_on’] = FALSE;
    $db[‘default’][‘cachedir’] = ”;
    $db[‘default’][‘char_set’] = ‘utf8′;
    $db[‘default’][‘dbcollat’] = ‘utf8_general_ci’;
    $db[‘default’][‘swap_pre’] = ”;
    $db[‘default’][‘autoinit’] = TRUE;
    $db[‘default’][‘stricton’] = FALSE;
    $db[‘default’][‘port’] = 5433;

    en lo que he leido que en mysql el driver deveria de ser mysqli

    y en postgres?? tienes alguna respuesta??

  • Mira como se llaman a los procedimientos almacenados en postgresql, no es de la misma forma que en mysqli, échale un ojo.
    Call lo utilizas para llamar procedures en mysqli no en postgresql.
    http://php.net/manual/en/ref.pgsql.php
    A ver si encuentras lo que necesitas.

  • ok gracias revisare el link amigo saludos

  • Buen dia israel:

     

    Tengo una duda muy grande:

     

    En caso de que mis input sean de tipo array es decir:

     

    /*Vista*/

    <input type=”text” name=”nombre[]” value=””>

    En el controlador como le haria en esta linea

    $nueva_insercion = $this->comentarios_model->nuevo_comentario($nombre,$email,$asunto,$mensaje,$fecha,$hora);

    para que se envien los datos a la bd

     

    Agradeciendo tu asesoria te envio un cordial saludo desde México

    • Hola Angel,

      No lo he probado, pero no hay otra, opciones 3, puedes serializar tus campos y recuperarlos con unserialize.

      Pueder hacer un json_encode y después un json_decode.

      O si necesitas uno por fila puedes hacer el insert con un array haciendo uso de la función insert_batch de codeigniter.

      No he probado nada, así que puede haber algún error pero creo que puede funcionar bien, saludos.

  • Hola israel, necesito me ayudes con una cuestion,

    lei tu tuto, bastante interesantey util, y modifiqué varias cosas para mi necesidad, tengo una base de datos para gestionar contratos,

    por un lado tengo nomencladores llenos con las datos de las diferentes tablas que se relacionan a la tabla contratos esto lo hice a traves de grocery crud. a la hora de insertar en la view de los contratos solo tengo que seleccionar de mis combobox, ahi fue donde utilize tu tuto para gestionar el formulario pero a traves de los dropdowns no necesite cajas de texto, al final lo que necesito guardar de mis selects son los id. para luego despues cuando realize el modificar o leer hacerlo por el id. Si pudieras ayudarme estaria agradecido, sino remitirme a alguna pagina donde se explique como almacenar estos dropdowns por id a traves del generador de formularios del codeignter. Ahh otra cosa el insertar no me da error me formatea los datos de la pagina. lo debuggee con la consola y no me muestra nada.

    Gracias y suerte master.

  • Hola Israel, me parecen excelentes tus tutoriales….me han ayudado mucho en mi estudio!!!

    Tengo una consulta para ti sobre este articulo…yo incluí un campo entero y como llave primaria para el número de documento, e hice correctamente las operaciones CRUD…sin embargo, no sé cómo validar antes de la inserción o durante la inserción….que el número de documento ya exista y maneje el error como una excepción que me retorne al formulario…

    En otras palabras, cuando intento repetir el numero de documento, me aparece un mensaje de error de duplicidad, el cual quiero manejar correctamente para que no me quede en un error de:

    A Database Error Occurred

    Error Number: 1062

    Duplicate entry ‘123456789’ for key ‘PRIMARY’

    Y por el contrario me informe el error, pero que me retorne al formulario para cambiar al numero de documento del usuario.

    Quedo pendiente…..saludos!…. Emilio

    • Hola Emilio,

      ¿Porqué no es autoincremental tu primary key?, de esa forma evitarás duplicidades y problemas de este tipo, de todas formas te dejo este tutorial donde tratamos este tema, saludos.

      • Perfecto!!!!!!!! funcionó inmediatamente….

        $this->form_validation->set_rules(‘id’, ‘CC’, ‘required|is_unique[usuario.id]’);

        pero ahora no encuentro en qué parte edito el mensaje por defecto: The CC field must contain a unique value. ….. para dejarlo en Español…. :(

        • Debes utilizar set_message de form validation.

          • Ups!….error de novato!!!….

            me funcionó correctamente… excelente apoyo me has brindado!!!!!!!!

            Gracias

            Emilio.

  • Israel, aprovecho para pedirte el favor y que expliques cómo haces para que en tu blog aparezca el código en la forma en que lo publicas como si estuviera en el editor de php,

    Disculpa mi pregunta…pero no hay preguntas tontas, sino tontos que no preguntan….jejeje

    Emilio

    • Sólo tienes que utilizar los brackets , abres, [, escribes el lenguaje, por ejemplo, php, html, css, js y cierras bracket ], eso para abrir, y para cerrar lo mismo, pero el que abre debe llevar la contrabarra, [/.

      Saludos.

  • hola en el archivo database colocas insert_li t tengo entendido que asi se llama el proyecto, pero tu base de datos no se llamaba comentarios al principio?

    • Tienes razón, ya está modificado, gracias.

  • me puede ayudar por favor con ese error Fatal error
    : Call to undefined function base_url() in C:\xampp\htdocs\insert_ci\application\views\comentarios_view.php on line 23

    • Hola,

      Debes activar el helper url en el config/autoload.php.

  • Hola! una pregunta.

    Es posible hacer un insert a varias tablas?

    ejemplo

    insertar nombre en una tabla usuario y a la vez en una tabla cliente por ejemplo

    gracias

    • Hola,

      Si claro, pero debes hacerla una por una, en lugar de insertar el nombre es mejor insertar la id del usuario insertado.

      Saludos.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


× 4 = treinta dos

Cursos
Cursos del blog
Accede desde tu dispositivo
Acceso premium