IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

appel du fonction sur un onclick en PHP


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non le lien est vers un fichier .php qui contient la même chose que ce que fait ta fonction downloadFile

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non, ce n'est pas du tout ce que j'ai expliqué.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut


    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...

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je n'ai pas parlé de redirection mais d'un lien.

    Je veux toto.jpg :
    http://www.site.com/download.php?file=toto.jpg

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    encore une fois, je n'ai jamais parlé de redirection, je t'ai dit d'utiliser un lien.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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...

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    qu'est ce qui empêche d'afficher un lien sur la page ?

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et ca empeche de faire un lien ?

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    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 : 7
    Points
    7
    Par défaut
    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

Discussions similaires

  1. non appel de fonction sur un onsubmit
    Par toams69 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/10/2008, 21h39
  2. 2 fonctions sur un onClick
    Par renaud26 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 28/07/2006, 20h14
  3. Réponses: 24
    Dernier message: 26/05/2006, 15h08
  4. appel de fonction sur un OnKeyUp
    Par titoumimi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/02/2006, 10h46
  5. appel de fonction sur validation de formulaire
    Par PAYASS59 dans le forum Langage
    Réponses: 15
    Dernier message: 17/01/2006, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo