Hola a todos:
Estoy usando Zend Studio 5 y Zend Platform 2.2.3 para desarrollar scripts en PHP 5 para un sistema que estoy desarrollando. Uno de estos scripts realiza una inserción en una base de datos MySQL después de validar los datos que ingreso en un formulario.
Bueno, cuando quiero probar mi script simplemente abro el formulario, meto unos datos de prueba y cuando le doy clic en Aceptar se invoca mediante AJAX a un script PHP que valida mos datos de mi formulario y, si todo es válido, los mete a la base de datos y muestra (también con AJAX) un mensaje de confirmación.
He aquí lo raro:
Cada vez que intento probar este formulario y script desde mi navegador, el script se traba y no hace nada (no mete nada a la base de datos, ni menos muestra ningún mensaje de confirmación, ni tampoco envía ninguna respuesta de regreso al formulario); pero
cuando lo corro paso a paso con Zend Studio el script, al que no le hago nigún cambio, corre perfectamente como si nada, valida e inserta correctamente y hace que en el formulario se muestre correctamente el mensaje de confirmación.
Por si acaso pongo acá el script:
Código PHP:
session_start();
$usuario_actual = Usuario::getUsuarioEnSesion();
$errores = array(); // Aquí van los errores de validación
$fecha = $_GET['fecha'];
if ($fecha == "")
$errores[] = Tareo::ERROR_VAL_FECHA_NO;
else
{
$mysql = ConexionBD::getInstancia(true);
$sql = "SELECT COUNT(*) FROM " . Tareo::NOMBRE_TABLA . " WHERE fecha='$fecha'";
$rs = $mysql->ejecutarSQL($sql);
$fila = ConexionBD::desdoblar($rs, ConexionBD::RS_ENUMERADO);
if ($fila[0] > 0)
$errores[] = Tareo::ERROR_VAL_FECHA_REP;
}
$num_trab = $_GET['numtrab'];
if (count($errores) != 0) // ¿Hay algún error de validación?
echo ObjetoConEstado::ESTADO_PLOMO . ";" . join(";", $errores);
else
{
$num_ok = $num_ko = 0;
for ($i = 0; $i < $num_trab; $i++)
{
$nuevo_item = new Tareo($fecha, $_GET["idtrab$i"], $_GET["idproyecto$i"]);
$nuevo_item->setNumHoras($_GET["hn$i"], $_GET["he25$i"], $_GET["he35$i"]);
// Este método hace la inserción en la base de datos
if ($nuevo_item->crear($usuario_actual->getID()))
$num_ok++; // Se insertó bien
else
$num_ko++; // No se pudo insertar
}
echo ObjetoConEstado::ESTADO_VERDE . ";$num_ok;$num_ko";
}
En pocas palabras el script funciona así: Desde el URL ($_GET) se recupera el contenido de los campos de mi formulario. El script luego valida uno a uno los campos, para verpor ejemplo si alguno que es obliatorio el usuario lo dejó en blanco. Cada vez que se encuentra un error de validación, el array $errores va acumulando una constante de error. Luego de terminar de validar, si el array $errores quedó vacío (o sea si el script no ha encontrado ningún error de validación) se procede (entre otras cosas) a llamar al método que inserta la información en la base de datos. Finalmente, el resultado de toda la acción (representada por constantes que referencian colores "rojo", "verde" o "plomo" según se haya posido o no guardar la información en la BD o haya habido algún error de validación) se devuelve al formulario.
¿A qué se debe esto? ¿Por qué un script funciona sólo cuando es depurado y no cuando se ejecuta normalmente?
Gracias