Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1378 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Redirection après un "enregistrer sous..." en PHP ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Redirection après un "enregistrer sous..." en PHP ?

n°1412028
jordel
Elven Powaaa
Posté le 24-07-2006 à 09:28:54  profilanswer
 

Bonjour, :jap:  
 
J'ai créé un script qui permet de générer un fichier Excel à partir de ma base de données... et je souhaiterai dans la foulée proposer d'enregistrer le fichier sur le poste client.
 
Je n'ai pas réussi à réaliser ceci proprement à savoir :
Ma page listing.php -> liste les membres contenus dans ma base, un lien "générer au format Excel" permet de générer le fichier Excel sur le serveur.
Si je clique dessus, ce lien est remplacé sur la page par "Enregistrer le fichier générer". Il faut alors cliquer dessus pour enregistrer le fichier sous...
 
Mais comble du comble, je n'arrive pas à reloader ma page en l'état d'origine !
Pour enregistrer mon fichier, je passe par des header("blablabla" )  ;)  

Citation :

if (isset($_SESSION["dlfilename"]) && $_SESSION["dlfilename"]!="" )
{
    $filename = $_SESSION["dlfilename"];    
    header("Pragma: public" );
    header("Expires: 0" );
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    header("Cache-Control: private",false);
    header("Content-Type: application/force-download" );
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    header("Content-Transfer-Encoding: binary" );
    header("Content-Length: ".@filesize($filename));
    set_time_limit(0);
    @readfile("$filename" ) or die("File not found." );
     
    unset($_SESSION["dlfilename"]);
 
    // ------------------------------------------
    // Est il possible de faire une redirection ici ???
    // ------------------------------------------
 
}


 
Je souhaiterai avoir votre expertise pour que lors du click sur "générer au format Excel" je puisse Enregistrer sous... directement !!!
 
Merci d'avance. :)


Message édité par jordel le 24-07-2006 à 11:39:09
mood
Publicité
Posté le 24-07-2006 à 09:28:54  profilanswer
 

n°1412124
flo850
moi je
Posté le 24-07-2006 à 11:05:57  profilanswer
 

a la place de  
@readfile("$filename" ) or die("File not found." );  
 
tu mets ta generation de fichier  
 
comme ca pas besoin de passer par un fichier temporaire : tu peux telecharfger les données tout de suite

n°1412167
jordel
Elven Powaaa
Posté le 24-07-2006 à 11:38:18  profilanswer
 

Bonjour et merci pour ta réponse,
 
Donc... je fais appelle directement à ma fonction de création du fichier Excel ?
 
Mais comment va t il se télécharger directement sur le poste client ??

n°1412172
flo850
moi je
Posté le 24-07-2006 à 11:43:31  profilanswer
 

tu cree une page "genererExcel.php" qui contient :  

Code :
  1. <?
  2.   $filename = $_SESSION["dlfilename"];   
  3.      generation_du_fichier_excel($filename);
  4.     header("Pragma: public" );
  5.     header("Expires: 0" );
  6.     header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  7.     header("Cache-Control: private",false);
  8.     header("Content-Type: application/force-download" );
  9.     header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
  10.     header("Content-Transfer-Encoding: binary" );
  11.     header("Content-Length: ".@filesize($filename));
  12.     @readfile("$filename" ) or die("File not found." );
  13.    
  14.     unset($_SESSION["dlfilename"]);
  15. ?>


 
et tu utilise un lien du genre :
< href="./genereFichierExl.php"> cliquez ici pour enregistrer le fichier excel</a>
 
tu utilise quoi pour generer le fichier excel ? parceque tu peux peut etre te passer de l'etape 'ecriture sur le disque'


Message édité par flo850 le 24-07-2006 à 11:43:45
n°1412182
dwogsi
Défaillance cérébrale...
Posté le 24-07-2006 à 11:50:48  profilanswer
 

Sinon il reste toujours la solution du :
header("Refresh: XX; URL=fichierExcel.xls" );

n°1412188
jordel
Elven Powaaa
Posté le 24-07-2006 à 11:54:41  profilanswer
 

Merci encore... :)
 
Pour générer le fichier Excel, j'utilise une fonction assez barbare que j'ai trouvé sur le net...

