Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mysql to csv
 
 автор: st.Ass   (29.09.2006 в 21:43)   письмо автору
 
 

Доброго времени суток!!
Помогите, плизз, необходимо 3 вещи:

1. чтобы при нажатии на ссылку на странице осуществлялся запрос вида:


<?
mysql_query
("SELECT * FROM main");
?>


таблица main - id | name | date | comment | email | pet

2. далее, данные полученные из запроса, помещались в файл ot4et.csv - соответственно в нужном формате, т.е. разделитель tab или ;

3. и наконец, выскакивало окно с предложением открыть\сохранить данный файл....


Проблемы с первым шагом вроде не возникает, а вот со вторым и 3-м=((

   
 
 автор: cheops   (30.09.2006 в 12:21)   письмо автору
 
   для: st.Ass   (29.09.2006 в 21:43)
 

Сохранять файл на жёсткий диск не требуется - сразу передавайте его при помощи HTTP-заголовков пользователю. Подробнее о такой технике можно почитать в темах по ссылкам
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=21366
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=15822

   
 
 автор: st.Ass   (01.10.2006 в 09:34)   письмо автору
 
   для: cheops   (30.09.2006 в 12:21)
 

Спасибо cheops с3-м шагом разобрался, но остается теперь самое сложное и непонятное для меня - это экспорт таблицы из мускула в csv....=(

   
 
 автор: st.Ass   (01.10.2006 в 11:16)   письмо автору
 
   для: st.Ass   (29.09.2006 в 21:43)
 

Вроде нашел как сделать 2 -ой шаг, но еще не проверял -

способ 1.

<?
$query 
"load data infile 'ot4et.csv'
 into table saint_expo
 fields terminated by ';'
 lines terminated by '\n'"
;
$reult=mysql_query($query);
?>



cпособ 2.

<?
$result 
mysql_query("select * from main");

while(
$row mysql_fetch_array($result)) {
echo 
implode(';'$row);
}
?>


способ 3. (по моему работает только с версии 5.0)

<?
//пишем запрос к бд на извлечение всех данных из таблицы, затем помещаем данные в массив

$list = array (
    
'aaa,bbb,ccc,dddd',
    
'123,456,789',
    
'"aaa","bbb"'
);

$fp fopen('ot4et.csv''w');

foreach (
$list as $line) {
    
fputcsv($fpsplit(';'$line));
}

fclose($fp);
?>


Интересно что-нибудь из этого заработает?:)

   
 
 автор: st.Ass   (02.10.2006 в 23:15)   письмо автору
 
   для: st.Ass   (01.10.2006 в 11:16)
 

Не получается=(
Решил действовать вторым способом


<? 
$result 
mysql_query("select * from main"); 

while(
$row mysql_fetch_array($result)) { 
echo 
implode(';'$row); 

?> 


Как поместить эти данные в файл и как быть с окончанием строки (\r\n)?

   
 
 автор: cheops   (03.10.2006 в 12:39)   письмо автору
 
   для: st.Ass   (02.10.2006 в 23:15)
 

Следует открыть файл и писать в него результаты с \r\n на конце
<?  
$result 
mysql_query("select * from main");  

$fd fopen("имя_файла","w");
while(
$row mysql_fetch_array($result)) {  
  
fwrite($fd,implode(';'$row)."\r\n");
}  
fclose($fd);
?> 

   
 
 автор: st.Ass   (05.10.2006 в 08:42)   письмо автору
 
   для: cheops   (03.10.2006 в 12:39)
 

cheops, странно но при этом варианте:

<?   
$result 
mysql_query("select * from main");   

$fd fopen("имя_файла","w"); 
while(
$row mysql_fetch_array($result)) {   
  
fwrite($fd,implode(';'$row)."\r\n"); 
}   
fclose($fd); 
?>  

В файл в строке выводится сдвоенные значения...

Вот что у меня получилось, вроеде работает....

<?
include("../sys/config.php");

$file fopen('ot4et.csv','w');
$result mysql_query('select * from main');

while(
$row mysql_fetch_array($result))
{
fwrite($file,"\"$row[0]\";".
"\"$row[1]\";"."\"$row[2]\";".
"\"$row[3]\";"."\"$row[4]\";".
"\"$row[5]\";"."\"$row[6]\";".
"\"$row[7]\";"."\"$row[8]\";".
"\"$row[9]\";"."\"$row[10]\";".
"\"$row[11]\""."\r\n");
};
fclose($file);

$filename="ot4et.csv";
header("Content-Disposition: attachment; filename=$filename");
header("Content-type: application/octet-stream");
header("Expires: 0");
header("Cash-Control: must-revalidate, post-check=0, pre-check=0");
echo 
file_get_contents($filename);
?>

А можно ли как-нибудь сделать тоже самое, если заранее неизвестно сколько столбцов?

   
 
 автор: Shorr Kan   (05.10.2006 в 09:55)   письмо автору
 
   для: st.Ass   (05.10.2006 в 08:42)
 

Сдвоенные значения - потому что mysql_fetch_array возвращает И ассоциативный, И числовой массивы.

Попробуйте mysql_fetch_row() .

   
 
 автор: Trianon   (05.10.2006 в 10:19)   письмо автору
 
   для: st.Ass   (05.10.2006 в 08:42)
 

подход
$str = implode(';', $row);
чреват тем, что поля, содержащие символы ; [точка с запятой] и/или " [кавычка] будут записаны некорректно, и общий синтаксис строки в результате окажется нарушен.

Я бы предложил что-то вроде
<?
foreach($row as $key => $item)
{
  if(
strstr($item';') !== false || strstr($item'"') !== false)
     
$row[$key] = '"'.str_replace('"''""'$item).'"';
}
$str implode(';'$row);
?>

Но и это, вероятно, не всё. Останутся еще десятичные запятые и представления дат. Возможно, еще что-то выползет...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования