0

这段代码的问题是,每次我从 MySQL 导出到 csv 时,它都会覆盖已经创建的 csv。我希望这段代码检查是否已经创建了 csv 文件-> 创建新文件。前任。(Sales-2012-9-8.csv) 到 (Sales1-2012-9-8.csv)...这段代码非常适合从 MySQL 导出记录..但是当导出另一个 csv 时,它会覆盖当前的 csv文件名。

哦,是的,还有一件事..如何在 csv 文件的第一行添加表头。例如(货号 - 数量 - 售价 - 日期)?

谢谢你

<?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

?>
4

2 回答 2

2

试试这个变种。我认为 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
}

至于第二个问题:

哦,是的,还有一件事..如何在 csv 文件的第一行添加表头。例如(货号 - 数量 - 售价 - 日期)?

据我所知,csv 文件的第一行被识别为标题。因此,请在编写查询结果之前尝试编写标题。例如

fputcsv($f, array('Item No', 'Qty', 'Selling Price', 'Date'));
于 2012-09-08T19:42:10.753 回答
0

您只检查值为“Sales”的文件名 - 日期尚未包括在内!

于 2012-09-08T18:10:42.727 回答