Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2006, 10h22   #1
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Par défaut Enregistrement "direct" d'un export (Excel)

Bonjour,

Voilà j'ai tenté un reverse engineering sur l'export de phpMyAdmin, j'ai récupéré pas mal d'informations pour arriver à ce que je veux. Mais je bloque et les tuto qu'on trouve ici, enfin celui que j'ai vu, n'explique pas ce problème précis.

J'aimerais qu'une fois mon formulaire rempli et soumi, la navigateur me propose d'enregistrer mon excel...
Je précise donc que j'arrive déjà à faire du MySQL vers du Excel, ce qui me manque c'est l'enregistrement directement proposé après la soumission du formulaire. Comment fait-on ça ?

Merci par avance.
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h47   #2
Rédacteur
 
Avatar de BrYs
 
Inscription : octobre 2002
Messages : 2 016
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2002
Messages : 2 016
Points : 2 038
Points : 2 038
C'est juste un problème de header ça !

Code :
1
2
3
4
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=le_nom_de_ton_fichier.xls");
header("Pragma: ");
header("Cache-Control: ");
un truc du style doit marcher
BrYs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h53   #3
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Merci BrYs mias j'ai déjà ça

Code :
1
2
3
4
5
header('Content-Type: application/vnd.ms-excel');
header('Expires: Thu, 12 Oct 2006 10:20:12 GMT');
header('Content-Disposition: attachment; filename="sms_transactions.xls"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
l'algo ressemblerait vaguement à ça :

mon formulaire html

si (formulaire soumi) {
proposer l'enregistrement
}


Donc on voit tout de suite un problème, y'a déjà du html dans cette page, donc pour la fonction header... je sais pas...
Dans phpMyAdmin, y'a bien un formulaire (on choisit l'option "transmettre") et quand on clique sur "exporter" ben hop le navigateur il propose d'enregistrer le fichier en local...
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h56   #4
Rédacteur
 
Avatar de BrYs
 
Inscription : octobre 2002
Messages : 2 016
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2002
Messages : 2 016
Points : 2 038
Points : 2 038
Citation:
Envoyé par Huntress
Merci BrYs mias j'ai déjà ça

Code :
1
2
3
4
5
header('Content-Type: application/vnd.ms-excel');
header('Expires: Thu, 12 Oct 2006 10:20:12 GMT');
header('Content-Disposition: attachment; filename="sms_transactions.xls"');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
l'algo ressemblerait vaguement à ça :

mon formulaire html

si (formulaire soumi) {
proposer l'enregistrement
}


Donc on voit tout de suite un problème, y'a déjà du html dans cette page, donc pour la fonction header... je sais pas...
Dans phpMyAdmin, y'a bien un formulaire (on choisit l'option "transmettre") et quand on clique sur "exporter" ben hop le navigateur il propose d'enregistrer le fichier en local...
et pourquoi tu fais pas ça :


si (formulaire soumi) {
proposer l'enregistrement
}

mon formulaire html


BrYs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 11h08   #5
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Hum hum je devais être dans mon 1/4 d'heure débile
Ca ne me paraissait pas évident qu'il m'ouvrirait ma boite de téléchargement.

Merci BrYs
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 12h54   #6
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Bon c'est plus qu' 1/4 heure
En fait ça marche toujours pas.

Donc je vais expliquer ce que je fais (ce qui est donc "ce qu'il ne faut pas faire")
Une fois le formulaire soumis
je fais ma requête,
je mets le résultat sous forme de tableau HTML
je le stocke dans une variable,
et après je fais un fwrite dessus,
bien sûr je fais un fopen et toutes les vérifs d'usage,
je n'ai pas de réelles erreurs.

