Foros del Web » Programando para Internet » PHP »

"fwrite" repite el texto (entre 1 y 3 veces)

Estas en el tema de "fwrite" repite el texto (entre 1 y 3 veces) en el foro de PHP en Foros del Web. Este es un problemita que tengo desde que lancé el sitio hace casi 3 meses... Lo dejé pasar porque no le veía mucha importancia... pero ...
  #1 (permalink)  
Antiguo 17/02/2005, 18:24
Avatar de Terminator ®  
Fecha de Ingreso: julio-2004
Ubicación: San Isidro, Buenos Aires
Mensajes: 176
Antigüedad: 13 años, 5 meses
Puntos: 0
"fwrite" repite el texto (entre 1 y 3 veces)

Este es un problemita que tengo desde que lancé el sitio hace casi 3 meses...
Lo dejé pasar porque no le veía mucha importancia... pero a medida que aumenta el tráfico, las repeticiones en las entradas de texto se hace cada vez más molesta.

En mi sitio utilizo en varios lugares la función fwrite para guardar datos en archivos .txt y luego accedo a ellos mediante el panel de control.

Ejemplo:
http://www.pcimpacto.com.ar/descargar.php?id=25
Podrán ver en el menú de la derecha la sección "Problemas". Al clickear en cualquiera de las opciones, la notificación se almacena en diferentes TXT.

El problema: en vez de aparecer una sola vez el ID XXX en los TXT, aparecen 1, 2 o 3 veces...
El código que se usa en esa sección es el siguiente:

<?
if (@!$_GET['notificacion'])
{
?>
El Enlace está roto
....
....
....
<?
}
else
{
$archivo = "downloads/".$_GET['notificacion'].".txt";
$fp = fopen($archivo, "a");
fwrite($fp,"<a href='downloads_e.php?id=".$_GET['id']."' target='_blank'>". $_GET['id']."</a><br> \n");
fclose($fp);
echo "La notificación con el problema fue enviada correctamente.";
}
?>

Pueden observar por ustedes mismos el código que se genera:
http://www.pcimpacto.com.ar/downloads/rotos.txt
(notifiquen que el enlace está roto para que funcione este ejemplo)

Es bastante extraño para mi... no debería suceder supongo.
Gracias por su tiempo...
__________________
PC Impacto
  #2 (permalink)  
Antiguo 18/02/2005, 05:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Haz la prueba tu mismo ...

Recarga tu página (con tu navegador f5 o la tecla que corresponda) cuando al notificar muestres tu mensaje:
echo "La notificación con el problema fue enviada correctamente.";

Veras que se ocasionaran registros duplicados .. tantos como hasta que te aburras de recargar tu página .. .

Eso se ocasiona por qué el mensaje lo muestras en el mismo flujo del script que recibe el dato a registrar y hace el proceso .. Para solventar esto debes "salir" y redireccionar a otro script donde allá mostraras tu mensaje de error/exito tipo:

(despues de tu fclose($fp);)
Código PHP:
header ("Location: mensaje.php";
exit; 
De esta forma .. si recargo esa página/script que muestra el mensaje . .será la que muestra el mensaje .. no la que hace el proceso ocasionando duplicados ...

Un saludo,
  #3 (permalink)  
Antiguo 18/02/2005, 07:59
Avatar de Terminator ®  
Fecha de Ingreso: julio-2004
Ubicación: San Isidro, Buenos Aires
Mensajes: 176
Antigüedad: 13 años, 5 meses
Puntos: 0
Gracias
Yo veo otro problema... porque esto no sucede en esa sección solamente y además lo pruebo yo mismo y no le estoy haciendo retry a la página...
De cualquier manera se soluciona con la redirección, la cual ya había aplicado en "Comentarios" (Base De Datos) justamente por el motivo del retry.

De cualquier manera valió la pena el cambio... el problema se fue y quedó igual... ni te dás cuenta que hay redirección.
Gracias.
__________________
PC Impacto
  #4 (permalink)  
Antiguo 18/02/2005, 08:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Esa es la misma técnica para cualquier proceso .. de "ingreso" de datos o generar algo (un e-mail que se envia ..) etc. Siempre intentar separar la "logica" de la parte que ha de mostrar los mensajes de error/exito que se ocasionen al ejecutar tu código.

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 14:20.