PHP проверяет, существует ли файл csv?

Проблема с этим кодом заключается в том, что каждый раз, когда я экспортирую из MySQL в csv, он перезаписывает уже созданный csv. Я хочу, чтобы этот код проверял, существует ли уже созданный CSV-файл -> создать новый. Бывший. (Sales-2012-9-8.csv) в (Sales1-2012-9-8.csv)... Этот код отлично работает при экспорте записей из MySQL.. Но когда дело доходит до экспорта другого CSV, он перезаписывает текущий 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

?>

person Ali Hamra    schedule 08.09.2012    source источник
comment
что значит не работает? Пожалуйста, дайте сообщения об ошибках или более подробное описание того, что именно не работает   -  person Kris    schedule 08.09.2012
comment
Прочтите о внедрении SQL и исправьте свой код. Вы закрываете файл независимо от того, удалось ли fopen().   -  person Marcin Orlowski    schedule 08.09.2012
comment
не по теме, но важно: функция mysql_xxx() считается устаревшей и не должна использоваться. В руководстве по PHP рекомендуется переключиться либо на эквивалентные функции mysqli_xx(), либо на библиотеку PDO.   -  person Spudley    schedule 08.09.2012


Ответы (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. Ex (Номер позиции - Кол-во - Цена продажи - Дата)?

Насколько я знаю, первая строка csv-файла распознается как заголовок. Итак, попробуйте написать свои заголовки, прежде чем писать результаты запроса. Например.

fputcsv($f, array('Item No', 'Qty', 'Selling Price', 'Date'));
person Max Kuznetsov    schedule 08.09.2012

Вы проверяете только имя файла со значением «Продажи» — дата еще не включена!

person Louis Huppenbauer    schedule 08.09.2012
comment
Хорошо, я протестировал это так ( $filename = $name = Sales-{$tdate}; ), и экспортированное имя csv (Sales-2012-09-08-2012-09-08.csv) И даже на при повторном экспорте он перезаписывает текущий CSV-файл. Это похоже на то, что $index=1 в настоящее время не работает. - person Ali Hamra; 08.09.2012
comment
Конечно, вы также должны указать тип файла (.csv), иначе имя файла будет неверным. - person Louis Huppenbauer; 08.09.2012
comment
Еще раз хорошо, Tested ( $filename = $name = Sales-{$tdate}.csv; ) все еще не работает :( ! Я ценю вашу помощь. - person Ali Hamra; 08.09.2012
comment
И вы перезаписываете Sales-{$tdate}.csv на Sales-{$tdate}.csv1 в первом цикле, но затем используете имя файла Sales-{$tdate}.csv1-{$tdate}. csv. Таким образом, файл Sales-{$tdate}.csv1 в конце концов не существует - вы просто используете другое имя при написании файла. - person Louis Huppenbauer; 08.09.2012