Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/10/2012, 18:58
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Recargar página tras envío exitoso de formulario.

Si, es medio confuso sin visualizar el conjunto, voy a ver si lo simplifico

en una página tenés un botón o un form con un submit que tiene como destino una script php, la cual genera un csv, para forzar la descarga supongo que harás algo así

<?php
header('Content-Type: application/octet-stream');
echo "A,B,C";
?>

El usuario descargaria un archivo conteniendo
A,B,C

Obviamente tu php no puede tener impreso nada más que eso.
Vos entonces querés algún tipo de aviso para indicar que el csv se generó (que lo descargue ó no ya dependerá de el)

Eso de recargar el index y la sesion no lo tengo muy claro. Pero para lo del mensaje, sería necesario un paso intermedio, guardando el archivo.
Hay una condición para todo esto , que estés usando Apache (bueno puede que sea opcional pero habría que hacer algun cambio), en todo caso en este ejemplo si
Podés hacer toda la operación con Ajax, pero no me parece que se justificaría, usando un iframe oculto se puede lograr

Primero como vamos a guardar el csv, en la carpeta que los guardes, un .htaccess para forzar l descarga

.htaccess
Código Apache:
Ver original
  1. AddType application/octet-stream .csv

perfil.php (paso algo con get solo para la demostración)
Código PHP:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>titulo</title>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  7.  
  8. <script type="text/javascript">
  9. //<![CDATA[
  10. function mensaje(texto){
  11. document.getElementById('mensaje').innerHTML = texto;
  12. }
  13. //]]>
  14. </script>
  15. </head>
  16. <body>
  17. <a href="genera.php?perfil=X,Z,Y" target="genera">Descargar Perfil</a>
  18. <div id="mensaje">
  19. </div>
  20. <iframe src="about:blank" name="genera" id="genera" width="0" height="0" frameborder="0"></iframe>
  21. </body>
  22. </html>


y ahora el genera.php

Código PHP:
Ver original
  1. <?php
  2. $datos = $_GET['perfil'];
  3. $crearcvs = file_put_contents("temp.csv",$datos,LOCK_EX);
  4. if($crearcvs !== false){
  5.     ?>
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. /* script */
  9. parent.mensaje('Se generó el archivo');
  10. window.location.href='temp.csv';
  11. //]]>
  12. </script>
  13.  
  14. <?php
  15. }else{
  16. ?>
  17. <script type="text/javascript">
  18. //<![CDATA[
  19. /* script */
  20. parent.mensaje('error');
  21. //]]>
  22. </script>
  23. <?php
  24. }
  25.  
  26. ?>

La carpeta que guarde los csv tendría que tener permisos de escritura.
Bueno, esa es la idea general, tendrías de seguro que adaptar cosas, como el nombre del archivo generado, la eleiminación de los archivos temporales, etc


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.