2012-09-08 280 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”;)仍然不能正常工作:(我感谢您的帮助 –