Foros del Web » Programando para Internet » PHP »

No recargar la pagina al volver atrás

Estas en el tema de No recargar la pagina al volver atrás en el foro de PHP en Foros del Web. Yo cuando hago una pagina, tengo distintas funciones que van ejecutando acciones y con un switch voy llamando a esas funciones. Algo asi : switch ...
  #1 (permalink)  
Antiguo 08/10/2004, 11:56
Avatar de SeRNa  
Fecha de Ingreso: octubre-2003
Ubicación: Ibiza
Mensajes: 72
Antigüedad: 14 años, 2 meses
Puntos: 0
No recargar la pagina al volver atrás

Yo cuando hago una pagina, tengo distintas funciones que van ejecutando acciones y con un switch voy llamando a esas funciones. Algo asi :
switch ($opt)
{
case ("insertar"):
insertar_articulo();
break;
case ("ffotos"):
form_fotos();
break;
case ("inst_fotos"):
insertar_fotos();
break;
case ("form_mod"):
form_mod();
break;
...
}

Tambien dentro de las funciones llamo a otras funciones... Pues mi problema viene a que después de haber ejecutado cualquier de las funciones de insertar registros, eliminar, etc... y estoy visualizando el registro, si vuelvo atrás con el boton del explorer, me vuelve a introducir un registro porque vuelve a esa funciona.

Pues no sé me ocurre como solucionarlo.

¿Alguna idea? Muchas Gracias!

Saludos!
__________________
Una de las ventajas de ser desordenado es que uno está haciendo continuamente descubrimientos
  #2 (permalink)  
Antiguo 08/10/2004, 12:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
De todos tus opciones .. tendrías que redireccionar a otra página o si misma para que no suceda lo que te ocurre.

case ("insertar"):
insertar_articulo();
header ("Location: cualquierpagina.php");
exit;
break;


Y .. cuando uses el "header()" recuerda que NO debe existir nada más de HTML/salida por encima de este, sino .. tendrás problemas ..

Para eso se organiza el código de tal forma que si requieres mostrar algún mensaje en esa ejecución de tus funciones o incluso que ese switch() lo tengas incrustrado en un "armazón" html .. debes hacerlo en la página que redireccionas y en el momento que se requiera .. por ejemplo .. usando una variable de control más para ese $op y creando un case más de ese switch que sea el que contenga todo ese HTML + el mensaje que corresponda.

Un saludo,
  #3 (permalink)  
Antiguo 09/10/2004, 11:59
Avatar de SeRNa  
Fecha de Ingreso: octubre-2003
Ubicación: Ibiza
Mensajes: 72
Antigüedad: 14 años, 2 meses
Puntos: 0
He estado buscando información sobre el header pero nada, que me da el mismo problema que siempre. Este:

Cannot modify header information - headers already sent by

Lo he puesto directamente dentro de la función donde lo quiero usar y también he probado en crear una función arriba del documento (antes de cualquier html) y luego llamo a esa función. Y nada. No es la primera vez que tengo problemas con el header y siempre acabo usado algo parecido en javascript pero me gustaria poder entender por fin el header.

Gracias por la ayuda
__________________
Una de las ventajas de ser desordenado es que uno está haciendo continuamente descubrimientos
  #4 (permalink)  
Antiguo 09/10/2004, 12:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si pones el código que estás usando completo (incluido los "include" que puedas usar por médio) te podrémos orientar de como organizar tu própio código.

También indica el mensaje de error completo que obtienes ..por qué de ahí se deduce y se vé bien claro en que línea de código exactamente tiene esa "salida" que está probocando ese error.

Un saludo,
  #5 (permalink)  
Antiguo 09/10/2004, 12:33
Avatar de SeRNa  
Fecha de Ingreso: octubre-2003
Ubicación: Ibiza
Mensajes: 72
Antigüedad: 14 años, 2 meses
Puntos: 0
Haré un resumen de mi codigo porque es muy largo... Cuando me has comentado lo del header he probado en ponerlo en la función

a) Primera opcion

1) Codigo html + llamadas a javascript + css, etc..
2) Las funciones

function patati () {

}

function patata () {

}

y asi sucesivamente...

3) Ahora viene el switch que es el mismo que he puesto en mi primer mensaje. He puesto el header tal cual me lo has puesto para probarlo (porque sabia que no me iba a funcionar porque ya lo habia probado más veces).
4) Ya no hay más codigo PHP


b) Segunda opcion

