Select2

Insertar select múltiple a MySQL

Al trabajar con etiquetas SELECT suele llegar al punto de como Insertar select múltiple a MySQL, en este articulo detallaremos varias opciones: implode() o FOREACH,

Insertar select múltiple a MySQL
Insertar select múltiple a MySQL

Cómo hacer un INSERT INTO de un select múltiple

A continuación, veremos las diferentes opciones que podemos realizar

Crear formulario HTML

Lo primero será crear un formulario HTML y declarar los atributos correctos, por ejemplo, agregar corchetes al atributo NAME de nuestra etiqueta select
Veamos un ejemplo

Publicaciones relacionadas
<form method="POST" action="">
                    <div class="form-group row">
                        <div class="col-md-12">
                            <label for="exampleFormControlInput1">Seleccione animales</label>
                            <select class="form-control basico" multiple="multiple" name="animales[]"
                                style="width: 100%">
                                <option value="Perro">Perro</option>
                                <option value="Gato">Gato</option>
                                <option value="Loro">Loro</option>
                            </select>
                        </div>
                    </div>
                    <button class="btn btn-primary" name="enviar">Procesar</button>
                </form>

Procesar el SELECT múltiple con PHP

Si deseamos insertar valores a una base de datos tenemos que usar un lenguaje de programación como PHP que nos brinda las funciones necesarias para lograr nuestro objetivo.

Un detalle importante es la conexión con mysql

Existen varias formas para guardar un valor o un conjunto de valores en un campo de una tabla de la base de datos. Por lo tanto, tienes que decidir primero qué opción usar.

Nota:
Hay que tener en cuenta que la decisión tomada dependerá no sólo cómo tienes que insertar los datos, sino también cómo recuperarlos luego en modo de edición.

Insertar Datos en múltiples registros

Para almacenar en varios registros la cantidad de elementos seleccionados de una etiqueta select múltiple debemos de apoyarnos en el bucle foreach.

guardar select multiple en varios registroos

Veamos el código completo y tendrá de nombre insertar_foreach_multiple_seect.php

<!DOCTYPE html>
<html>


<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
    <!-- Declaramos libreria Select2 -->
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
</head>


<body>
    <div class="container-fluid mt-3">
        <div class="card">
            <h5 class="card-header">Insertar valores de select mutiple a MySQL</h5>
            <div class="card-body">


                <form method="POST" action="">
                    <div class="form-group row">
                        <div class="col-md-12">
                            <label for="exampleFormControlInput1">Seleccione animales</label>
                            <select class="form-control basico" multiple="multiple" name="animales[]"
                                style="width: 100%">
                                <option value="Perro">Perro</option>
                                <option value="Gato">Gato</option>
                                <option value="Loro">Loro</option>
                            </select>
                        </div>
                    </div>
                    <button class="btn btn-primary" name="enviar">Procesar</button>
                </form>
            </div>


            <div class="card-footer">
                <p class="card-title">Resultados</p>
                <p class="text-muted">
                    <?php
                $usuario = "root";
                $password = "root";
                //Conexion MySQL PDO
                $bd = new PDO('mysql:host=localhost;dbname=db_ejemplos', $usuario, $password);
                if(!empty($_POST["animales"])) {
                    foreach($_POST['animales'] as $key) {
                            //Save MySQL
                            $query = $bd->prepare("INSERT INTO `tbl_mascotas`(`mascotas`)
                            VALUES (:mascotas)");
                            $query->bindParam(":mascotas", $key);
                            $query->execute();
                            if ($query->rowCount() > 0){
                                echo "Se guardo con exito<br>";
                                }else{
                               echo "Hubo un error<br>";
                            }
                            //End: Save MySQL
                    }  
                }
                ?>
                </p>
            </div>


        </div>
    </div>
    <script>
    $(document).ready(function() {
        $('.basico').select2();
    });
    </script>
</body>


</html>

Guardar a MySQL valores de select múltiple en un registro

Para lograr este objetivo debemos de usar la función IMPLODE() de PHP para que concatene con comas los múltiples valores del select

Guardar select multiple en un solo registro

<!DOCTYPE html>
<html>


<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
    <!-- Declaramos libreria Select2 -->
    <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
</head>


<body>
    <div class="container-fluid mt-3">
        <div class="card">
            <h5 class="card-header">Insertar en un solo registro valores de select mutiple</h5>
            <div class="card-body">


                <form method="POST" action="">
                    <div class="form-group row">
                        <div class="col-md-12">
                            <label for="exampleFormControlInput1">Seleccione animales</label>
                            <select class="form-control basico" multiple="multiple" name="animales[]"
                                style="width: 100%">
                                <option value="Perro">Perro</option>
                                <option value="Gato">Gato</option>
                                <option value="Loro">Loro</option>
                            </select>
                        </div>
                    </div>
                    <button class="btn btn-primary" name="enviar">Procesar</button>
                </form>
            </div>


            <div class="card-footer">
                <p class="card-title">Resultados</p>
                <p class="text-muted">
                    <?php
                $usuario = "root";
                $password = "root";
                //Conexion MySQL PDO
                $bd = new PDO('mysql:host=localhost;dbname=db_ejemplos', $usuario, $password);
                if(!empty($_POST["animales"])) {
                            //Save MySQL
                            $mis_mascotas = implode(', ', $_POST["animales"]);
                            $query = $bd->prepare("INSERT INTO `tbl_mascotas`(`mascotas`)
                            VALUES (:mascotas)");
                            $query->bindParam(":mascotas", $mis_mascotas);
                            $query->execute();
                            if ($query->rowCount() > 0){
                                echo "Se guardo con exito<br>";
                                }else{
                               echo "Hubo un error";
                            }
                            //End: Save MySQL
                   
                }
                ?>
                </p>
            </div>


        </div>
    </div>
    <script>
    $(document).ready(function() {
        $('.basico').select2();
    });
    </script>
</body>


</html>

Otras Opciones para insertar a MySQL

Estas opciones serán claves para ver que tipo o forma de almacenamiento deseamos.

Separar con Implode()

Una opción sencilla es meter los valores separados por coma usando la función impode():

$mascotas = implode(',', $_POST['animales']);

Serializar con función serialize()

Otra es serializar el conjunto o valores seleccionados del select múltiple

$mascotas = serialize($_POST['animales']);

Agrupar con json_encode()

Otra opción y también muy utilizada es a de concatenar usando la funcion json_encode()

$mascota = json_encode($_POST['animales']);

Para finalizar

Existe una opción para cada necesidad y es menester de cada uno elegir las opciones más adecuada según sea el caso. Sin embargo, en general interesa valores separados por coma para conjuntos de valores muy simples, y fáciles de recuperar.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

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

Botón volver arriba