Foros del Web » Programando para Internet » PHP »

Recargar pagina sin perder datos en un input type"file"

Estas en el tema de Recargar pagina sin perder datos en un input type"file" en el foro de PHP en Foros del Web. Hola amigos, tengo un gran problema, no encuentro la manera de recargar una pagina sin perder los datos de un input type file. Con el ...
  #1 (permalink)  
Antiguo 25/11/2008, 07:06
 
Fecha de Ingreso: febrero-2005
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Recargar pagina sin perder datos en un input type"file"

Hola amigos, tengo un gran problema, no encuentro la manera de recargar una pagina sin perder los datos de un input type file. Con el resto de campos no tengo problema ya que aplico lo siguiente:

if (isset($_POST["nombre"])) $nombre = $_POST["nombre"]

y en el formulario:

<input type="text" name="nombre" value="<?php echo $nombre?>" />;

pero no encuentro la manera de guardar lo que se encuentre en un type="file", porque lo siguiente definitivamente no funciona

if (isset($_FILE["foto"])) $foto = $_FILE["foto"]

y en el formulario:

<input type="file" name="foto" value="<?php echo $foto?>" />;


espero que alguien sepa como solucinar esto.
tengo que recargar la pagina porque el primer submit es para validar la informacion, si todo ha estado correcto guarda los datos y va a otra pagina; pero si hay errores, la pagina se carga con los mismos datos y con un mensaje indicando la lista de errores cometidos, para que el usuario los corrija pero sin tener que volver a ingresar toda la informacion.

Gracias de antemano
  #2 (permalink)  
Antiguo 25/11/2008, 09:00
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Recargar pagina sin perder datos en un input type"file"

Podrías asignar el valor del input file a un campo hidden, y mostrar un mensaje debajo que ha sido cargado, si este desea cambiar el file solo selecciona otro, pero sino lo hace se carga el valor del input hidden.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 25/11/2008, 09:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recargar pagina sin perder datos en un input type"file"

En efecto es una buena forma, la que te propone the_web_saint. Recuerda que por seguridad, no se pueden predefinir los campos del tipo file.

Saludos.
  #4 (permalink)  
Antiguo 25/11/2008, 10:08
 
Fecha de Ingreso: febrero-2005
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recargar pagina sin perder datos en un input type"file"

Muchas gracias por las rapidas respuestas... Una consulta mas.. un input hidden puede guardar los datos como un vector?? porque yo necesito los datos de
$_FILE["foto"]["tamano"]
$_FILE["foto"]["nombre_temporal"], etc
  #5 (permalink)  
Antiguo 25/11/2008, 10:16
Avatar de danielrivas  
Fecha de Ingreso: noviembre-2007
Ubicación: Preprocessing
Mensajes: 275
Antigüedad: 16 años, 5 meses
Puntos: 6
Respuesta: Recargar pagina sin perder datos en un input type"file"

como un vector??? te refieres a un array?
  #6 (permalink)  
Antiguo 25/11/2008, 10:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Recargar pagina sin perder datos en un input type"file"

Si guardas el nombre temporal, a la hora de reenviar el script ya no va a existir la variable ya que los archivos temporales se borran al terminar de ejecutarse la pagina.

Saludos.
  #7 (permalink)  
Antiguo 25/11/2008, 13:29
 
Fecha de Ingreso: febrero-2005
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recargar pagina sin perder datos en un input type"file"

Cita:
Iniciado por danielrivas Ver Mensaje
como un vector??? te refieres a un array?
sisisi lo siento, quise decir un array.....

bueno, entonces si trato de guardar en un input tipo hide lo que se encuentre en $FILE["foto"][nombre_archivo_temporal], igual no me va a servir despues de que se haya recargado la pagina?

tal vez existe alguna manera de conocer el path completo del archivo que el usuario quiere subir ?

o sera que mi problema no tiene solucion? y tengo que obligarle al usuario que vuelva a presionarl el boton examinar y suba nuevamente el archivo?

Muchas gracias a todos por sus respuestas!!!
  #8 (permalink)  
Antiguo 25/11/2008, 13:42
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar pagina sin perder datos en un input type"file"

Cita:
Iniciado por the_web_saint Ver Mensaje
Podrías asignar el valor del input file a un campo hidden, y mostrar un mensaje debajo que ha sido cargado, si este desea cambiar el file solo selecciona otro, pero sino lo hace se carga el valor del input hidden.

Saludos
No comprendí...o sea, envíar el path no te sirve de nada (No es lo mismo $_POST['file'] que $_FILES['file'])...o entendí cualquier cosa?


Y como dice GatorV, no se puede por seguridad manipular un value de un type file.

Lo que podes hacer es, asignar un ID de session al inicializar la pagina (la lógica que usa un captcha), en el onchange del input file hacer el upload del file relacionándolo con ese id por medio de AJAX (hay métodos especiales para ésto). Al enviar o recargar la pagina buscas archivos en tu dir de uploads relacionados a ese ID (el cual tendrás en una session y regenerarás solo si no existe). Dejarás de hacer el upload ya que se hace al seleccionar el archivo y no al enviar el form.
A mi parecer es muuucho problema para algo que aún no comprendo el porque...podrás contarnos porque querrías tener este value por ahí te orientemos con una solución acorde a tu problema.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 25/11/2008, 22:12
 
Fecha de Ingreso: febrero-2005
Mensajes: 8
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Recargar pagina sin perder datos en un input type"file"

Muchas gracias a todos... voy a investigar un poco e intentar con lo de ajax...

nicolaspar, mi problema es que tengo un formulario un poco extenso, en el cual los usuasrios pueden cometer muchos tipos de errores de ingreso. Luego de que hacen el submit, y en caso de que existan uno o mas errores, se les mostrará un mensaje con todos los errores cometidos,pero los campos tendran los valores que los usuarios ingresaron previamente. El único campo con el que no he podido hacer esto, es con el input tipo file, asi que el usuario tendría que volver a escoger el archivo que va a subir... esto es lo que quiero evitar

Como dije voy a intentar con algo de Ajax, pero si alguien tiene otra solucion, le agradeceria mucho....

Gracias por sus respuestas!
  #10 (permalink)  
Antiguo 26/11/2008, 06:56
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Recargar pagina sin perder datos en un input type"file"

Personalmente hago lo siguiente:

1- Valido todo por JS, y de necesitar consultar a la db (ej, que el email o username no este en la db) uso ajax en el mismo proceso de javascript.

2- Y luego vuelvo a validar todo del lado del php, como estás haciendo vos. Pero, quienes llegan a este punto es porque algo raro están haciendo, así que si vuelven y tienen un input file sin su value no me preocupa, que lo vuelvan a cargar...como te digo, no son usuarios normales, algo raro están haciendo y si no están rompiendo o intentando romper anda cerca. Lo mismo con campos passwords, que vuelvan a llenarlos...

3- Si aún así el cliente te exige que pongas ésto que pedís, una posible solución es la que te doy, pero tendrás algunos problemitas en el medio (si lo archivos son pesados por ejemplo)...

Cualquier cosa que necesites preguntanos.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 06:49.