Bootstrap Select con buscador en vivo PHP MySQL

Bootstrap Select con buscador en vivo PHP MySQL. En esta publicación daremos solución a la problemática de los select aplicando librerías externas por ejemplo el BOOTSTRAP. Por lo tanto, en algunos casos esto podría causar malestar en el visitante de nuestra web y/o en un sistema web.
Seamos sinceros. Cuando nos registramos en alguna página de cualquier tipo de servicios que hay en internet, nos topamos con un campo de seleccionar país. Sin embargo, comentarles que hay más de 193 países aproximadamente y si nos ponemos a buscar dentro de un select podría ser no tan eficaz.
Para dar solución a esta problemática. En este artículo mostraremos como solucionar este inconveniente de manera dinámica y rápida.
Bootstrap Select con buscador en vivo PHP MySQL
En la siguiente imagen veremos la etiqueta <select>
sin usar la librería

La solución seria aplicando un pequeño buscador dentro de nuestro lista desplegable (Select) que nos ofrece la librería BootStrap.
Bootstrap Select es una clase que funciona en nuestra lista desplegable. Sin embargo, también nos apoyaremos con JQuery para agregar funcionalidades adicionales como el buscador a la etiqueta <select>
, que tanto nos preocupa.
La implementación es bastante fácil y no representa consumo de CPU para nuestro servidor.
Estructura de la aplicación
Librerías externas que usaremos
<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'> <link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.11.2/css/bootstrap-select.min.css'> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.6.3/js/bootstrap-select.min.js"></script>
Fichero php_paises.sql
Este archivo se encuentra la tabla y los países en el cual almacena la información que mostraremos en la lista desplegable.
CREATE TABLE IF NOT EXISTS `lista_paises` ( `id_pais` int(11) NOT NULL, `iso` varchar(2) DEFAULT NULL, `nombre_pais` varchar(120) DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=241 DEFAULT CHARSET=utf8; INSERT INTO `lista_paises` (`id_pais`, `iso`, `nombre_pais`) VALUES (1, 'AF', 'Afganistán'), (2, 'AX', 'Islas Gland'), (3, 'AL', 'Albania'), (4, 'DE', 'Alemania'), (5, 'AD', 'Andorra'), (6, 'AO', 'Angola'), (7, 'AI', 'Anguilla'), (8, 'AQ', 'Antártida'), (9, 'AG', 'Antigua y Barbuda'), (10, 'AN', 'Antillas Holandesas'), (11, 'SA', 'Arabia Saudí'), (12, 'DZ', 'Argelia'), (13, 'AR', 'Argentina'), (14, 'AM', 'Armenia'), (15, 'AW', 'Aruba'), (16, 'AU', 'Australia'), (17, 'AT', 'Austria'), (18, 'AZ', 'Azerbaiyán'), (19, 'BS', 'Bahamas'), (20, 'BH', 'Bahréin'), (21, 'BD', 'Bangladesh'), (22, 'BB', 'Barbados'), (23, 'BY', 'Bielorrusia'), (24, 'BE', 'Bélgica'), (25, 'BZ', 'Belice'), (26, 'BJ', 'Benin'), (27, 'BM', 'Bermudas'), (28, 'BT', 'Bhután'), (29, 'BO', 'Bolivia'), (30, 'BA', 'Bosnia y Herzegovina'), (31, 'BW', 'Botsuana'), (32, 'BV', 'Isla Bouvet'), (33, 'BR', 'Brasil'), (34, 'BN', 'Brunéi'), (35, 'BG', 'Bulgaria'), (36, 'BF', 'Burkina Faso'), (37, 'BI', 'Burundi'), (38, 'CV', 'Cabo Verde'), (39, 'KY', 'Islas Caimán'), (40, 'KH', 'Camboya'), (41, 'CM', 'Camerún'), (42, 'CA', 'Canadá'), (43, 'CF', 'República Centroafricana'), (44, 'TD', 'Chad'), (45, 'CZ', 'República Checa'), (46, 'CL', 'Chile'), (47, 'CN', 'China'), (48, 'CY', 'Chipre'), (49, 'CX', 'Isla de Navidad'), (50, 'VA', 'Ciudad del Vaticano'), (51, 'CC', 'Islas Cocos'), (52, 'CO', 'Colombia'), (53, 'KM', 'Comoras'), (54, 'CD', 'República Democrática del Congo'), (55, 'CG', 'Congo'), (56, 'CK', 'Islas Cook'), (57, 'KP', 'Corea del Norte'), (58, 'KR', 'Corea del Sur'), (59, 'CI', 'Costa de Marfil'), (60, 'CR', 'Costa Rica'), (61, 'HR', 'Croacia'), (62, 'CU', 'Cuba'), (63, 'DK', 'Dinamarca'), (64, 'DM', 'Dominica'), (65, 'DO', 'República Dominicana'), (66, 'EC', 'Ecuador'), (67, 'EG', 'Egipto'), (68, 'SV', 'El Salvador'), (69, 'AE', 'Emiratos Árabes Unidos'), (70, 'ER', 'Eritrea'), (71, 'SK', 'Eslovaquia'), (72, 'SI', 'Eslovenia'), (73, 'ES', 'España'), (74, 'UM', 'Islas ultramarinas de Estados Unidos'), (75, 'US', 'Estados Unidos'), (76, 'EE', 'Estonia'), (77, 'ET', 'Etiopía'), (78, 'FO', 'Islas Feroe'), (79, 'PH', 'Filipinas'), (80, 'FI', 'Finlandia'), (81, 'FJ', 'Fiyi'), (82, 'FR', 'Francia'), (83, 'GA', 'Gabón'), (84, 'GM', 'Gambia'), (85, 'GE', 'Georgia'), (86, 'GS', 'Islas Georgias del Sur y Sandwich del Sur'), (87, 'GH', 'Ghana'), (88, 'GI', 'Gibraltar'), (89, 'GD', 'Granada'), (90, 'GR', 'Grecia'), (91, 'GL', 'Groenlandia'), (92, 'GP', 'Guadalupe'), (93, 'GU', 'Guam'), (94, 'GT', 'Guatemala'), (95, 'GF', 'Guayana Francesa'), (96, 'GN', 'Guinea'), (97, 'GQ', 'Guinea Ecuatorial'), (98, 'GW', 'Guinea-Bissau'), (99, 'GY', 'Guyana'), (100, 'HT', 'Haití'), (101, 'HM', 'Islas Heard y McDonald'), (102, 'HN', 'Honduras'), (103, 'HK', 'Hong Kong'), (104, 'HU', 'Hungría'), (105, 'IN', 'India'), (106, 'ID', 'Indonesia'), (107, 'IR', 'Irán'), (108, 'IQ', 'Iraq'), (109, 'IE', 'Irlanda'), (110, 'IS', 'Islandia'), (111, 'IL', 'Israel'), (112, 'IT', 'Italia'), (113, 'JM', 'Jamaica'), (114, 'JP', 'Japón'), (115, 'JO', 'Jordania'), (116, 'KZ', 'Kazajstán'), (117, 'KE', 'Kenia'), (118, 'KG', 'Kirguistán'), (119, 'KI', 'Kiribati'), (120, 'KW', 'Kuwait'), (121, 'LA', 'Laos'), (122, 'LS', 'Lesotho'), (123, 'LV', 'Letonia'), (124, 'LB', 'Líbano'), (125, 'LR', 'Liberia'), (126, 'LY', 'Libia'), (127, 'LI', 'Liechtenstein'), (128, 'LT', 'Lituania'), (129, 'LU', 'Luxemburgo'), (130, 'MO', 'Macao'), (131, 'MK', 'ARY Macedonia'), (132, 'MG', 'Madagascar'), (133, 'MY', 'Malasia'), (134, 'MW', 'Malawi'), (135, 'MV', 'Maldivas'), (136, 'ML', 'Malí'), (137, 'MT', 'Malta'), (138, 'FK', 'Islas Malvinas'), (139, 'MP', 'Islas Marianas del Norte'), (140, 'MA', 'Marruecos'), (141, 'MH', 'Islas Marshall'), (142, 'MQ', 'Martinica'), (143, 'MU', 'Mauricio'), (144, 'MR', 'Mauritania'), (145, 'YT', 'Mayotte'), (146, 'MX', 'México'), (147, 'FM', 'Micronesia'), (148, 'MD', 'Moldavia'), (149, 'MC', 'Mónaco'), (150, 'MN', 'Mongolia'), (151, 'MS', 'Montserrat'), (152, 'MZ', 'Mozambique'), (153, 'MM', 'Myanmar'), (154, 'NA', 'Namibia'), (155, 'NR', 'Nauru'), (156, 'NP', 'Nepal'), (157, 'NI', 'Nicaragua'), (158, 'NE', 'Níger'), (159, 'NG', 'Nigeria'), (160, 'NU', 'Niue'), (161, 'NF', 'Isla Norfolk'), (162, 'NO', 'Noruega'), (163, 'NC', 'Nueva Caledonia'), (164, 'NZ', 'Nueva Zelanda'), (165, 'OM', 'Omán'), (166, 'NL', 'Países Bajos'), (167, 'PK', 'Pakistán'), (168, 'PW', 'Palau'), (169, 'PS', 'Palestina'), (170, 'PA', 'Panamá'), (171, 'PG', 'Papúa Nueva Guinea'), (172, 'PY', 'Paraguay'), (173, 'PE', 'Perú'), (174, 'PN', 'Islas Pitcairn'), (175, 'PF', 'Polinesia Francesa'), (176, 'PL', 'Polonia'), (177, 'PT', 'Portugal'), (178, 'PR', 'Puerto Rico'), (179, 'QA', 'Qatar'), (180, 'GB', 'Reino Unido'), (181, 'RE', 'Reunión'), (182, 'RW', 'Ruanda'), (183, 'RO', 'Rumania'), (184, 'RU', 'Rusia'), (185, 'EH', 'Sahara Occidental'), (186, 'SB', 'Islas Salomón'), (187, 'WS', 'Samoa'), (188, 'AS', 'Samoa Americana'), (189, 'KN', 'San Cristóbal y Nevis'), (190, 'SM', 'San Marino'), (191, 'PM', 'San Pedro y Miquelón'), (192, 'VC', 'San Vicente y las Granadinas'), (193, 'SH', 'Santa Helena'), (194, 'LC', 'Santa Lucía'), (195, 'ST', 'Santo Tomé y Príncipe'), (196, 'SN', 'Senegal'), (197, 'CS', 'Serbia y Montenegro'), (198, 'SC', 'Seychelles'), (199, 'SL', 'Sierra Leona'), (200, 'SG', 'Singapur'), (201, 'SY', 'Siria'), (202, 'SO', 'Somalia'), (203, 'LK', 'Sri Lanka'), (204, 'SZ', 'Suazilandia'), (205, 'ZA', 'Sudáfrica'), (206, 'SD', 'Sudán'), (207, 'SE', 'Suecia'), (208, 'CH', 'Suiza'), (209, 'SR', 'Surinam'), (210, 'SJ', 'Svalbard y Jan Mayen'), (211, 'TH', 'Tailandia'), (212, 'TW', 'Taiwán'), (213, 'TZ', 'Tanzania'), (214, 'TJ', 'Tayikistán'), (215, 'IO', 'Territorio Británico del Océano Índico'), (216, 'TF', 'Territorios Australes Franceses'), (217, 'TL', 'Timor Oriental'), (218, 'TG', 'Togo'), (219, 'TK', 'Tokelau'), (220, 'TO', 'Tonga'), (221, 'TT', 'Trinidad y Tobago'), (222, 'TN', 'Túnez'), (223, 'TC', 'Islas Turcas y Caicos'), (224, 'TM', 'Turkmenistán'), (225, 'TR', 'Turquía'), (226, 'TV', 'Tuvalu'), (227, 'UA', 'Ucrania'), (228, 'UG', 'Uganda'), (229, 'UY', 'Uruguay'), (230, 'UZ', 'Uzbekistán'), (231, 'VU', 'Vanuatu'), (232, 'VE', 'Venezuela'), (233, 'VN', 'Vietnam'), (234, 'VG', 'Islas Vírgenes Británicas'), (235, 'VI', 'Islas Vírgenes de los Estados Unidos'), (236, 'WF', 'Wallis y Futuna'), (237, 'YE', 'Yemen'), (238, 'DJ', 'Yibuti'), (239, 'ZM', 'Zambia'), (240, 'ZW', 'Zimbabue'); -- -- Indices de la tabla `lista_paises` -- ALTER TABLE `lista_paises` ADD PRIMARY KEY (`id_pais`); -- -- AUTO_INCREMENT de la tabla `lista_paises` -- ALTER TABLE `lista_paises` MODIFY `id_pais` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=241;
Archivo db.php
Fichero encargado de realizar la conexión con la base de datos de una manera sencilla.
<?php // Conexion a la base de datos para la lista de paises function connect(){ return new mysqli("localhost","root","root","php_paises"); } ?>
Poblando la etiqueta <select>
<select class="selectpicker" data-show-subtext="true" data-live-search="true"> <?php include "db.php"; $con = connect(); if (!$con->set_charset("utf8")) {//asignamos la codificación comprobando que no falle die("Error cargando el conjunto de caracteres utf8"); } $consulta = "SELECT * FROM lista_paises"; $resultado = mysqli_query($con , $consulta); $contador=0; while($misdatos = mysqli_fetch_assoc($resultado)){ $contador++;?> <option data-subtext="<?php echo $misdatos["iso"]; ?>"><?php echo $misdatos["nombre_pais"]; ?></option> <?php }?> </select>

See the Pen Bootstrap Select Simple Demo by Rene (@RensAfterCoffee) on CodePen.

CONCLUSIÓN
Con esto ya tienen solucionado la problemática de lista despegable implementando este buscador dentro. Para usarlo tenemos un par de opciones
- Primero usando CDN de la librería. Podemos vincular mediante enlaces externos
- Segundo descargando la librería desde su página oficial BootStrap e implementarlo dentro de nuestra aplicación.
Ambos métodos tienes sus ventajas y desventajas que ustedes pueden elegir como usar el sistema web.
En este ejemplo, utilizaremos los enlaces que se nos proporciona la librería.
DESCARGA
Descargar Código Fuente
select2 fue bueno hasta bootstrap 4, con la 5 ya no funcionan muchas de sus caracteristicas, si sabes de algun select parecido a select2… no dejes de publicar el articulo… un saludo.
Hola, agredecer por tu blog, sin el, me tomaria mucho tiempo encontrar esta y otras soluciones, ya son 3 años revisandolo
Buen día, mi pregunta es como obtengo el texto que se esta buscando para filtrarlo y vincularlo a la BD, pues no quiero cargar todos los datos en el select sino lo que vaya escribiendo. me dejo entender? ojajaj. saludos
Buenas tardes…. una consulta Nestor….
como hago para insertar el id del pais en la base de datos mysql con php ????
Hola Fernando
Primeramente tienes que crear un formulario y que contenga una etiqueta select con la propiedad «name»
Segundo, tienes que crear una conexion con mysql e insertar el valor de la etiqueta select que seria el ID seleccionado por el usuario.
Aquí, te dejo un Post donde hablo de este temas para insertar registros a MySQL
https://www.baulphp.com/insertar-datos-mysql-usando-pdo-php/
Saludos
Muchas gracias ! Esta genial
Excelente apoyo!
Hola Jose,
Gracias por su comentario, que bueno que te aya servido.
Un saludo a la distancia.