Los datos de un control select múltiple

En esta ocasión vamos a revelar un sencillo truco para obtener los datos de un control de tipo select, cuando admite múltiples opciones (cuando tiene el atributo multiple). Como sabes, tú puedes incluir en tu formulario un selector de opciones que le permita al usuario escoger varias de ellas. Lo importante es que debemos ser capaces de recoger, en un script de destino, todas las respuestas elegidas por el usuario. Un ejemplo del tipo de selector del que hablamos sería el siguiente:

Vaaaale. Se nota que me gusta el “alpiste” 😉 .  Bromas aparte, si el usuario selecciona más de una opción, y envía el formulario, intentamos recuperar, en el script de destino (es PHP, pero podría ser cualquier otro lenguaje), las opciones elegidas, así: $bebidas = $_POST[“bebidas”]; Y ya tenemos el problema. Sólo nos aparece la última opción de las seleccionadas. Por ejemplo, si el usuario ha seleccionado las opciones con los valores 1, 5 y 6, en la variable $bebidas sólo aparece el valor 6. Los otros se han perdido. La solución a esto es tan simple que resulta paradójico que muchos desarrolladores, incluso con años de oficio, no la conozcan, pero esta entrada está porque me …

Seguir leyendo

Agregar atributos a las etiquetas HTML 5

Cuando desarrollamos la parte front-end de una aplicación web, a menudo nos encontramos con que tenemos que poder referenciar distintos elementos HTML, como pueda ser un imagen, un bloque, un párrafo, etc. Necesitamos referenciarlos para gestionarlos desde CSS o desde JavaScript. En la mayoría de las ocasiones, nos basta con usar propiedades como el id, o un nombre específico de clase que le apliquemos al elemento. Sin embargo, hay ocasiones con las que eso no es suficiente, y necesitamos atributos no normalizados. En los días oscuros (y, por suerte, ya lejanos) de HTML 4, añadir esos atributos era un dolor de cabeza, empleando instrucciones JavaScript que ni siquiera eran aceptadas por la mayoría de los navegadores. Afortunadamente, el estándar HTML 5 hace que esto sea fácil de hacer y, lo que es más importante, de utilizar.

Emplear use() en funciones anónimas

En algunos casos vemos, sobre todo en códigos PHP recientes, que la declaración “anónima” de una función se acompaña del empleo de use() para pasarle variables a la función. Un ejemplo sería el siguiente: $miFuncion = function() use ($nombre) {     echo “Hola, “.$nombre; } Esta sintaxis puede resultar un poco confuso si no estás familiarizado con él. Y, si te estás iniciando en el mundillo de los frameworks PHP lo vas a ver muy a menudo. Vamos a ver que es lo que hace, y cómo hay que usarla. En realidad, esto sería equivalente a lo siguiente: $miFuncion = function($nombre) {     echo “Hola, “.$nombre; } O, también a lo que aparece a continuación: $miFuncion = function() {     global $nombre;     echo “Hola, “.$nombre; } Lo único con lo que hay que tener cuidado es que, cuando emplees la primera sintaxis (la que recurre a use()) la variable o variables que emplees deberán estar declaradas, y asignadas, ANTES DE DECLARAR LA FUNCIÓN. Con las otras dos sintaxis (las de siempre, para entendernos), basta con que las variables empleadas estén declaradas antes de invocar la función. Por lo tanto, podemos decir que la sintaxis con use() …

Seguir leyendo

Borrar ficheros con nombres muy largos

A todos nos ha pasado alguna vez. Cuando empleas un framework de desarrollo en ciertos contextos (Laravel, Symfony, etc) u otras herramientas específicas, y creas proyectos en directorios concretos, la herramienta o el framework que estás empleando crea algunos archivos con nombres extremadamente largos. En teoría, con Windows el nombre de un archivo, incluyendo la ruta, no puede superar los 255 caracteres. Esto no es un problema. Por supuesto, en la mayoría de los casos, con eso tienes más que de sobra. Sin embargo, como te he comentado, algunas herramientas se las ingenian para “romper” esa limitación, y crear archivos con nombres kilométricos. Normalmente, esos archivos no son empleados luego por la aplicación o proyecto que has creado, así que no te sueles preocupar por ellos. El problema viene cuando debes eliminar el proyecto de tu equipo (por ejemplo, porque ya ha quedado obsoleto, y deseas limpiar espacio en disco). Windows, sencillamente, no puede gestionar esos nombres, por lo que, hagas lo que hagas, y lo intentes como lo intentes, no puedes borrarlos o moverlos a ninguna parte. Y, claro. Como están dentro de una estructura de directorios, tampoco puedes borrar esos directorios.

Poniendo MySQL en UTF-8

