Foros del Web » Programando para Internet » PHP »

pérdida de datos al refrescar una página

Estas en el tema de pérdida de datos al refrescar una página en el foro de PHP en Foros del Web. Hola qtal, Tengo una duda sobre cómo hacer una cosa. A ver si me consigo explicar sin liar a nadie. Estoy haciendo una aplicación que ...
  #1 (permalink)  
Antiguo 27/01/2005, 11:39
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 15 años, 9 meses
Puntos: 0
pérdida de datos al refrescar una página

Hola qtal,
Tengo una duda sobre cómo hacer una cosa. A ver si me consigo explicar sin liar a nadie.
Estoy haciendo una aplicación que usa la clase PHPMailer para hacer envíos de mails y una de las funcionalidades de la aplicación es que el usuario puede adjuntar tantos ficheros como quiera. A medida que el usuario los va seleccionando se van listando para que el usuario pueda saber que ficheros va a enviar con el mail.
Por políticas de empresa, no se usan frames en las webs que se desarrollan, así que en el mismo documento donde voy seleccionando los ficheros que se van a adjuntar al mail, están el resto de datos (que también son configurables por el usuario): Si el mail es HTML o no, el host, la dirección del remitente, las direcciones destino, ... En fin todos los datos.
El problema que tengo es que cada vez que adjunto un fichero, si tenía algún valor en los otros campos los pierdo al refrescar la página (la tengo que refrescar para ir mostrando el listado de los ficheros que voy adjuntando). Lo que tampoco quiero es obligar al usuario primero ha adjuntar todos los ficheros y luego rellenar el resto de campos para hacer el envío, y como no usamos frames pues no puedo refrescar "sólo" la parte de los ficheros adjuntos. Existe alguna manera de no perder la información de los campos al ir adjuntando ficheros? Se podría hacer con $_SESSIONS, o es una locura?
Alguna idea?
Gracias de antemano.
Saludos,
  #2 (permalink)  
Antiguo 27/01/2005, 11:53
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Podrías usando php y javascript combinados establecer un sistema que adjunte tantos ficheros según se determine en otro campo:
Código PHP:
<? 
$numero
=60//numero de ficheros máximos 
?> 
<script> 

function adjuntos(numero) 

    for(x=1;x<=<?=$numero?>;x++) 
    { 
        obj = document.getElementById('adj'+x); 
        if( parseInt(numero)>=x ) obj.style.display=''; 
        else obj.style.display='none'; 
    } 
}</script> 
<form method="post" action="<?=$PHP_SELF?>" enctype="multipart/form-data"> 
<b>Ficheros adjuntos:</b>&nbsp; 
<select name="numAdjuntos" onclick="adjuntos(this.value)"> 
<? 
for ($i=0;$i<$numero;$i++) 
{
?> 
<option value="<?=$i?>"><?=$i?> adjunto</option> 
<?}?> 
</select> 
<? 
for ($i=0;$i<$numero;$i++) 
{
?> 
<div id="adj<?=$i?>" name="adj<?=$i?>" style="display:none"><input type="file" name="fich<?=$i?>"><br></div> 
<?}?> 
<input type="submit" name="enviar" value="Enviar"> 
<br> 
<br> 
</form>
El número de ficheros máximos lo determinas con la variable $número...
Aunque no sé si con ése método deberías entonces cambiar el sistema de recepción de archivos ni si dado el tipo de ficheros a enviar el tiempo de espera del cliente sería excesivo...

Aqui tienes un ejemplo de cómo quedaría(no se sube nada sólo es un ejemplo):

http://elotrositio.tuarrobanet.com/ficherin.php

Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 27/01/2005 a las 11:54
  #3 (permalink)  
Antiguo 27/01/2005, 12:16
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 15 años, 9 meses
Puntos: 0
Hola Yoseman,
gracias por el interés. el problema no lo tengo tanto en saber cuantos ficheros subiré como en la posterior recarga de la página. Me explico.
Con lo que me comentas (y si estoy equivocado, corrígeme por favor) una vez seleccionado el nº de ficheros que quiero subir, me aparecerían los campos de tipo "file" (tantos como el número introducido). Pero una vez seleccionados esos ficheros que quiero adjuntar y subidos al servidor (hago un upload), necesitaría ver la información de esos ficheros para informar al usuario de lo que está adjuntando. En el momento en el que hago el upload, meto en una tabla de base de datos la información de esos ficheros adjuntados (nombre, tamaño, tipo y session_id()) para luego poder hacer una SELECT de esa tabla y listar los ficheros. Para poder ver esa información, sólo se me ocurre hacer una recarga del documento y es entonces cuando pierdo el resto de campos (asunto del mail, cuerpo, para, cc, cco, isHTML, ...)
Entiendes lo que quiero decir?
Salu2
  #4 (permalink)  
Antiguo 27/01/2005, 13:48
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 14 años
Puntos: 5
Si una vez subidos todos los ficheros los registras en la db y copias de un golpe al servidor, lo mismo te evitas dar más pasos:
Código PHP:
 foreach($_FILES as $key=>$value)
        { 
        if (
is_array($value) && $_FILES[$key]['size']>0)
            {
            
$query=("insert into fotos (nombre,tamaño,tipo,session_id) values('".$_FILES[$key]['name']."','".$_FILES[$key]['size']."','".$_FILES[$key]['type']."','".session_id()."')"); 
            
move_uploaded_file($_FILES[$key]["tmp_name"],$_FILES[$key]["name"],)) 
Cuando se pregunta si es un array $value(is_array($value) ) realmente es cómo si se pasasé por todos los archivos subidos, si es un array el valor, es porque se trata de un array bidimensional, razón necesaria para que el fichero se haya subido, y cómo se recorre todo el array $_FILES pues están pasando por todos los ficheros subidos...
Entonces puedes hacer la acción para todos los ficheros subidos y así ahorrarte tener que volver al formulario.

Y luego hacer lo que tengas que hacer con los demás datos, todo en un sólo script que recibe.

De todas formas si no quieres cambiar tu método, podrías registrar cómo variable de sesión el array $_GET o $_POST en el script que recibe los datos del formulario:
Código PHP:
session_start();
$_SESSION['FORMU']=$_GET// o $_POST 
Y entonces en el script siguiente acceder a tus variables del formulario mediante esta variable de sesión. Por ejemplo si tenias un campo de tipo text llamado mail , encabezas ése pequeño código al inicio del script que recibe los ficheros, y luego en el siguiente script inicias sesión y accedes con $_SESSION['FORMU'] a $_GET o $_POST (según sea el método de envio de tu formulario). Para el campo mail por ejemplo se accedería con $_SESSION['FORMU']['mail']

Lo siento, no sé si te servirá de algo todo esto, es que no me ha quedado muy claro si se trata de que al envio del formulario haya una especie de confirmación y pasar a un tercer script, o pretendes evitar ese paso.

Salu2 ;) (lo mismo si pones un link al script te puede ayudar alguno de los expertos moderadores, o lo mismo ellos te entienden mejor , seguro )
__________________
[+]
[+]
  #5 (permalink)  
Antiguo 27/01/2005, 14:19
 
Fecha de Ingreso: enero-2005
Ubicación: Valparaiso - Chile
Mensajes: 116
Antigüedad: 12 años, 10 meses
Puntos: 0
Si, yo tuve un problema parecido y lo arregle con variables de sesion. Es una buena solucion.
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 03:29.