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.

Esclavizar un disco duro

En ocasiones hemos oído la expresión “esclavizar un disco duro”. En este artículo vamos a entender qué significa, qué implica, y por qué hacerlo. También vamos a aclarar un concepto erróneo que mucha gente da por cierto, pero que no lo es. Esclavizar un disco duro es una operación sencilla en un PC de torre aunque, dado que es necesario “meterle mano” al hardware, puede ser más complicada en un portátil y, a menos que tengas experiencia en este tipo de equipos, no deberías intentarlo (al menos, yo no me atrevo a abrir el mío 🙂 ). Además, convertir un disco duro en esclavo implica que hay, al menos, dos discos duros físicos, ya que siempre debe haber un disco duro maestro; en los portátiles no suele haberlos: Lo normal es que exista un disco duro físico, dividido en dos o más discos virtuales.

Expresiones regulares

Todos sabemos lo que son las expresiones regulares. Se trata de patrones de secuencias de caracteres que empleamos para comprobar si una cadena de texto se ajusta a un formato específico. Por ejemplo, puede que una cadena deba contener dígitos numéricos, pero no espacios en blanco, o letras o signos de puntuación. O podemos querer comprobar que una cadena contiene una dirección de correo electrónico correctamente escrita. En estos casos creamos un patrón que define el formato al que debe ajustarse una cadena y luego lo comparamos con la misma. La forma de hacer estas comparaciones depende de cada lenguaje específico. En esta serie de artículos conoceremos el modo de emplear las expresiones regulares en los dos lenguajes de script más extendidos en el desarrollo web: JavaScript y PHP. Sin embargo, los patrones que se emplean en las expresiones regulares para comprobar la coincidencia con tal o cual formato es siempre el mismo, con independencia de que se usen luego estas expresiones en Python, Java, PHP, C++, o cualquier otro lenguaje.

Expresiones regulares en JavaScript

El uso de expresiones regulares en JavaScript es una buena manera de prevalidar el formato de ciertos datos en el lado del cliente, sin necesidad de recurrir a llamadas al servidor. Sin embargo, la forma de hacerlo es adecuada, también, en entorno de API’s de Node JS (aunque el uso de Node JS no será objeto de estudio en este artículo, dado que es un tema tan amplio que requeriría su propia serie de artículos, que le dedicaremos en su momento). En este artículo vamos, pues, a mostrar como hacer uso de las RegExp en JavaScript. Veremos que podemos manejar los datos a evaluar por programación clásica o por jQuery. Finalizaremos con una breve reflexión acerca de la (limitada) programación orientada a objetos de JavaScript. Vamos a ello.

Expresiones regulares en PHP

PHP es, sin duda, el lenguaje de servidor por excelencia para desarrollos web. Por lo tanto, la cuestión de las expresiones regulares (o cualquier otro aspecto de programación, si a eso vamos) no estaría completa si no las vemos en este contexto. Aunque el tema de las expresiones regulares en PHP ya se ha tratado en otro artículo de este blog, aquí vamos a comentar las funciones de las que disponemos en PHP para conseguir aprovechar al máximo las posibilidades de este recurso. Si eres desarrollador habitual en PHP, este artículo te servirá a modo de “chuleta” o referencia sobre este tema.