Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 18/05/2011, 21h52   #1
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
Par défaut appel du fonction sur un onclick en PHP

Bonjour à tous,

je suis un grand newbi du php, du javascript.
J'ai repris un projet (un atlas-on peut zoomer selectionner se deplacer ajouter des calques ect...) qui comprend plusieurs fichiers php, et j'ai appris le php en les lisant donc je pense pas que je sois très très bon!^^

En fait j'aimerai pouvoir enregistrer des images lorsque je clique sur un bouton.
Ça fait une semaine que je cherche et j'ai trouvé une fonction qui me permet de choisir l'emplacement de sauvegarde (ce qui est parfait!) mais (il y a toujours un mais) puisqu'elle fait appel à des headers dans tous les sens, elle me bloque un peu tous mes 'outils' (zoom...) sur ma page principale. Donc je me suis dit que je ferai appel à cette fonction sur une autre page.
J'aimerai que l'utilisateur aie juste à cliquer sur un bouton et que ça lance cette fonction php (ci-dessous) mais (encore!) le onclick prend des fonctions javascript...et là je rebloque...
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
 
 
<?
 
/*
Fonction pour enregistrer un fichier sur le disque dur client
trouvée sur le manual de php, date du 31/01/11
*/
function downloadFile( $fullPath ){
 
  // Must be fresh start
  if( headers_sent() )
    die('Headers Sent');
 
  // Required for some browsers
  if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');
 
  // File Exists?
  if( file_exists($fullPath) ){
 
    // Parse Info / Get Extension
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
 
    // Determine Content Type
    switch ($ext) {
      case "png": $ctype="image/png"; break;
      case "jpg": $ctype="image/jpg"; break;
	  case "tif": $ctype="application/force-download"; break;
      default: $ctype="application/force-download";
    }
 
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: $ctype");
    header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$fsize);
    ob_clean();
    flush();
    readfile( $fullPath );
 
  } else
    die('File Not Found');
 
} 
 
if (substr($_GET['image'],-3)=="tif") {
	$image_urle=$_GET['image'];
	$image_urleE=explode('/',$image_urle);   //pour recuperer le chemin où se trouve le fichier
	$file_path=$image_urleE[2]."/save.tif";  //construction du chemin
	echo "<script langage=javascript>alert('export tiff ".$image_urle."')</script>";
	echo "<script langage=javascript>alert('export tiff /".$file_path."')</script>";
	echo "<br><br><input type=button value='Enregistrer la carte en format Geotiff' onclick=downloadFile(".$file_path.");>";
}
else {
	echo "<img src='".$_GET['image']."'>";
	$image_urleE=explode('/',$image_urle);           //pour recuperer le chemin où se trouve le fichier
	$file_path=$image_urleE[2]."/".$image_urleE[3];  //construction du chemin
	echo "<script langage=javascript>alert('export tiff /".$file_path."')</script>";
	echo "<br><br><input type=button value='Enregistrer image' onclick=downloadFile(".$file_path.");>";
	echo "<script langage=javascript>alert('export png')</script>";
	echo "<br><font>Pour enregistrer l'image, faites un clic droit sur l'image<br>puis enregister sous...</font>";
}
 
echo "<br><br><input type=button value='Retour Atlas' onclick=document.location='main.php'>";
?>
en fait je sais pas si c'est parce que onclick attend une fonction JS ou si c'est parce que je l'ai écrite comme ça (à l'arrache dans la page)

je suis ouvert à tous conseils et toutes critiques (pas trop trop méchante quand même )

Merci
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 23h08   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux faire un fichier php chargé de distribuer l'image.
Tu lui passes par un lien HTML les paramètres et il fait ton traitement actuellement dans la fonction downloadFile.

Attention, quelque soit la méthode, il est impératif de valider le fichier qui a été demandé en téléchargement.
Dans ton script actuel, le script ne filtre rien et l'utilisateur peut donc voir n'importe quel fichier du serveur pour lequel le serveur web a des droits.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 16h17   #3
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
Merci pour ta réponse.

Donc si j'ai bien compris, au lieu de faire un bouton, je fais une sorte de lien qui appelle ma fonction donwloadFile c'est ça?

du style:
Code :
echo "<a href='downloadFile(".$file_path.")'>Enregistrer l'image en Geotiff</a>";

Sinon pour sécuriser le download, si je change le default du case ça suffit non?

Encore merci

****
EDIT
****
Je pense m'être un peu fourvoyer parce que je viens de faire le test et ça marche pas trop trop (enfin pas du tout ^^)
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 20h03   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Non le lien est vers un fichier .php qui contient la même chose que ce que fait ta fonction downloadFile
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 21h46   #5
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
oui je m'en suis aperçu ^^.

En fait, imaginons je fais le nécessaire pour créer le fichier puis je fais un

Code :
header("location: export.php");
qui me fait tout le blabla non? le souci c'est que ça ça marchait ce matin mais là niet, impossible de diriger mon client vers cette page...
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 21h58   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Non, ce n'est pas du tout ce que j'ai expliqué.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h04   #7
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1


