我發現許多類似於這個問題的「部分」答案,但我是PHP和MySQL的新手,似乎並不是一個那裏有很好的連貫的答案;我想要做的是這樣的:保存文件對話框出現在MySQL數據導出後(使用PHP)
- 從一個名爲「生產者」的MySQL表中獲取所有數據。
- 讓用戶在本地機器上選擇一個文件名/'另存爲'位置。
- PHP/MySQL/HTML獲取數據並將其作爲CSV文件寫入。
第1部分和第3部分很容易;但讓用戶選擇文件位置/文件名的方式似乎幾乎不可能。用戶選擇一個文件進行上傳很簡單,所以爲什麼我很難找到一種方法讓用戶選擇「保存」位置/名稱?當然,這不是一個安全風險 - 從服務器下載安全風險要遠遠低於將某些內容上傳到服務器。
我想能夠使用漂亮和簡單的MySQL方法,但我不知道如何發送這個命令從PHP到MySQL;只是把它在一個mysqli_query似乎並沒有做任何事情:
SELECT prodCompany,prodPhone,prodFirstname FROM producers
INTO OUTFILE '/Users/me/Desktop/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(這種方法工作得很好,從內phpMyAdmin的)。
因此,我已經爲現在的笨重的一步一步的PHP方法,它的工作原理,但顯然只有將「file.csv」保存到我的桌面。我已經閱讀了MIME類型的提及,但我不確定這可以幫助我以及如何實現它。
我只想觸發一個文件選擇器對話框,將該文件路徑/名稱獲取到$ filename變量中。但經過幾天的挫折之後,我找不到任何可行的方法。任何幫助或建議將不勝感激!
- 保羅
是保存到一個文件中的PHP:
<?php
// Create connection
$con=mysqli_connect("xxxxxxxxx","xxxxxxxxx","xxxxxxxxxxxxxx","xxxxxxxxxx");
// Check connection
if (mysqli_connect_errno())
{ echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
$filename = '/Users/me/Desktop/file.csv';
$headers = array('prodCompany', 'prodPhone', 'prodFirstname');
$handle = fopen($filename, 'w');
fputcsv($handle, $headers, ',', '"');
$sql = mysqli_query($con, 'SELECT * FROM producers');
while($results = mysqli_fetch_array($sql)) {
$row = array(
$results['prodCompany'],
$results['prodPhone'],
$results['prodFirstname']
);
fputcsv($handle, $row, ',', '"');
}
fclose($handle);
?>
實際上,這是一個安全風險。如果瀏覽器可以寫入任何目錄,那麼JavaScript可以寫入任何目錄。我認爲這是事實。 –
謝謝瑞安 - 我沒有意識到,允許用戶選擇一個文件可能會允許javacsript寫訪問。馬特,如果該文件還不存在(它正在「即時創建」)?如果可能的話,讓MySQL首先在服務器上創建文件可能會更好(如果可能),並且一旦該過程完成,那麼是否啓動了下載/文件選擇過程? – Paul
@MattThompson,但是您可以從瀏覽器上運行的程序設置下載位置,還是用戶必須至少響應下載提示? –