He creado en la cabecera de mi archivo, una funcion del tipo asi
function header_ () {
header ("Location...);
}

Y luego he llamado a esa fución dentro de una función para que se me ejutara y el error que me ha salido en los dos casos es el mismo.

Y este es el error que me sale siempre:

Cannot modify header information - headers already sent by (lapagina en cuestion).

Gracias por las molestias pero es que he mirado en la pagina del php y nada
__________________
Una de las ventajas de ser desordenado es que uno está haciendo continuamente descubrimientos
  #6 (permalink)  
Antiguo 09/10/2004, 12:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Insisto .. si no dices el mensaje de error completo donde dice la línea exacta que proboca la salida y que te está dando el problema .. no se puede hacer mucho por orientarte.

De todas formas .. no hace falta que pongas tooodo el código de tu "index" o página/script maestro que llama vía include a los otros por el switch() .. pero si que por lo menos algo de código desde el principio hasta los switch() ayudaría.

Tu hablas de "funciones" y demás .. pero no se vé donde las llamas .. ahí está el problema .. no en que ese código lo pongas en una función o no .. sino donde lo llamas.

A su vez .. otro detalle .. despues de un "header()" del tipo "location" es altamente recomendable usar: exit; para terminar la ejecución del script en ese punto, pues, el objetivo de "redireccionar" es a su vez terminar la ejecución del script en ese punto. Si no lo haces, el código continua su flujo normal hasta el final del mismo .. por médio se podría ejecutar código que no tendría que ejecutarse en esa situación.

Un saludo,
  #7 (permalink)  
Antiguo 09/10/2004, 12:55
Avatar de SeRNa  
Fecha de Ingreso: octubre-2003
Ubicación: Ibiza
Mensajes: 72
Antigüedad: 14 años, 2 meses
Puntos: 0
Tengo esta funcion en mi archivo:

//Insertar articulo segunda mano

function insertar_articulo () {
include ("../config.php");
$fecha = date ("y/m/d");
$nombre = addslashes ($_POST["nombre"]);
$descripcion = str_replace("\n", "<BR>", $_POST["descripcion"]);
$descripcion = addslashes ($descripcion);
$propietario = addslashes ($_POST["propietario"]);
$tlf = addslashes ($_POST["nombre"]);

if (empty ($nombre)) {
echo "<center><span class=\"Msg\">El campo Articulo no puede estar vacio</span></center>";
form ();
visualizar ();

}
else {
$directorio = 'temp/';
$img2 = '';
mysql_query ("insert into $tblsmano values ('null','$fecha','$nombre','$descripcion','$propie tario','$tlf','$img2')",$conexion);
$codigo1 = mysql_insert_id ();
$nom_img = $_FILES['img']['name'];
$tmp_img = $_FILES['img']['tmp_name'];
if ($nom_img != "") {
$ext = strtolower(substr($nom_img,-4,4)); // Obtenemos la extension del archivo
$img = $codigo1 . $ext;
if (move_uploaded_file($tmp_img, $directorio . $img)) {
thumbjpeg($img, 'galeria', 400);
thumbjpeg($img, 'thumbs', 100);
mysql_query ("update $tblsmano set imagen = '$img' where id = '$codigo1'",$conexion);
// borramos la imagen original
unlink($directorio.$img);
}
}
echo "<center><span class=\"Msg\">Añadido</span></center>";

}

}

Y luego la llamo aqui:

switch ($opt)
{
case ("insertar_articulo"):
insertar_articulo(); // Llamo a la función
header ("Location: admin.php?var=segunda_mano.php");
exit;
break;
}

Todo eso en el mismo archivo. Y este error es el que me sale:

Warning: Cannot modify header information - headers already sent by (output started at /home/danicl/public_html/ibznau/admin/admin.php:8) in /home/danicl/public_html/ibznau/admin/segunda_mano.php on line 462

Y la linea 462 es la del header ("Location: admin.php?var=segunda_mano.php");

Cluster, que paciencia que tienes
__________________
Una de las ventajas de ser desordenado es que uno está haciendo continuamente descubrimientos
  #8 (permalink)  
Antiguo 09/10/2004, 13:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate en este error:

Cita:
]output started at /home/danicl/public_html/ibznau/admin/admin.php:8)
ahí te dice que en la línea 8 de admin.php tienes una salida hacia el cliente (navegador) en forma de echo "algo" .. o HTML directo .. o Javacript .. o un simple espacio o salto de línea despues de ?> o antes de un <?

En esa función que pusistes .. ya haces echo "algo" para mostrar unos mensajes de error/existo del proceso de las mismas .. Si haces eso .. a continuación no puedes hacer un "location" (header()) .. Esos mensajes de error/exito NO deberías hacerlos ahí sino en el script que finalmente redireccionas .. es decier en admin.php en tu ejemplo .. Para eso en lugar de genear echo "esto es el mensaje" .. usa variables de control tipo $mensaje=1; para que puedas hacer un redireccionamiento tipo:

header ("Location: admin.php?var=segunda_mano.php&mensaje=$mensaje");
exit;

para que en esa página/script que redirecinas tomes ese valor de $mensaje ($_GET['mensaje']) y lo filtres .. para presentar el mensaje en consecuencia:

if ($_GET['mensaje'] == 1){
echo "mensaje 1";
}

Esa sería la técnica para evitar "salida" hacia el navegador .. pero no por ello no poder mostrar un mensaje si se requiere ..el caso es que el mensaje no se "muestra" en el script de proceso . sino donde se redirecciona. La redirección puede ser hacia otro script/página o bien a si misma (por ejemplo para el caso de errores.. lo harías sobre el mismo script para que se rectifique el error).

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:10.