Le soucis c'est qu'au lieu de mettre ce que je lui dis de mettre dans mon fichier il me met ma page HTML avec mon formulaire...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
if(isset($_POST['exporter'])) {
	/*
	echo '<pre>';
	print_r($_POST);
	echo '</pre>';
	*/
	if(
		!empty($_POST['deb_jour']) && !empty($_POST['deb_mois']) && !empty($_POST['deb_annee']) &&
		!empty($_POST['fin_jour']) && !empty($_POST['fin_mois']) && !empty($_POST['fin_annee'])
	) {
 
		if(
			is_numeric($_POST['deb_jour']) && is_numeric($_POST['deb_mois']) && is_numeric($_POST['deb_annee']) &&
			is_numeric($_POST['fin_jour']) && is_numeric($_POST['fin_mois']) && is_numeric($_POST['fin_annee'])
		) {
 
			if(
				mktime(0, 0, 0, $_POST['deb_mois'], $_POST['deb_jour'], $_POST['deb_annee']) <= 
				mktime(0, 0, 0, $_POST['fin_mois'], $_POST['fin_jour'], $_POST['fin_annee'])
			) {
 
 
				$date_debut = $_POST['deb_annee'].'-'.sur2car($_POST['deb_mois']).'-'.sur2car($_POST['deb_jour']);
				$date_fin   = $_POST['fin_annee'].'-'.sur2car($_POST['fin_mois']).'-'.sur2car($_POST['fin_jour']);
 
				$requete = 'SELECT * FROM sms_transactions WHERE date_trans>="'.$date_debut.' 00:00:00" AND date_trans<="'.$date_fin.' 23:59:59"';
 
				if($resultat = mysql_query($requete)) {
 
					$fichier = 'sms_'.date('Ymd').'.xls';
					if(file_exists($fichier)) unlink($fichier);
 
					if($resource = fopen($fichier, 'x+')) {
 
						$sortie = '
							<table border="1">
								<tr>
				<th>Id transaction</th>
...
									<th>Prix TTC</th>
								</tr>
						';
						while($enreg = mysql_fetch_assoc($resultat)) {
							$sortie .= '
								<tr>
															<td>'.$enreg['id_trans'].'</td>
...
			<td>'.$enreg['prix_ttc'].'</td>
								</tr>
							';
						}
 
						$sortie .= '</table>';
 
						header('Content-Type: application/vnd.ms-excel');
						header('Expires: Thu, 12 Oct 2006 10:20:12 GMT');
						header('Content-Disposition: attachment; filename="'.$fichier.'"');
						header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
						header('Pragma: public');
 
						fwrite($resource, $sortie);
					}
					else
						$erreur_fopen = 1;
				}
				else
					$erreur_sql = mysql_error();
			}
			else
				$erreur_coherence = 1;
		}
		else
			$erreur_format = 1;
	}
	else 
		$erreur_completude = 1;
}
Je sais pas si je suis débile aujourd'hui mais je voudrais juste qu'il me mette mon résultat dans mon fichier xls

BrYs... ? Tu as une idée de ce qui va pas... ?
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 14h23   #7
Rédacteur
 
Avatar de BrYs
 
Inscription : octobre 2002
Messages : 2 016
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2002
Messages : 2 016
Points : 2 038
Points : 2 038
J'avoue ne pas du tout avoir tester ton code, mais tu as tenté de mettre un exit après tes header ?
BrYs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 14h44   #8
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Nan ça marche pas avec un exit derrière mes header, maintenant mon fichier xls est vide... J'ai tenté de simplifier mon code en mettant "coucou" dans $sorties histoire de... mais rien n'y fait...
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 14h48   #9
Rédacteur
 
Avatar de BrYs
 
Inscription : octobre 2002
Messages : 2 016
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2002
Messages : 2 016
Points : 2 038
Points : 2 038
Ce qu'il faut c'est arreter de traiter ton fichier pour ole formulaire ne soit pas interpreté donc place bien ton exit et ça marchera.
BrYs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 17h25   #10
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Voici mon code simplifié... cette fois quand on choisit de directement ouvrir le fichier, excel "dit" qu'il n'arrive pas ouvrir le fichier, et si on regarde le fichier qui est créé sur le serveur celui-ci est valide. Et si on choisit d'enregistrer le fichier en local, là le fichier à l'air réellement corrompu excel ne peut pas l'ouvrir.

Je n'ai plus le problème qui fait qu'il écrit le formulaire, grâce au exit(), ce que je comprends moins c'est pourquoi tout à l'heure ça ne marchait pas... mystère !



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
 
if(isset($_POST['exporter'])) {
 
	$fichier = 'sms_'.date('Ymd').'.xls';
 
	if(file_exists($fichier)) unlink($fichier);
 
	if($resource = fopen($fichier, 'x+')) {	
 
		header('Content-Type: application/vnd.ms-excel');
		header('Expires: Thu, 12 Oct 2006 10:20:12 GMT');
		header('Content-Disposition: attachment; filename="'.$fichier.'"');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
 
		fwrite($resource, '<table border="1"><tr><td>coucou</td></tr></table>');
		fclose($resource);
 
		exit();
	}
}
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
	<title></title>
</head>
<body>
	<form method="post" action="">
		<input name="exporter" type="submit" />
	</form>
</body>
</html>
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 09h59   #11
Membre éclairé
 
Avatar de Huntress
 
Inscription : août 2004
Messages : 454
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 454
Points : 339
Points : 339
Ayé ai trouvé ce qui n'allait pas... en fait fallait juste ne pas écrire dans la page, juste faire un echo.

Pfiouuu c'était dur
__________________

Règle n°1 du forum francophone : Parler le français...
Pas de question technique par MP, le forum est fait pour çà, merci.
Huntress est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h34.


 
 
 
 
Partenaires

Hébergement Web