Code :
  1. /* *******************************************
  2.             FONCTION save_to_excel2
  3. ******************************************** */
  4. function save_to_excel2($sql_excel,$strPath)
  5. {
  6. $db_link = mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD) or die("Connexion impossible" );
  7. $requete_excel=mysql_db_query(DB_DATABASE,$sql_excel,$db_link) or die('Erreur SQL : requete_excel !<br>'.mysql_error());
  8. //starting excel
  9. $excel = new COM("excel.application" ) or die("Unable to instanciate excel" );
  10. //print "Loaded excel, version {$excel->Version}\n";
  11. //bring it to front
  12. #$excel->Visible = 1;//NOT
  13. //dont want alerts ... run silent
  14. $excel->DisplayAlerts = 0;
  15. //create a new workbook
  16. $wkb = $excel->Workbooks->Add();
  17. //select the default sheet
  18. $sheet=$wkb->Worksheets(1);
  19. //make it the active sheet
  20. $sheet->activate;
  21. $row=1;
  22. $col=1;
  23. $sheet->activate;
  24. $cell=$sheet->Cells($row,$col);
  25. $cell->Activate;
  26. $cell->value = 'ColA';
  27. $col++;
  28. $cell=$sheet->Cells($row,$col);
  29. $cell->Activate;
  30. $cell->value = 'ColB';
  31. $col++;
  32. $cell=$sheet->Cells($row,$col);
  33. $cell->Activate;
  34. $cell->value = 'ColC';
  35. $col++;
  36. $cell=$sheet->Cells($row,$col);
  37. $cell->Activate;
  38. $cell->value = 'ColD';
  39. $col++;
  40. $cell=$sheet->Cells($row,$col);
  41. $cell->Activate;
  42. $cell->value = 'ColE';
  43. $col++;
  44. $cell=$sheet->Cells($row,$col);
  45. $cell->Activate;
  46. $cell->value = 'ColF';
  47. $col++;
  48. $cell=$sheet->Cells($row,$col);
  49. $cell->Activate;
  50. $cell->value = 'ColG';
  51. $col++;
  52. $cell=$sheet->Cells($row,$col);
  53. $cell->Activate;
  54. $cell->value = 'ColH';
  55. $row++;
  56. while ($ligne_excel=mysql_fetch_object($requete_excel))
  57. {
  58.     $identite=$ligne_excel->nom;
  59.     $adresse=$ligne_excel->adresse;
  60.     $phone=$ligne_excel->telephone;
  61.     $email=$ligne_excel->courriel;
  62.     $login=$ligne_excel->identifiant;
  63.     $balance=$ligne_excel->credit;
  64.     $id=$ligne_excel->numero_id;
  65.     $activation=$ligne_excel->date_activ;
  66.     $col=1;
  67.     $cell=$sheet->Cells($row,$col);
  68.     $cell->Activate;
  69.     $cell->value = $identite;
  70.     $col++;
  71.     $cell=$sheet->Cells($row,$col);
  72.     $cell->Activate;
  73.     $cell->value = $adresse;
  74.     $col++;
  75.     $cell=$sheet->Cells($row,$col);
  76.     $cell->Activate;
  77.     $cell->value = $phone;
  78.     $col++;
  79.     $cell=$sheet->Cells($row,$col);
  80.     $cell->Activate;
  81.     $cell->value = $email;
  82.     $col++;
  83.     $cell=$sheet->Cells($row,$col);
  84.     $cell->Activate;
  85.     $cell->value = $login;
  86.     $col++;
  87.     $cell=$sheet->Cells($row,$col);
  88.     $cell->Activate;
  89.     $cell->value = $id;
  90.     $col++;
  91.     $cell=$sheet->Cells($row,$col);
  92.     $cell->Activate;
  93.     $cell->value = $balance;
  94.     $col++;
  95.     $cell=$sheet->Cells($row,$col);
  96.     $cell->Activate;
  97.     $cell->value = $activation;
  98.     $row++;
  99. }
  100. // save the new file
  101. if (file_exists($strPath)) {unlink($strPath);}
  102. $wkb->SaveAs($strPath);
  103. //close the book
  104. $wkb->Close(false);
  105. $excel->Workbooks->Close();
  106. //free up the RAM
  107. unset($sheet);
  108. //closing excel
  109. $excel->Quit();
  110. //free the object
  111. $excel = null;
  112. }


 
Voili, voilou :)

n°1412414
rufo
Pas me confondre avec Lycos!
Posté le 24-07-2006 à 16:09:11  profilanswer
 

attention, c'est du COM! Sur un serveur en production, tu risques d'avoir un pb d'alloc de mémoire au bout d'une certain temps car $excel->Quit() ne fonctionne pas bien. Le processus excel reste toujours en mémoire.
Tu devrais voir du côté de la lib sous GPL "Spreadsheet_Excel_Writer" : http://pear.php.net/package/Spreadsheet_Excel_Writer

