52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277

Запись в csv. Скрипт внутри

14.08.2017, 20:03. Показов 2569. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Ниже код предоставляю, помогите разобраться.
В основном 2 проблемки:

1 проблема. В textarea ввожу слова другом под другом. Нужно, чтобы шел поиск и вывод из БД по этим словам. Пока вывод идет только по первому слову. Однажды получилось и что-то напортачил.

2. проблема. В конце кода код записи в csv, не пойму почему, но последняя переменная $base записывается на следующую строку в ячейку B, все предыдущие 7 переменных в первую строку в каждую ячейку. Оставляю 7 переменных, все ок.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (isset($_REQUEST['another_base_rubrika_exp'])){
$rub = $_POST['rubrika'];
$rubr = explode("\r", $rub);  
$query = mysql_query("SELECT * FROM another_base WHERE rubrika IN ('$rubr[0]','$rubr[1]','$rubr[2]')");                                           
while ($result = mysql_fetch_array($query))  {
if(isset($_POST['name'])){$name = $result['name'];}
if(isset($_POST['razdel'])){$razdel = $result['razdel'];}
if(isset($_POST['city'])){$city = $result['city'];}
if(isset($_POST['adres'])){$adres = $result['adres'];}
if(isset($_POST['email'])){$email = $result['email'];}
if(isset($_POST['phone'])){$phone = $result['phone'];}
if(isset($_POST['site'])){$site = $result['site'];}
$base = $result['base'];
$rubrika = $result['rubrika'];
chdir('./');
$fp = fopen('another_base_razdel.csv', 'a+'); 
$current_row = $name . ';' . $razdel . ';' . $rubrika . ';' . $city . ';' . $adres . ';' . $email . ';' . $phone . ';' . $site . ';' . $base .  "\r";        
 
fwrite($fp, iconv("utf-8", "windows-1251", "$current_row") . PHP_EOL);
}
fclose($fp);
 
}
Во как-то так. Прошу помощи. Не проходите мимо, пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2017, 20:03
Ответы с готовыми решениями:

Запись в БД из файла csv
Доброго времени суток! Начинающий. Изучаю php. Помогите, пожалуйста разобраться с проблемкой. Нужно записать данные из csv в базу. файл...

запись в csv файл
Добрый день,пытаюсь записать в csv файл таблицу mysql ,однако в файл попадает также весь html код страницы с которой выполняется код,в чём...

Запись данных из БД в эксель или csv
Привет всем. Данную функцию записи использую, но можно ли записывать данные в файл эксель или csv не в строку с разделителями, а отдельно в...

11
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
14.08.2017, 21:48
Лучший ответ Сообщение было отмечено samvel4000 как решение

Решение

Цитата Сообщение от samvel4000 Посмотреть сообщение
1 проблема
Цитата Сообщение от samvel4000 Посмотреть сообщение
explode("\r", $rub);
Разделитель строк точно \r всегда?
Цитата Сообщение от samvel4000 Посмотреть сообщение
2. проблема.
Либо select ... into file делать, либо работать с csv специально предназначеными функциями http://php.net/manual/ru/function.fputcsv.php
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
14.08.2017, 21:56
Цитата Сообщение от samvel4000 Посмотреть сообщение
PHP
1
2
$rubr = explode("\r", $rub); *
$query = mysql_query("SELECT * FROM another_base WHERE rubrika IN ('$rubr[0]','$rubr[1]','$rubr[2]')");
PHP
1
2
3
    $rubr = preg_replace('~(\r\n|\r|\n)~', "','", trim($rub));
    $sql = "SELECT * FROM another_base WHERE rubrika IN ('.$rubr.')";
    $result = mysql_query($sql) or die(mysql_error());
0
52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277
15.08.2017, 08:08  [ТС]
Спасибо. В первой проблеме разделитель с "\r" поменял на "\r\n" поиск идет по всем слова в поле ввода.
Во второй проблеме банально все. Перенос строки при экспорте в csv из-за кривого импорта в БД,т.к. в одном столбце слова в ячейках импортировались с переносом. trim() спас.

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

Добавлено через 12 минут
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
PHP
1
2
3
    $rubr = preg_replace('~(\r\n|\r|\n)~', "','", trim($rub));
    $sql = "SELECT * FROM another_base WHERE rubrika IN ('.$rubr.')";
    $result = mysql_query($sql) or die(mysql_error());
Это что-то не помогает. Но проблему свою я решил.
Может подскажете по этой части кода:

PHP
1
2
3
$rub = $_POST['rubrika'];
$rubr = explode("\r\n", $rub); 
$query = mysql_query("SELECT * FROM another_base WHERE rubrika IN ('$rubr[0]','$rubr[1]','$rubr[2]')");
Здесь поиск в БД идет пока по 3 фразам [0][1][2], а если этих фраз, вводимых в $_POST['rubrika'] будет больше, придется добавлять [0][1][2][3][4][5] и т.д. Как правильно написать условие поиска в запросе покороче, чтоб поиск шел по любому количеству фраз в поле ввода?
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
15.08.2017, 18:50
Цитата Сообщение от samvel4000 Посмотреть сообщение
будет больше, придется добавлять [0][1][2][3][4][5] и т.д. Как правильно написать условие поиска в запросе покороче
Так
PHP
1
2
3
    $rubr = preg_replace('~(\r\n|\r|\n)+~', "','", trim($rub));
    $sql = "SELECT * FROM another_base WHERE rubrika IN ('".$rubr."')";
    $result = mysql_query($sql) or die(mysql_error());
0
52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277
16.08.2017, 14:49  [ТС]
Добавлено через 1 минуту
Jewbacabra, select помог. Еще вопрос такой, если база большая, больше 1млн, она может не влезть в файл csv или может? Например, база в 2млн? Тут можно как-то разбивку сделать, чтобы при экспорте файл разбивался при достижении определенного количества строк и создавался новый, например файл(1)
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2017, 15:35
samvel4000, размер любого файла, в том числе и csv ограничен наименьшим из: ограничение файловой системы, доступным местом диске.
0
52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277
16.08.2017, 17:51  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
samvel4000, размер любого файла, в том числе и csv ограничен наименьшим из: ограничение файловой системы, доступным местом диске.
Хорошо, как тогда экспортировать базу в 1,5 млн, если csv не вмещает столько?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2017, 18:19
samvel4000, csv не может вмещать или не вмещать, это просто текстовый файл, такой же как txt. Поэтому такая характеристика как количество строк не имеет смысла, важен размер в байтах. Упереться в ограничения фс будет тяжело, в ext4 например, максимальный размер файла что-то вроде 10ТБ. На 1.5кк строк нужно по 6.6 МБ на строк. Остается только влезть в доступное место на диске.
0
52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277
16.08.2017, 19:48  [ТС]
Jewbacabra, В блокноте я могу закинуть большую базу, но в csv или эксель упирается в определенное количество строк и все, ничего с этим не поделать. Вы же пользовались экселем, знаете наверное, или у вас получалось вставить в эксель больше 1,5 млн строк? Максимум удавалось 1048000 строк примерно.
Или я его наверное открываю экселем и поэтому не все строки отображает?
Как тогда открыть файл csv с базой в 1.5 млн строк через эксель? Только раздербанить его на куски
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2017, 21:30
Цитата Сообщение от samvel4000 Посмотреть сообщение
но в csv или эксель упирается в определенное количество строк и все
Это проблема excel, но никак не ограничения csv. Вероятно есть ПО, для работы с большими csv файлами.
Цитата Сообщение от samvel4000 Посмотреть сообщение
Только раздербанить его на куски
можно используя LIMIT ограничивать число строк и делать экспорт несколькими запросами, можно делать 1 файл и средствами php разделять его на несколько, может и другие способы есть
1
52 / 3 / 4
Регистрация: 27.02.2016
Сообщений: 277
17.08.2017, 08:32  [ТС]
Jewbacabra, Можешь показать как установить лимит и сделать запрос? На примере скрипта в начале темы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2017, 08:32
Помогаю со студенческими работами здесь

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл. Всё написал, сбросил, пришёл ответ что у...

Скрипт.Нужно из файла csv в AD. и автоматом этот скрипт добавляет 50 пользователей из execl
Import-Module ActiveDirectory $Users = Import-CSV -Delimiter ";" -Path "C:\test\lol.csv" $allou = Get-ADOrganizationalUnit -Filter *...

Скрипт конвертации CSV в XLSX с форматированием
Добрый день! Не много соображаю в VB.Net, но задача именно в формате отдельно исполняемого файла VBS. Задача: есть файл csv с...

Perl скрипт (Импорт\экспорт данных из csv)
Задача: Есть csv файл. Нужно его прочитать, и часть данных экспортировать в новый csv файл. Суть в том, что из 10 колонок нужно будет...

Скрипт, подключающийся к БД и скачивающий таблицу в CSV-файл
Добрый день. Нужен скрипт который подключается к базе данных, считывает определенную таблицу и выгружает в CSV файл данные на компьютер....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru