Может есть простой способ вывода на отдельную html страницу данных по запросу из xxx.csv файла Например содержимое файла: Код (Text): Директор;123-123-22;111;2222;;; Секретарь;333-123-22;222;1250;;; Охрана;222-123-22;333;500;;; Необходимо создать PHP запрос из html страницы на вывод данных из csv файла в html страницу в формате (примерно) Код (Text): Должность: Секретарь Телефон: 333-123-22 Кабинет: 222 Табельный номер: 1250 т.е. на html странице щелкаем по ссылке "Секретарь" и получаем новую страницу (как показано выше) заполненную из csv файла лежащего на сайте. Не судите строго, немного сумбурно описал, но что имею....
занеси данные в БД, так быстрее и надежней...да и проще... если нельзя, значит считываем каждую строку из файла, заносим в массив по разделителю ячейки и далее ищем в зависимости от того, но что кликнули на странице.
Не получается с БД. Вся БД на текстовых файлах, csv и dat. Считаь строку получается, занести в массив тоже, вывести предполагаю как. Всё упирается в то, как указать на html странице найти то, на что кликнул? Во, завернул......
data.csv Код (Text): Директор;123-123-22;111;2222;;; Секретарь;333-123-22;222;1250;;; Охрана;222-123-22;333;500;;; list.php - вывод списка и ссылок на страницу с подробностями Код (PHP): <?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Список</title> </head> <body> <?php $path = dirname(__FILE__); $fh = fopen($path . DIRECTORY_SEPARATOR . 'data.csv', 'r'); while($row = fgetcsv($fh, 0, ';')) echo('[url="detail.php?type=' . $row[0] . '"]' . $row[0] . '[/url]<br />'); ?> </body> </html> detail.php - страница с подробностями выбранной записи Код (PHP): <?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Подробности</title> </head> <body> <?php $type = isset($_GET['type']) ? $_GET['type'] : ''; $path = dirname(__FILE__); $fh = fopen($path . DIRECTORY_SEPARATOR . 'data.csv', 'r'); $data = array(); while($row = fgetcsv($fh, 0, ';')) { if($row[0] === $type) $data = $row; } if(count($data) > 0) { ?> <table border="1"> <tr> <td>Должность</td> <td><?php echo($data[0]); ?></td> </tr> <tr> <td>Телефон</td> <td><?php echo($data[1]); ?></td> </tr> <tr> <td>Кабинет</td> <td><?php echo($data[2]); ?></td> </tr> <tr> <td>Табельный номер</td> <td><?php echo($data[3]); ?></td> </tr> </table> [url="list.php"]Назад к списку[/url] <?php } else { ?> По данному запросу ничего не найдено<br /> [url="list.php"]Назад к списку[/url] <?php } ?> </body> </html> Подразумевается, что все 3 файла лежат в одной папке.
Возникла проблема с отображением. Если в CSV файле присутствуют строки в полях с началом такого содержимого (полностью строка): Код (Text): Сидоров Иван Петрович;Московская обл.;а/я 1234;ул.Мира д.1 то при выводе будет (полностью строка): Код (Text): . /я 1234 .Мира д.1 т.е. Сидоров Иван Петрович - не отображается, Московская обл - не отображается, остается только точка в а/я1234 - первая буква а - не отображается в ул.Мира д.1 - ул - не отображается. Никак не могу понять почему так? Похоже, что проблема в том, что У меня используется <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251"> Там где начало фрагмента в поле имеет цифру или латинскую букву - там проблем нет. Но что делать дальше, не совсем понятно. При использовании explode этого небыло...
Выяснилось, однозначно проблема с "обрезанием" в настройках кодировки локали на сервере. Сменить настройки локали нет возможности По этому вопрос остается открытый - чем заменить fgetcsv ? Как вычислить номер строки, в файле с массивом, в которой найдена искомая комбинация ?
Попробуй в начале скрипта добавить строку Код (PHP): setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
Нормальной замены для этой функции - нет. Нужно либо писать свой парсер CSV (который полюбому будет работать медленнее стандартной функции), либо добиваться работоспособности функции fgetcsv (устанавливать на сервере локаль ru_RU.cp1251 или переводить сайт на utf-8). Вариант с explode я лично рассматривать даже не стал бы вообще, поскольку так можно неправильно прочитать CSV.
Очень жаль. Самому писать парсер пока не позволяет количество извилин, а скорость работы не критична. Необходимо обработать массив с не более тысячью сток. Наверное придется искать решение с использованием explode, в моем случае вывод файла из 600 строк прошел без ошибок. Код (Text): $type = isset($_POST['type']) ? $_POST['type'] : ''; $type = strToUpper($type); /// перевод в верхний гегистр /// ??????? как подключить поиск /// ??????? по полученному $type $call= file("http://www.domen.ru/call.csv"); /// Считывание файла $numstrok = count ($call); /// Подсчитываем кол-во строк в файле for ($icb=0; $icb<$numstrok; $icb++) /// выводим все строки в цикле { /// Разбиение строки $cbpos = explode( ";",$call[$icb] ); print " <br>$cbpos[3] <br>$cbpos[0] <br>$cbpos[1] <br>$cbpos[2] <br>**********"; }} Здесь с отображением всё нормально. Осталось включить поиск и вывод найденной строки.
Просто стоит учесть, что сами данные - могут содержать символ ";" или символ перевода строки. И если попадётся такая строка - то обработается неверно.