| |
|
|
| | Есть страница для поиска, где пользователь задает необходимые ему параметры поиска. Методом post передаем на следующую страницу и выводим результат из БД.
Вопрос: Как сделать так, чтобы пользователь мог сохранить эту выборку (в Excel) к себе на локалку.
Вариант Ctrl+C >>> Ctrl+V не предлагать :) | |
| |
|
|
| |
|
|
| |
для: Gandzas
(01.11.2006 в 08:13)
| | | Проще сохранить таблицу в виде CSV-файла. Excel их тоже открывает.
$sql = "SELECT * FROM tab";
$res = mysql_qyery($sql) or die ( "Error in $sql : ". mysql_error());
if(mysq_num_rows($res) > 0)
{
header('Content-Type: application/vnd.ms-excel; name="table.csv"');
header('Content-Disposition: attachment; filename="table.csv"');
while(($row = mysql_fetch_assoc)) !== false)
{
foreach($row as $column => $val)
{
// здесь нужно преобразовать типы данных даты-времени, дробных чисел и строки.
if(...) $val = $val[8].$val[9].'.'.$val[5].$val[6].'.'.$val[0].$val[1].$val[2].$val[3].' '
.$val[11].$val[12].':' .$val[14].$val[15].':' .$val[17].$val[18]; // для даты-времени
if(...) $val = '"'.str_replace('.', ',', $val); // для дробных чисел
if(...) $val = '"'.str_replace('"', '""', $val); // для строк
$row[$column] = $val;
}
$row = implode(';', $row);
echo($row."\r\n");
}
}
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(01.11.2006 в 09:45)
| | | Я так понимаю, что здесь
$res = mysql_qyery($sql) or die ( "Error in $sql : ". mysql_error());
ошибка в query
и здесь
if(mysq_num_rows($res) > 0)
надо писать mysql
Только все равно не получается... :( | |
| |
|
|
|
| |
|
|
| |
для: st.Ass
(05.11.2006 в 08:46)
| | | Спасибо, пошла смотреть. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(05.11.2006 в 02:48)
| | | Прикрепите, пожалуйста,фрагмент дампа таблицы: структуру и несколько строк данных.
Тогда можно будет сделать скрипт непосредственно под Ваш случай. | |
| |
|
|
| |
|
|
| |
для: Trianon
(07.11.2006 в 14:22)
| | | Фрагмент дампа таблицы:
CREATE TABLE `baza` (
`id` int(11) NOT NULL auto_increment,
`data` varchar(11) NOT NULL default '',
`tip` varchar(100) NOT NULL default '',
`kk` varchar(30) NOT NULL default '',
.....
`ktel` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `ktel` (`ktel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=98 ;
|
Почти все поля текстовые, т.к. данные заносятся из csv файла (который формируется из файла Excel) и обрабатываются, к тому же, скриптом :)) В файле-исходнике полный бардак, телефон может быть сохранен, как текст и т.д., поэтому типы данных записываются "как есть" (текстом).
Данные выводятся в веб-таблицу корректно. Кавычек и точки с запятой в тексте нигде нет (кроме разделителей). Есть готовый файл-шаблон с названиями столбцов, куда нужно записать только данные, выбранные юзером. Экспорт в csv-файл тоже корректен из phpMyAdmin (тестила на локалке), а вот из веб записать выборку пока не получается... | |
| |
|
|
| |
|
|
| |
для: Gandzas
(08.11.2006 в 01:32)
| | | Прошу прощения. В первом скрипте и вправду было изрядно опечаток....
Вот исправленный код:
<?php
$sql = "SELECT id,data,tip,kk,ktel FROM baza";
$res = mysql_query($sql) or die ( "Error in $sql : ". mysql_error());
if(mysql_num_rows($res) > 0)
{
header('Content-Type: application/vnd.ms-excel; name="table.csv"');
header('Content-Disposition: attachment; filename="table.csv"');
while(($row = mysql_fetch_assoc($res)) !== false)
{
foreach($row as $column => $val)
{
$val = '"'.str_replace('"', '""', $val).'"'; // для строк
$row[$column] = $val;
}
$row = implode(';', $row);
echo($row."\r\n");
}
}
?>
|
Оператор SELECT нужно будет изменить, указав нужные поля и добавив WHERE с условиями фильтра. | |
| |
|
|
| |
|
|
| |
для: Trianon
(08.11.2006 в 09:40)
| | | Warning: Cannot modify header information - headers already sent by (output started at /home/infotmi/public_html/index.php:8)
Warning: Cannot modify header information - headers already sent by (output started at /home/infotmi/public_html/index.php:8)
Что это значит? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 14:02)
| | | это значит что где-то до этих строк выполняется вывод в браузер.
Возможно это команда echo, возможно какие-то символы пусть даже пробел или пустая строка до <?php или после ?>.
Собственно, место, где этот вывод был начат, Вам указали. 8 строка файла index.php | |
| |
|
|
| |
|
|
| |
для: Trianon
(10.11.2006 в 14:07)
| | | Ага... понятно. Спасибо. Исправила. А как теперь можно сделать, чтобы выборка сохранялась не в новый файл, а в уже готовый шаблон с названиями столбцов. Файл называется rent.xls и лежит в этой же директории. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 14:16)
| | | XLS - закрытый формат.
Можете, конечно, попробовать поискать модули, реализующие работу с ним, только врядли это будет надежным решением. | |
| |
|
|
| |
|
|
| |
для: Trianon
(10.11.2006 в 14:45)
| | | А средствами php можно как-то прописать название столбцов, и, самое важное, задать их ширину. Потому что, например, 5Е+05 вместо 45000 в столбце "цена" очень сильно смущает пользователей. .. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 14:51)
| | | а что такое название столбца?
Если у Вас в первой строке названия расписаны, то такую строку можно отдельно сформировать, пеерд выводом строк таблицы.
....
header('Content-Type: application/vnd.ms-excel; name="table.csv"');
header('Content-Disposition: attachment; filename="table.csv"');
echo "ID;DATA;TIP;KK;TEL". "\r\n";
while(($row = mysql_fetch_assoc($res)) !== false)
....
|
Ширину столбцов в csv указать не получится.
В конце концов колонки не фиксированы и ничто не мешает сверху написать предложение растянуть столбцы до нужной ширины. Как минимум, если пользователи свои.
Если чужие - им обычно не нужен excel ( а тех, кому нужен, запись 5Е+05 не смутит, человек сам кликнет на границе столбца)
Можно также попробовать воспользоваться советом targa и вывести данные в формате XML,
там задать ширину столбцов проблемы не представляет.
Но это куда долее сложный, а главное - громоздкий формат. Для большого прайса файл будет иметь изрядный размер. Что, на мой взгляд, куда менее удобно. | |
| |
|
|
| |
|
|
| |
для: Trianon
(10.11.2006 в 15:20)
| | | По поводу названий столбцов - понятно. Спасибо.
По поводу пользователей, да, пользователи "свои", но, как бы Вам это объяснить...
"Утюг существует для глажки, стиральная машина - для стирки, а компьютер - для переписки. Компьютер, как вы, наверное, догадываетесь, состоит из нескольких частей: монитор, клавиатура, мышь и большой железный ящик"
Так что, предложение "растянуть столбцы до нужной ширины" может очень смутить...
А если в первую строку (названия столбцов) вставить картинки нужной ширины? Такое возможно? | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 16:07)
| | | > А если в первую строку (названия столбцов) вставить картинки нужной ширины? Такое возможно?
Нет.
В этом формате можно передавать только текстовые данные.
Между прочим. Даже если Вы сформируете XML-файл, не убежден, что удастся заставить на лету открывать этот файл на компьютерах пользователей именно Excel'ем.
А почему (для тех кто...) просто не вывести HTML-таблицу? В качестве альтернативного варианта? | |
| |
|
|
| |
|
|
| |
для: Trianon
(10.11.2006 в 16:41)
| | | HTML-таблица в любом случае выводится. Это уже к ней по просьбе трудящихся :) добавляется возможность "Сохранить в Excel и отправить по почте".
Но когда сходишь с ума от звонков "у меня нет первых двух столбцов" (горизонтальная полоса прокрутки) или "у меня вместо телефонов какие-то плюсики" (ширина столбца), :( то хочется сделать так, чтобы вопросов не было. | |
| |
|
|
| |
|
|
| |
для: Gandzas
(10.11.2006 в 16:56)
| | | Спасибо за помощь. Напишу я, наверное, хелпу в картинках и перестану Вам морочить голову. Как минимум, в этой теме. ;) | |
| |
|
|
| |
|
|
| |
для: Gandzas
(01.11.2006 в 08:13)
| | | Для того что бы создать Excel документ нужно, что бы хостинг был на платформе Windows и на нем был установлен Excel. Есть эти условия выполняются, то надо рюхать в COM-объектах. | |
| |
|
|
| |
|
|
| |
для: FroNiTy
(08.11.2006 в 02:22)
| | | >>Для того что бы создать Excel документ нужно, что бы хостинг был на платформе Windows и
>>на нем был установлен Excel. Есть эти условия выполняются, то надо рюхать в COM-объектах.
Хотя это самый удобный вариант, но не единственный. Можно создать XML-документ, отформатированный для Excel'я. В таком документе будет сохранены и данные, и форматирование. | |
| |
|
|