[Php-avanzado] Consulta

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Mar Mar 23 11:29:42 ART 2010


Hola Leandro,

El mar, 23-03-2010 a las 04:31 +0000, Leandro Schereik escribió:
> Hola a todos una consulta para hacer: tengo dos paginas una es
> abm_categ.php en la que llamo a alta_categ.php por medio de un
> include.
> La idea es realizar altas de categorias pero cuando inserto y luego
> actualizo la pagina con F5 sigue tratando de insertar
> no lo hace por que lo controlo con un if, pero me sigue saliendo el
> mensaje por pantalla "La categoria ya esta dada de alta en el
> sistema."
>    
> ¿Al tener if (isset($_GET["sub_categ"]) no tendria que entrar solo si
> esta seteado el boton sub_categ y no emitir el mensaje:"La categoria
> ya esta dada de alta en el sistema."?

	Sí, tendría, pero el navegador al presionar F5 no solo recarga la
página, sino que vuelve a enviar los datos de formularios (más que
"recargar", sería "repetir", y por tanto obtenés el mensaje de la
categoría repetida, porque en realidad estás volviendo a ingresarla.
	Tu validación del lado del servidor previene la inconsistencia de
datos!

	Digamos que este comportamiento del navegador no es una fallo, sino una
característica...

	La solución no es linda: hacés que el formulario vaya a otro script,
por ejemplo ins_categ.php que tiene todo el código de la inserción pero
ninguna salida. Luego de insertar, la última línea hace un
header("Location: abm_categ.php") con lo que el script salta a la
interfaz del usuario.
	De esta manera al presionar F5, no estás recargando ins_categ.php sino
abm_categ.php, que ahora no hace nada.

	La contra de este mecanismo es que tenés que implementar alguna forma
de pasarle a abm_categ.php los mensajes de error o de Ok, para dar
feedback al usuario. 
	Se puede implementar con sesiones o vía URL header("Location:
abm_categ.php?msg=Categoria+agregada"). Lo único que hace abm_categ.php
es mostrar el mensaje y decorarlo diferente si es de error u Ok.
	Esto se complica cuando además del mensaje, teneś que pasarte la página
del paginador o más parámetros... es algo a pensar de antemano.

	También podés ignorar todo esto: el mensaje "La categoria ya esta dada
de alta en el sistema." es correctísimo porque al presionar F5, el
usuario está reenviando el formulario y tu sistema le impide la
inconsistencia.

> Muchas Gracias 

	Por nada!
-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado