[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема пр экспорте файлов
Undertaker
Доброго времени суток, возникла проблема при экспорте БД в файл csv.
Исходник выглядит следующим образом:
<?
define('SITE', true);
include 'config.php';
@mysql_connect($sdd_db_host,$sdd_db_user,$sdd_db_pass);
@mysql_select_db($sdd_db_name);

$ath=mysql_query("select * from sprav");

$f=fopen('1.csv','w');

while($ar = mysql_fetch_array($ath))fputcsv($f,$ar);
fclose($f);
header("Content-Type: application/octet-stream'");
header('Content-Disposition: attachment; filename="1.csv"');
readfile('1.csv');
?>

данный код экспортирует файлы но:
1. Русские буквы ложатся в файл в неправильной кодировке
2. Каждое значение ложиться по 2 раза
3. автоматически ставиться разделитель не точка с запятой а запятая...
как бы решить данные проблемы?

 ! 

М
Выделяйте свой код тегами [php][/php]
Winston




Спустя 3 часа, 12 минут, 42 секунды (26.01.2012 - 14:06) Winston написал(а):
Цитата (Undertaker @ 26.01.2012 - 09:54)
Русские буквы ложатся в файл в неправильной кодировке

После mysql_select_db попробуй прописать такой запрос
mysql_query("SET NAMES cp1251");

Цитата (Undertaker @ 26.01.2012 - 09:54)
Каждое значение ложиться по 2 раза

Это все из-за того, что mysql_fetch_array - возвращает ассоциативный и числовой массив, то есть 2 копии одного ряда результата. Вместо этой ф-и используй mysql_fetch_assoc.
Цитата (Undertaker @ 26.01.2012 - 09:54)
автоматически ставиться разделитель не точка с запятой а запятая

Ф-я fputcsv имеет еще 3 параметр - разделитель. Потому можно написать так fputcsv($f,$ar, ';');

Спустя 13 минут, 46 секунд (26.01.2012 - 14:20) bob marley написал(а):
Undertaker
попробуй $f=fopen('1.csv','w');
заменить на $f=fopen('1.csv','w+');



Спустя 2 минуты, 2 секунды bob marley написал(а):
Первый раз вижу такую строчку
while($ar = mysql_fetch_array($ath))fputcsv($f,$ar);

Спустя 16 часов, 5 минут, 13 секунд (27.01.2012 - 06:25) Undertaker написал(а):
Winston
Цитата
Русские буквы ложатся в файл в неправильной кодировке

После mysql_select_db попробуй прописать такой запрос

mysql_query("SET NAMES cp1251");


Цитата (Undertaker @ 26.01.2012 - 09:54)
Каждое значение ложиться по 2 раза

Это все из-за того, что mysql_fetch_array - возвращает ассоциативный и числовой массив, то есть 2 копии одного ряда результата. Вместо этой ф-и используй mysql_fetch_assoc.
Цитата (Undertaker @ 26.01.2012 - 09:54)
автоматически ставиться разделитель не точка с запятой а запятая

Ф-я fputcsv имеет еще 3 параметр - разделитель. Потому можно написать так fputcsv($f,$ar, ';');

Спасибо огромное, после восползования советом (Все татарин кроме я biggrin.gif ) импорт заработал как положено.

Спустя 2 минуты, 25 секунд (27.01.2012 - 06:28) Undertaker написал(а):
bob marley
Цитата
попробуй $f=fopen('1.csv','w');
заменить на $f=fopen('1.csv','w+');


Спустя 2 минуты, 2 секунды bob marley написал(а): Первый раз вижу такую строчку
while($ar = mysql_fetch_array($ath))fputcsv($f,$ar);

К сожалению 'w+' не прокатило, но всё равно спасибо за помощь


_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.