2013-07-04 91 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(); 
     } 

     } 

    } 
    ?>