La codificación de contenidos cuando se desarrolla una aplicación que requiere el uso de bases de datos puede llegar a convertirse en una de las peores pesadillas de un desarrollador, sobre todo si es algo en lo que no has pensado desde las primeras fases iniciales previas al inicio del desarrollo. Motores de bases de datos tan populares y difundidos como MySQL pueden dar muchísimos problemas a la hora de grabar datos, de recuperarlos y de renderizarlos en vistas, si no tenemos en cuenta la codificación. La codificación de datos más adecuada en la mayor parte de los casos es UTF-8, ya que implementa todos los caracteres que se puedan usar en cualquier idioma, así como gran cantidad de guarismos que, sin pertenecer a un idioma específico, son de uso relativamente común, como signos matemáticos u otros. Para implementar otros caracteres extremadamente especiales hay otras codificaciones adecuadas, pero eso es tan poco habitual que ni lo vamos a comentar. El problema es que, cuando se crea una base de datos, tabla o campo, el motor de MySQL (dependiendo de la versión, y del entorno de desarrollo) tiende a emplear alguna codificación de tipo latin-n-xxxxxxxx o similar. De momento, parece irrelevante, …

Seguir leyendo

Ordenar matrices en JavaScript

Sí, ya se que el título no parece prometer gran cosa. Ordenar una matriz en JavaScript es un simpleza. Basta con un matriz.sort() y, hala, ya está ordenada… ¿O no?. Sí, si se trata de una matriz “normal” de JavaScript. Sabemos que JavaScript, de forma nativa, sólo gestiona matrices unidimensionales, indexadas. Son un modelo de colección de datos inherentemente simple, en el que cada dato tiene un índice que lo identifica. Estos índices son numéricos, consecutivos, empezando desde 0. Realmente, es un modelo simple y, a la postre, insuficiente para cubrir muchas necesidades de hoy en día. Si quieres una matriz bidimensional, en realidad, lo que manejas es una matriz de matrices. Cada elemento de la matriz bidimensional es, a su vez, una simple matriz unidimensional. Además, si quieres una matriz asociativa, al estilo de las que maneja, por ejemplo, PHP, ya tienes que recurrir a parsear un objeto JSON. Y ahora viene lo bueno. Si tienes una matriz bidimensional asociativa (creada a partir de un JSON), y quieres ordenar sus elementos por uno de los campos de forma que se mantengan las relaciones de los demás elementos, ¿cómo hacerlo? Vamos a ello.

Barras de scroll personalizadas

En el mundo del frontend hay que cuidar, cada día más, la apariencia de nuestros desarrollos web. Atrás quedaron ya los años en que bastaba con que una página funcionara correctamente, y que fuera “más o menos” bonita. En un mundo dominado, cada vez más, no sólo por la funcionalidad y facilidad de uso, sino también por la estética cuidada hasta el mínimo detalle, es muy importante “entrarle por los ojos” al visitante de nuestra web. Las barras de scroll son un elemento visualmente muy importante y, con gran frecuencia, descuidadas por los frontenders. Es cierto que depende del tipo de sitio. En una web como, por ejemplo, esta misma, es un detalle completamente irrelevante, ya que el interés del visitante se centra en los contenidos. Sin embargo, suponte que te toca realizar una página para un estudio de fotografía, o una revista de moda. Ahí si que no puedes permitirte que el navegador dibuje las barras de scroll clásicas. En este artículo vamos a ver como solucionar esto, para poder contar con unas barras de scroll adecuadas a cada caso.

Comprimir un directorio con PHP

En un aplicativo web con frecuencia se van acumulando, en el servidor, archivos enviados por los usuarios de la aplicación. Pueden ser imágenes, documentos en pdf o rtf, hojas de cálculo, o cualesquiera otros, dependiendo de la finalidad de la aplicación. Como sea, el caso es que estas aplicaciones que actúan como repositorios dan como resultado, si el sitio tiene muchos usuarios y un elevado tráfico que, en poco tiempo, el volumen de documentos almacenados pueda llegar a comprometer el servicio, o requiera aumentar el costoso espacio de almacenamiento. La solución puede pasar por empaquetar todos esos documentos en un archivo comprimido, y mover ese archivo a otra ubicación, como puede ser un ordenador local. También puede ser que un usuario decida recuperar todos los archivos que ha ido colocando en el repositorio a lo largo del tiempo en un único paquete. En ambos casos, existe una clase que puede ayudarnos a realizar esta tarea de empaquetado. Se trata de DirCompress.

La marca BOM en UTF-8

Este artículo es un pequeño truquillo basado en mi experiencia en situaciones concretas. Veréis que, desde el punto de vista de la programación es algo muy simple que, si lo piensas un segundo, seguramente ya conoces. Sin embargo, para aquellos que se lo encuentran por primera vez puede suponer un pequeño quebradero de cabeza. Te cuento. Todos, a día de hoy, trabajamos con la codificación UTF-8 en nuestros archivos. Todos nuestros scripts están grabados con esta codificación. Y también la damos (y la exigimos) cuando tenemos que intercambiar datos con servicios o aplicaciones de otros desarrolladores. Esta codificación abarca todo el código Unicode y evita que tengamos conflictos cuando empleamos caracteres de alfabetos locales o, incluso, guarismos que no pertenecen a ninguna alfabetización específica. Cuando digo que “todos usamos UTF-8” estoy generalizando un poco. En determinados proyectos de gran envergadura, con recursos y finalidades muy específicos, se emplean otras codificaciones (y si no, que le pregunten a IBM, que de eso saben un rato) pero, desde luego, en el mundillo del desarrollo web, o de aplicaciones de escritorio, UTF-8 es, sin duda, el estándar imperante. Sin embargo, hay dos modos de grabar contenidos o documentos en UTF-8. Con y sin …

Seguir leyendo