ben j'ai rien compris alors, désolé.
Moi de ce que j'ai compris de ce que tu m'as dit, c'est que je redirige mon client vers une page qui fait ma fonction dowloadFile...
mais la, j'arrive même plus a rediriger ma page...
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h10   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je n'ai pas parlé de redirection mais d'un lien.

Je veux toto.jpg :
http://www.site.com/download.php?file=toto.jpg
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h26   #9
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
je dois mal m'exprimer mais c'est ce que j'ai essayé de faire (surement mal).

En fait je suis obligé de rediriger mon client vers une nouvelle page parce que la page principale de mon site est une carte avec différents outils (boutons etc...) autour.
Du coup, pour la sauvegarde je voyais quelque chose du style que lorsque tu cliques sur le bouton qui va bien, cela t'envoie vers une autre page qui elle t'affiche le lien...

Est ce que tu vois ce que je veux dire? Je pense que c'est à cause de çà que je me suis emmêle entre lien et redirection... désolé.

Donc si je suis mon idée: lorsque le client clique sur le bouton je le redirige en faisant un
Code :
header("location: export.php");
puis sur cette page export je crée un lien qui me lance la fonction downloadFile.

Est ce qu on est d'accord ou est ce que je peux sauter par ma fenêtre (5e étage^^) ?

Merci pour ton temps
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h32   #10
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
encore une fois, je n'ai jamais parlé de redirection, je t'ai dit d'utiliser un lien.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h50   #11
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
Je suis d'accord mais je ne peux pas utiliser de lien sur ma page principale... Donc je redirige pour juste afficher un lien...
Je suis d,accord que c est pas tres optimal mais ça évite les effets de bord bizarre que les headers provoquent...
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h52   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
qu'est ce qui empêche d'afficher un lien sur la page ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 22h54   #13
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
En fait c'est un atlas en ligne, j'utilise pas que du php, j'utilise aussi du php mapscript.

http://nival.ete.inrs.ca/Atlas/main.php

pour te donner une idée de la page principale.
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 23h00   #14
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
et ca empeche de faire un lien ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2011, 16h03   #15
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
Ben soit je dois pas comprendre le concept de lien alors...

Parce que en fait, si tu as remarqué, l'utilisateur peut exporter sa map en deux formats: PNG (plus leger) et GEOTIFF (plus lourd mais possède le géoréférencement de la map).

À la base j'ai récupéré le projet, il y a plusieurs fichiers php, j'essaie de comprendre l'architecture que le concepteur à voulu mettre en place, et je pense qu'on peut voir comme ça:

Action User --> Traitements --> Fonctions --> Save Map ---> Affichage de la Map --v
^------------------------------------------------------------------------------------------------------


Donc du coup, j'essaie de faire la sauvegarde dans les fonctions pour respecter cette architecture.
Le problème c'est que quand j'ai essayé de mettre (dans le fichier fonction) ma fonction downloadFile avec tous les headers, elle reste active encore derrière donc si tu sauvegardes puis clique pour rajouter un calque elle se relance...je vais essayer de la désactiver alors...


****
EDIT
****
Je viens de tester en mettant mon appel de downloadFile dans ma fonction qui s'exécute lors du clique sur le bouton qui va bien. Cela marche, la fonction se lance, la fenêtre apparait, la sauvegarde se fait nikel, mais si jamais je désire ajouter un autre calque, cela bug. Cela reouvre une nouvelle fenetre d'enregistrement pour main.php des fois ou pour autre chose.
je pense que cela vient du "default" de mon switch dans downloadFile.
Cependant si je fais ça dans ma fonction

Code :
1
2
3
 
	downloadFile($file_path);
	echo "<script langage=javascript>alert('in fn_outils après download!')</script>";
et ben la fenêtre alert ne s'affiche pas...du coup je peux pas lancer de refresh qui règle le problème (la mettre à la fin de ma fonction downloadFile ne change rien)

Merci de prendre le temps de me répondre, je suppose que cela doit te sembler débile...
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 17h56   #16
Invité de passage
 
Homme
Stagiaire
Inscription : mai 2009
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : Stagiaire

Informations forums :
Inscription : mai 2009
Messages : 22
Points : 1
Points : 1
Bonjour,

J'ai beau réfléchir à essayer d'utiliser un lien pour effectuer le traitement d'enregistrement, le problème est que je dois faire une manipulation d'une variable avant et cette variable je ne peux pas la faire passer d'une page à une autre...(c'est une variable mapObj de Mapserver)
Si je peux pas faire cette sauvegarde je suis vraiment bloqué pour la suite de mon projet...
Je suis désolé si je t'ai énervé sabotage, mais je suis vraiment novice en php/javascript/Mapserver.
Merci et bonne soirée
BriocheNC est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h31.


 
 
 
 
Partenaires

Hébergement Web