Guardar multiples registros con PHP

En esta entrada vamos a crear varios alumnos desde un solo formulario usando la tecnología PHP.

Rodríguez Patiño, Eduardo
2020-09-20 | 11,409 lecturas

Muy bien muchachos, en la oficina me ha pasado que me han pedido que se pueda crear varios registros desde un solo formulario para poder agilizar la subida de información, ya que hacerlo de uno en uno tomaría más tiempo. Ejem: nuestro usuario requiere registrar a todo los empleados de la empresa ..

Entonces en este ejemplo vamos a crear 3 alumnos desde un mismo formulario usando nuestro amigo PHP. Vamos a maquetar nuestro formulario usando Bootstrap y vamos hacer un bucle for para hacer que nuestro formulario se repita 3 veces el cual estará dentro de las etiquetas form.

<form action="?c=Alumno&a=CrearMultiple" method="post" enctype="multipart/form-data">

    <div class="row">
        <?php $x = 1; for($x; $x <= 3; $x++): ?>
        <div class="col-xs-4">
            <div class="well well-sm">
                <div class="form-group">
                    <label>Nombre</label>
                    <input type="text" name="Nombre[]" class="form-control" placeholder="Ingrese su nombre" data-validacion-tipo="requerido|min:3" />
                </div>

                <div class="form-group">
                    <label>Apellido</label>
                    <input type="text" name="Apellido[]" class="form-control" placeholder="Ingrese su apellido" data-validacion-tipo="requerido|min:10" />
                </div>

                <div class="form-group">
                    <label>Correo</label>
                    <input type="text" name="Correo[]" class="form-control" placeholder="Ingrese su correo electrónico" data-validacion-tipo="requerido|email" />
                </div>

                <div class="form-group">
                    <label>Sexo</label>
                    <select name="Sexo[]" class="form-control">
                        <option value="1">Masculino</option>
                        <option value="2">Femenino</option>
                    </select>
                </div>

                <div class="form-group">
                    <label>Fecha de nacimiento</label>
                    <input readonly type="text" name="FechaNacimiento[]" class="form-control datepicker" placeholder="Ingrese su fecha de nacimiento" data-validacion-tipo="requerido" />
                </div>

                <div class="row">
                    <div class="col-xs-6">
                        <div class="form-group">
                            <label>Foto</label>
                            <input type="file" name="Foto[]" placeholder="Ingrese una imagen" />
                        </div>     
                    </div>
                </div>  
            </div>
        </div>
        <?php endfor; ?>
    </div>

    <hr />

    <div class="text-right">
        <button class="btn btn-success btn-lg btn-block">Guardar</button>
    </div>
</form>

Ahora a cada nombre de los controles html: input, select, file, checkbox, etc .. debemos decirle que son un Array, por lo tanto los nombres le agregamos corchetes o brackets.

<select name="Sexo[]" class="form-control">

De esta manera cuando presionemos el boton del submit, enviará toda la información contenida en un Array, y en nuestro controlador realizará la lógica para guardar los registros.

Los parámetros enviados son pasados de la siguiente manera:

array(size=5)
  'Nombre' => 
    array(size=3)
      0 => string 'Eduardo' (length=7)
      1 => string 'Alberto' (length=7)
      2 => string 'Alberto' (length=7)
  'Apellido' => 
    array(size=3)
      0 => string 'Rodriguez Díaz' (length=15)
      1 => string 'Rodriguez Patiño' (length=17)
      2 => string 'Ibanez Fender' (length=13)
  'Correo' => 
    array(size=3)
      0 => string 'asd@asd.net' (length=11)
      1 => string 'abasd@asd.net' (length=13)
      2 => string 'asd@asd.net' (length=11)
  'Sexo' => 
    array(size=3)
      0 => string '1' (length=1)
      1 => string '1' (length=1)
      2 => string '1' (length=1)
  'FechaNacimiento' => 
    array(size=3)
      0 => string '2015-04-01' (length=10)
      1 => string '2015-04-02' (length=10)
      2 => string '2015-04-16' (length=10)

Nuestro controlador Alumno hace lo siguiente, exactamente su acción CrearMultiple:

Lo que hacemos es un for indicandole que de 3 vueltas, en nuestro caso hacemos un COUNT para calcular cuantas vueltas debe dar.

Luego instanciamos nuestra clase Alumno y comenzamos a llenar los valores.

Para que entiendas, el índice ['Nombre'] contiene un array de 3 valores ya que hace referencia a los 3 nombres ingresados en nuestros 3 formularios, entonces en cada vuelta la variable $i de nuestro FOR guardará ese valor en la propiedad Nombre de la clase Alumno.

Luego hacemos el INSERT llamando a nuestro modelo Alumno

Y al final de todo hacemos un redirect a la vista principal de la web.