n°1412429
jordel
Elven Powaaa
Posté le 24-07-2006 à 16:23:45  profilanswer
 

Merci beaucoup... je vais looké cela.
 
Y'a t il une fonction qui permette le download du fichier sur le poste client ???
 
Car là je lutte vraiment pour faire fonctionner cela correctement... Je m'explique...
 
Comme je n'ai pas réussi à générer + downloader le fichier directement, je passe en 2 étapes comme indiqué ci-dessus... pas très pratique.
Et lors de l'étape du clic sur 'Enregistrer le fichier'... il ne se passe rien !!! Ce n'est qu'au clic suivant que le processus du header se déclenche et me demande d'enregistrer le fichier !!!
 
Je comprends pas trop là !!!
 
Si z'avez des ampoules pour m'apporter de la lumière, n'hésitez pas ;)

n°1412522
jordel
Elven Powaaa
Posté le 24-07-2006 à 17:36:26  profilanswer
 

Bon je viens de mettre en place ma meme fonction de génération de fichier mais via Spreadsheet_Excel_Writer et PEAR.
 
Mais j'ai toujours le meme souci pour ce qui est de l'enregistrement du fichier !!! :(

n°1412534
rufo
Pas me confondre avec Lycos!
Posté le 24-07-2006 à 17:44:33  profilanswer
 

jordel a écrit :

Bon je viens de mettre en place ma meme fonction de génération de fichier mais via Spreadsheet_Excel_Writer et PEAR.
 
Mais j'ai toujours le meme souci pour ce qui est de l'enregistrement du fichier !!! :(


 
mais t'auras plus le pb de mauvaise désalloc mémoire :)

mood
Publicité
Posté le 24-07-2006 à 17:44:33  profilanswer
 

n°1412537
jordel
Elven Powaaa
Posté le 24-07-2006 à 17:46:16  profilanswer
 

:)
 
Merci... c'est vrai que meme au niveau du temps de chargement du fichier... c'est plus rapide !!! :)
 
Cependant... j'ai toujours ce fu*ù$^# probleme avec la sauvegarde du fichier ! :(

n°1412883
jordel
Elven Powaaa
Posté le 25-07-2006 à 11:16:34  profilanswer
 

Bonjour,
 
Bon j'arrive bien à enregistrer mon fichier Excel comme dit ci-dessus...
 
Mais !!! ma page ne se recharge pas derrière...
Normal me direz vous, car la génération et l'enregistrement du fichier se font dans le header.
 
Mais alors comment faire pour charger sa page et lancer l'enregistrement sans avoir de Warning sur l'utilisation des headers ???
 
Merci d'avance...

n°1413046
rufo
Pas me confondre avec Lycos!
Posté le 25-07-2006 à 14:07:53  profilanswer
 

y'a peut-être plus simple, mais sinon, une fois la page qui génère le fichier chargée, tu peux tenter un redirection en javascript vers celle qui lance le téléchargement...:/

n°1413072
dwogsi
Défaillance cérébrale...
Posté le 25-07-2006 à 14:31:50  profilanswer
 

Ou avant la génération du fichier mettre :
header("Refresh: 1; URL=fleFichier" );

n°1413214
jordel
Elven Powaaa
Posté le 25-07-2006 à 16:32:18  profilanswer
 

Merci pour ces conseils... je teste et reviens vers vous ;)

n°1413252
jordel
Elven Powaaa
Posté le 25-07-2006 à 17:01:01  profilanswer
 

Bon... ça redirige pas !!! snifff...
 
Le problème vient du fait que la fonction doit se faire en header... sinon ça passerait tout seul !!! Dommage !!!
 
Hop un ptit schéma :
http://img125.imageshack.us/img125/4617/schematl5.jpg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Redirection après un "enregistrer sous..." en PHP ?

 

Sujets relatifs
PHP Affichage sur plusieurs pagesPHP Separation
[PHP] Upload et sécurité : renommer le fichier suffit ?PHP/MSSQL: réaffichage contenu tableau sur page PHP
PHP 5 ODBCtrouver l'adresse de UPLOAD_TMP_DIR via PHP
Redirection d'url[MySQL/PHP] problème d'encodage à l'insertion via formulaire
[PHP] Outil de mise à jour du script[PHP/CSS] Modifier un style
Plus de sujets relatifs à : Redirection après un "enregistrer sous..." en PHP ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR