Me atorespondo esta pregunta, pues ya he resuelto el problema.
Odio las labores de seguimiento, aunque con esta profesión a menudo son inevitables. Coloqué al principio del script un print_r($_POST)
, para ver qué estaba pasando.
Resultado:
array()
Es decir, los datos no llegaban a su destino. La matriz con los datos del formulario desaparecía por el camino. ¿Cómo era posible? En principio no supe dónde buscar. Estaba todo ahí, en ese simple fichero. Todo era correcto, se enviaban los datos, pero no se recibían.
Tras una ardua investigación descubrí que el formulario enviaba realmente los datos a http://example.com/visitas.html, y sin embargo se intentaban recibir en http://www.example.com/visitas.html (la extensión html o php aquí no tiene trascendencia).
Es decir, había otro redireccionamiento, aparte del especificado en .htaccess
, cuyo objetivo era añadir la triple w, y era en ese proceso donde desaparecía la matriz de datos $_POST.
En algún sitio leí que alguien pensaba que era un bug de PHP, algo que no me importó, pues lo que yo necesitaba no era echarle la culpa a alguien, sino encontrar una solución. Una vez localizado el problema, el resto fue sencillo: eliminé el indeseado redireccionamiento.
Sustituí la definición del formulario por:
<form action="http://www.example.com/visitas.html” method="post">
De esa manera, al especificar las www en el dominio, como por arte de magia, los datos aparecieron donde debían estar. Para analizar los redireccionamientos que están produciéndose en el acceso a una web, recomiendo el complemento de Firefox Live HTTP Headers