Sobre los nombres de variables externas en PHP

He estado varias horas peleándome con lo que yo pensaba que era un bug en PHP por mi desconocimiento en el tratamiento de los nombres de las variables externas (también llamadas incoming variables) en PHP.

Resulta que he estado indentando un código JavaScript que se veía bastante feo (aunque funciona perfectamente) y lo he formateado siguiendo el coding style de Moodle, que es el que ha de seguir NWiki.

Pues bien, resulta que tenía el código JavaScript que enviaba por AJAX (mediante las librerías YUI de Yahoo) un identificador de un lock de una página o sección de la wiki a un script PHP para refrescar el tiempo de dicho lock.

El código original era como éste y el indentado éste otro.

Parece que no hay mucha diferencia, ¿verdad?. Es más, a parte de los espacios/tabs/saltos de línea el resto de caracteres son exáctamente iguales.

Pues bien, el problema era no enteder qué hacía exactamente esa función JavaScript (no la programé yo y en teoría ese código no había que tocarlo). El último argumento, que originalmente era ‘lockid={$lock->id}’ lo cambié a ‘lockid = {$lock->id}’, y como se pasaba a un script PHP por el método POST lo que hace PHP es, para las variables externas (como $lock) es sustituir los puntos ‘.’ y los espacios ‘ ‘ por guiones bajos (underscore), como pone en la página que puse al principio. Así, el script no encontraba ningún valor dentro del campo $_POST[‘lockid’] y sí dentro de $_POST[‘lockid_’], volvíendome loco a mi y a el sistema de bloqueo de secciones que estaba programando, que no refrescaba los bloqueos correctamente.

Menos mal que Pigui me recomendó usar la extensión de Firefox Firebug para poder monitorizar entre otras cosas las peticiones HTTP que realizan las funciones PHP de NWiki.

Moraleja: si funciona, no lo toques.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: