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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    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
    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
    Par défaut
    Non le lien est vers un fichier .php qui contient la même chose que ce que fait ta fonction downloadFile
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    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
    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
    Par défaut
    Non, ce n'est pas du tout ce que j'ai expliqué.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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