2012-09-08 233 views
0

這段代碼的問題是,每次我從MySQL導出到csv時,它都會覆蓋已經創建的csv。我想要這個代碼來檢查是否有一個已經創建的csv文件 - >創建一個新的。防爆。 (Sales-2012-9-8.csv)to(Sales1-2012-9-8.csv)...此代碼在從MySQL導出記錄方面效果很好..但是當涉及到導出另一個csv時,它將覆蓋當前的csv文件名。PHP檢查csv文件是否存在?

哦,是的,還有一件事..怎麼能在csv文件的第一行添加表頭。 Ex(產品編號 - 數量 - 售價 - 日期)?

謝謝

<?php 
require_once('connect_db.php'); 
$fdate = $_POST['fdate']; 
$tdate = $_POST['tdate']; 

$result = mysql_query("SELECT item_no, qty, discount_price, date FROM sold_items WHERE date BETWEEN '".$fdate."' AND '".$tdate."' ORDER BY date Desc"); 

$filename = $name = "Sales"; 
$index = 1; 
while(file_exists($filename)) { 
    $filename = $name.$index; 
    $index++; 
    echo "File Already Exists"; 
} 

if(!$f = fopen("E:/{$filename}-{$tdate}.csv", 'w')){ 
    ?> 
    <script language="javascript"> 
    alert('USB FLASH NOT INSERTED'); 
    history.back(); 
    </script> 
    <?php 
} 

while($row = mysql_fetch_array($result, MYSQL_NUM)) 
{ 
    fputcsv($f, $row); 
} 

fclose($f); 


?> 
<center><font style="font-size:28px; font-weight:bold; color:#C00;">USB Transfer Successful</font></center> 
<center><input type="button" onclick="javascript:window.close()" value="Close Window" /></center> 
<?php 

?> 
+0

你是什麼意思,它不起作用?請給出錯誤消息或關於什麼不起作用的更深入的描述 – Kris

+0

瞭解SQL注入並修復您的代碼。無論'fopen()'成功,你都可以關閉文件。 –

+0

偏離主題但很重要:'mysql_xxx()'函數被認爲已經過時,不應該被使用。 PHP手冊建議切換到等效的'mysqli_xx()'函數或PDO庫。 – Spudley

回答

1

試試這個變種。我認爲file_exists()函數見成比其他文件夾 「E:/」:

$tdate = date(); 
$filename = $name = "Sales"; 
$index = 1; 
while(file_exists("E:/{$filename}-{$tdate}.csv")) { 
    $filename = $name.$index; 
    $index++; 
    echo "File {$filename}-{$tdate}.csv Already Exists"; 
} 

if(!$f = fopen("E:/{$filename}-{$tdate}.csv", 'w')){ 
    ?> 
    <script language="javascript"> 
    alert('USB FLASH NOT INSERTED'); 
    history.back(); 
    </script> 
    <?php 
} 

至於第二個問題:

哦,是啊,一個更thing..How是有可能增加表格頭文件在csv文件的第一行。 Ex(產品編號 - 數量 - 售價 - 日期)?

據我所知,csv文件的第一行被識別爲標題。因此,請在編寫查詢結果之前嘗試編寫標題。例如。

fputcsv($f, array('Item No', 'Qty', 'Selling Price', 'Date')); 
0

你只是檢查與價值「銷售」文件名 - 日期尚未收錄!

+0

好吧,我已經測試過了($ filename = $ name =「Sales - {$ tdate}」;),導出的csv名稱是(Sales-2012-09-08-2012-09-08.csv)即使再次導出,它也會覆蓋當前的csv文件。它像$ index = 1目前沒有工作。 –

+0

當然,您還必須包含文件類型(.csv),否則文件名將不正確。 –

+0

好的,再次測試($ filename = $ name =「Sales - {$ tdate} .csv」;)仍然不能正常工作:(我感謝您的幫助 –