Привет, многоуважаемые программисты! Имею небольшой опыт программирования на php, есть задача: отображать загруженный прайс лист (.xls) в браузере с поиском по нему. Поиск по принципу: Пользователь вводит: samsung и нажимает поиск, вместо полного прайс листа ему выводит результаты поиска в виде выборки из таблицы: Аккумулятор Samsung-5235 9999руб Телефон Samsung-5222 9999руб Телевизор Samsung-112 9999руб Вывод: Должна быть такого плана (см.рис), то есть вывод картинок не обязателен, все максимально просто, обычная html таблица с данными из экселя. Предполагаю, что поиск можно реализовать при помощи preg_match и регулярок, но как быть с выводом прайс листа? Буду благодарен за любую помощь, советы, рекомендации. За помощь готов заплатить в разумных пределах, бюджет очень скромный Заранее спасибо!!!
Когда загружают файл, ты его с помощью PHPExcel прочитай и загрузи в базу, потом напиши скрипт который будет искать в базе, через LIKE оператор в MySQL, этого достаточно. Перенести может в раздел free-lance или будешь сам пытаться по нашим подсказкам делать?
Спасибо. Попытаюсь самостоятельно, опыт бесценный. Если вдруг возникнут вопросы по ходу реализации, то задам их здесь.
Спойлер: Excel => MySQL Функцию дернул с хабра PHP: // Подключаем библиотеку require_once 'Classes/PHPExcel.php'; // Функция преобразования листа Excel в таблицу MySQL, с учетом объединенных строк и столбцов. // Значения берутся уже вычисленными. Параметры: // $worksheet - лист Excel // $connection - соединение с MySQL (mysqli) // $table_name - имя таблицы MySQL // $columns_name_line - строка с именами столбцов таблицы MySQL (0 - имена типа column + n) function excel2mysql($worksheet, $connection, $table_name, $columns_name_line = 0) { // Проверяем соединение с MySQL if (!$connection->connect_error) { // Строка для названий столбцов таблицы MySQL $columns_str = ""; // Количество столбцов на листе Excel $columns_count = PHPExcel_Cell::columnIndexFromString($worksheet->getHighestColumn()); // Перебираем столбцы листа Excel и генерируем строку с именами через запятую for ($column = 0; $column < $columns_count; $column++) { $columns_str .= ($columns_name_line == 0 ? "column" . $column : $worksheet->getCellByColumnAndRow($column, $columns_name_line)->getCalculatedValue()) . ","; } // Обрезаем строку, убирая запятую в конце $columns_str = substr($columns_str, 0, -1); // Удаляем таблицу MySQL, если она существовала if ($connection->query("DROP TABLE IF EXISTS " . $table_name)) { // Создаем таблицу MySQL if ($connection->query("CREATE TABLE " . $table_name . " (" . str_replace(",", " TEXT NOT NULL,", $columns_str) . " TEXT NOT NULL)")) { // Количество строк на листе Excel $rows_count = $worksheet->getHighestRow(); // Перебираем строки листа Excel for ($row = $columns_name_line + 1; $row <= $rows_count; $row++) { // Строка со значениями всех столбцов в строке листа Excel $value_str = ""; // Перебираем столбцы листа Excel for ($column = 0; $column < $columns_count; $column++) { // Строка со значением объединенных ячеек листа Excel $merged_value = ""; // Ячейка листа Excel $cell = $worksheet->getCellByColumnAndRow($column, $row); // Перебираем массив объединенных ячеек листа Excel foreach ($worksheet->getMergeCells() as $mergedCells) { // Если текущая ячейка - объединенная, if ($cell->isInRange($mergedCells)) { // то вычисляем значение первой объединенной ячейки, и используем её в качестве значения // текущей ячейки $merged_value = $worksheet->getCell(explode(":", $mergedCells)[0])->getCalculatedValue(); break; } } // Проверяем, что ячейка не объединенная: если нет, то берем ее значение, иначе значение первой // объединенной ячейки $value_str .= "'" . (strlen($merged_value) == 0 ? $cell->getCalculatedValue() : $merged_value) . "',"; } // Обрезаем строку, убирая запятую в конце $value_str = substr($value_str, 0, -1); // Добавляем строку в таблицу MySQL $connection->query("INSERT INTO " . $table_name . " (" . $columns_str . ") VALUES (" . $value_str . ")"); } } else { return false; } } else { return false; } } else { return false; } return true; } // Соединение с базой MySQL $connection = new mysqli("localhost", "root", "", "tomka"); // Выбираем кодировку UTF-8 $connection->set_charset("utf8"); // Загружаем файл Excel $PHPExcel_file = PHPExcel_IOFactory::load("./file.xlsx"); // Преобразуем первый лист Excel в таблицу MySQL $PHPExcel_file->setActiveSheetIndex(0); echo excel2mysql($PHPExcel_file->getActiveSheet(), $connection, "excel2mysql0", 1) ? "OK\n" : "FAIL\n"; // Перебираем все листы Excel и преобразуем в таблицу MySQL foreach ($PHPExcel_file->getWorksheetIterator() as $index => $worksheet) { echo excel2mysql($worksheet, $connection, "excel2mysql" . ($index != 0 ? $index : ""), 1) ? "OK\n" : "FAIL\n"; } Загрузил в базу данных данные из прайса. Теперь нужно вывести в виде таблицы, поможете? Предполагаю, что надо циклом пробегаться и в <td> <tr> раскидывать значения, но как точно сделать это я не знаю. Табица получилась такого вида. Заранее спасибо
Тогда что твоя тема делает в разделе для профи, если ты не знаешь каким алгоритмом таблицу вывести? Унесу в новички?
Размещал исходя из целей, а не из моих навыков. По моему мнению вывести таблицу xlsx и сделать поиск по ней новичку не под силу.
Раздел по скилу спрашивающего, а не отвечающих. Скил у тебя на профи не тянет. А задачу ты перед собой ставишь добротную. Это похвально. Но тема уезжает в новички.
Советую попробовать js-компоненту datatables. Он может искать/фильтровать, сортировать по клику на колонке и многое другое. Может работать как с единовременно загруженными данными, так и запрашивать серверный API — на выбор.