2013-07-04 88 views
-1

我有一個文件下載URL的列表,將顯示給用戶,並在用戶單擊它時將觸發下載。我使用下面的代碼:PHP從超鏈接調用函數

echo "<a href=$val1 download=\"$fileId.$fileformat\".>Click Here To Download</a>"; 

但是我怎麼改變這種做法,一個函數被調用,而不是下載,因爲我需要下載前做一些處理。我用了以下,但它不工作:

echo "<a href=$val1 onclick=func($val1,$fileId,$fileformat)>Click Here To Download</a>"; 

是否有任何其他方式從超鏈接調用函數?我嘗試使用if(isset($ _GET ['id']))方式,但我有一個鏈接列表,我需要顯示給用戶,當用戶點擊一個比傳遞功能來觸發下載。

+1

您將需要使用AJAX調用PHP函數從一個錨 – naththedeveloper

回答

2

你不能直接從HTML調用PHP函數。

有關問題的解決方法是調用將運行功能和下載

防爆返回文件的PHP文件。

<a href="download-file.php?val1=$val1&fileId=$fileId&fileFormat=$fileFormat">Click Here To Download</a> 

您donwload-file.php文件檢查和驗證$ _GET,你會跑,你需要返回結果的功能。

+0

我的$ val1是一個url幷包含「&」字符,所以當我做$ _GET ['val1']時,我無法獲得完整的url,它會在第一個「 「。任何想法,我該如何解決它?其他參數沒有問題。 – aandroidtest

+1

有什麼不同的方法可以解決這個問題: - 使用urlencode($ val1)對鏈接進行編碼或者 - 而不是在$ val1中發送url發送一個整數並在你的dwonload-file.php中使用switch語句來獲取url字符串或使用爆炸()到$ url到一個較小的部分,並將其作爲其他變量傳遞。 – Haver

0

試試這個,

echo "<a href='javascript:;' onclick=func('".$val1."','".$fileId."','".$fileformat."')> 
    Click Here To Download</a>"; 
+0

我試過你的代碼,但是當我點擊鏈接時,它會進入鏈接本身並且不會觸發該函數。任何想法,我錯了? – aandroidtest

+0

@aandroidtest測試上面我已經對它做了修改。 –

0
$("#link_id").click(function() { 
//Your code here 
}); 


echo "<a href=$val1 download=\"$fileId.$fileformat\". id='link_id'>Click Here To Download</a>"; 
+0

我能做到這一點是PHP? – aandroidtest

+0

上面的代碼是jquery –

0

啓動一個php函數「onclick」的唯一方法是使用$ _GET []。

有兩種方式供您做到這一點:

  1. 你HREF變量,例如。觸發。

    <a href="?variable=value">click</a> 
    <?php 
    if(isset($_GET['variable'])) { 
        $variable = $_GET['variable']; 
    
        /* now you can either directly execute your 
         function, create a switch or an if/elseif block */ 
    
        switch($variable) { 
         case "file1": 
         function myFunction() { 
         /* your function */ 
         } 
         break 1; 
        } 
    } 
    ?> 
    
  2. 你創建一個類(OOP),包括它在你的文件:

    <?php 
    $trigger = $_GET['trigger']; 
    include "include_path/class_name.php"; 
    ?> 
    

類:

<?php 
    class ClassName { 

     function ClassName() { 
     global $trigger; 

     if($trigger == "value1") { 
     // your function 
     } 

     if($trigger == "value2") { 
     $this->myFunction(); 
     } 

     if($trigger == "value3") { 
     $otherClassName->myOtherFunction(); 
     } 

     } 

    } 
    ?>