2012-03-13 29 views
0

我有一個PHP函數呼叫PHP函數當鏈接被點擊

function ExportExcel() 
{ 
    // code 
} 

,並在Excel

<a>Download in Excel</a> 

頁面下載的鏈接所以我想是在用戶點擊時鏈接,將調用PHP函數,並將數據下載到Excel中。

我可能需要Ajax。我該如何去做呢?

+0

您導出到Excel的數據類型?它是XML,SQL等?數據來自何處? – Elen 2012-03-13 10:01:03

+0

您可以隨時將函數轉換爲PHP腳本,然後將鏈接指向該腳本... – fayerth 2012-03-13 10:01:58

+0

@Robus是的,我做了,但仍然不確定如何去做 – skos 2012-03-13 10:02:01

回答

0

只提供那個excel文件在href裏的鏈接,瀏覽器會自動下載 如果你的文件形成DB然後提供excel.php的鏈接,並在excel.php中做excel文件的處理和它的創建。 閱讀本artical..do像

+0

該文件並不真正存在於服務器上。有數據庫記錄,我需要在Excel中導出 – skos 2012-03-13 10:05:31

0

你可以處理你的JS請求scrpit文件

$("a").click(function(){ 
jQuery.ajax({ 
    url: "path/to/controller", 
    type: "POST", 
    dataType: 'json', 
    data: {'mentod':'ExportExcel'}, 
    success: successCallback, 
    error:failureCallback 
}); 
}); 
+0

可以請你解釋什麼是'url:'path/to/controller' – skos 2012-03-13 10:07:34

+0

它意味着處理請求的頁面的URL,寫入你在href中寫入的同一個URL裏面有標籤。 – palAlaa 2012-03-13 10:09:03

1

下面是函數我最近Implemeted一個:

$('#toexcel').live("click",function() { 
      $.ajax({ 
       url: "toExcel.php", 
       data: "sql="+encodeURIComponent(sql), 
       beforeSend: function(){ 
        $("#wait").show(); 
       }, 
       complete: function(){ 
        $("#wait").hide(); 
       }, 
       success: function(response){ 
        window.location.href = response.url; 
       } 
      }); 
     }); 

其中SQL變量實際存儲sql查詢到服務器, 然後toExcel.php如果通過sql,將其提交給服務器並使用PHPExcel()對象輸出結果。


編輯

我想我明白你想達到的目標。你的ExporExcel()函數已經輸出了你需要的結果,對吧?是這樣,那麼你可以做如下:

$('#toexcel').click(function() { 
      $.ajax({ 
       url: "toExcel.php", // should contain and _call_ you ExportExcel() function 
       beforeSend: function(){ 
        $("#wait").show(); // this is loading img to show 
       }, 
       complete: function(){ 
        $("#wait").hide(); ;// this is loading img to hide once complete 
       }, 
       success: function(response){ 
        window.location.href = response.url; 
       } 
      }); 
     }); 
+0

這意味着我需要創建一個附加文件(toExcel.php),對吧? – skos 2012-03-13 10:09:23

+0

那麼..你可以在那裏移動你的'ExportExcel()'函數 – Elen 2012-03-13 10:11:31

1

首先讓我確保你知道的頁面將首先被分配當PHP解析只。如果你點擊頁面上的鏈接,它不知道同一頁面上的php函數是否存在,因爲函數只在服務器端存在,而代碼正在被解析。話雖如此,你可以輕鬆地創建一個名爲download.php的單獨頁面,並在該頁面上調用你的函數。然後,您的鏈接可以鏈接到該頁面。

如果您希望您的自定義下載頁面以excel文件的形式返回給用戶,則可以使用自定義php標頭來說服瀏覽器正在下載excel文件。 (你必須指定excel文件的MIME類型)

編輯: 這將導致下載開始由你的函數調用創建的excel文件,並通過鏈接點擊激活。你不需要任何JS或JQuery。

EDIT2: 這裏的示例代碼下載文件,讓你開始

<?php 
header("Content-type: application/excel"); 
print($data); /* print out the contents of the excel file here */ 
exit(); 
?> 

如果你不喜歡這樣,你的PHP頁面將不會從原始網頁重定向,但會彈出一個下載框而不是瀏覽器。如果您使用csv文件而不是xls文件,則需要更改MIME類型。

+1

+1對於沒有jQuery。 – Stijn 2012-03-13 10:10:56

+0

但是,這將把用戶帶到另一個頁面......我想在用戶停留在同一頁面時開始下載。 – skos 2012-03-13 10:17:59

+0

如果操作正確,瀏覽器將提供打開或保存Excel文件並保持在同一頁面上。 – Stijn 2012-03-13 10:59:26

1

你可能只使用一個GET語句,所以它會是這個樣子......

HTML

<a href="download.php?init=true">Download in Excel</a> 

PHP

function ExportExcel() 
{ 
    // code 
} 

if($_GET['init']) 
{ 
    ExportExcel();  
} 
+0

我更喜歡這個簡單的想法,但PHP是不安全的...使用'isset'來檢查'$ _GET ['init']'是否存在或不存在。 – Raptor 2012-03-13 10:24:51

+0

我同意,只是一個快速演示:) – PapaSmurf 2012-03-13 10:26:22