Сопоставления

106
.
Virtuozzo
Добрый день! Столкнулся со след. проблемой. Есть много ПДФов, около 20к (инструкции к товарам). Находятся они на отдельном сервере, в товарах (на другом сервере) указывается только ссылка на этот ПДФ в отдельной таблице.

Проблема в след. у товаров есть код, есть список имен товаров к которым принадлежит этот файл такого вида
djhsiuah92d7h3iuh - Сплит-система Lesar
Первое код которому соответствует товар в этом хранилище файлов (он же имя ПДФ файла).
Надо как-то указать в таблице ссылку на этот файл, но там требуется id товара (id товара в магазине).

Пробую искать id товара по имени файла в таблице из списка имен для которых есть ПДФ.

$text = fopen("list.txt", "r"); //файл со списком имен
$array = null; 
if ($text) { 
while (($buffer = fgets($text)) !== false) { 
$array[] = $buffer; //получаем массив имен
} 
} 
fclose($text); 

foreach ($array as $name) { //перебираем имена в цикле и делаем запрос в бд
$sql = mysqli_query($db, "SELECT `XML_ID` FROM `b_iblock_element` WHERE `NAME` like '%$name%'"); 
while ($result = mysqli_fetch_array($sql)) { 
echo "{$result['XML_ID']} <br>"; 
} 
}

Но получаю только последнюю итерацию (результат/строку файла) цикла.
Хотел дальше сопоставить найденные id и имена со списком код-имя и присвоить туда равные id. А дальше уже делать записи в бд к этим товарам для которых нашлись ПДФ.


Собственно вопрос! Где косяк в цикле, что-бы получить все его результаты? И возможно у кого-то есть мысль как эту порнографию задачу можно как-то иначе решить?
.
Virtuozzo, Так ты покажи как файл list.txt выглядит, там скорее всего переносы строк в массив пишутся, это еще удивительно что одну строку выдало))
$array[] = trim($buffer); //получаем массив имен
.
Кадило крутится, лавэха мутится
Если у товаров есть код, что тебе мешает найти товар по коду?
Слабо описано как-то...
З.Ы. Чем тебе апи битрикса не угодило что ты решил прямыми запросами писать? гг.
.
(\/)____o_O____(\/)
Можно ещё использовать функцию file с флагами от пустых строк
.
kantry, Файл лист выглядит вот так
Прикрепленные файлы:
.
Simba, ..

Код не передается на сервер где сам магазин. Код (Он же имя файла ПДФ) и список имен для которых есть ПДФ, они на сервере пдф, с сервером магазина их ничего не связывает кроме ссылок. По этому и придумал такой велосипед узнать ID товара в магазине по имени товара из списка для которых есть пдф, потом сравнивать уже ид-имя-код и писать в таблицу уже ссылки на пдф
.
Virtuozzo, Ну тебе написали уже в чем дело, имена полученные из файла, надо очистить от лишних символов.
Я бы вообще не так делал, создаем табличку
CREATE TABLE `pdf_file_name` (
  `NAME` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

потом залазим в в консоль, или чем там с mysql работаешь.
-- смотришь откуда можно файл залить
SELECT @@secure_file_priv;
-- ну и собственно заливаешь
LOAD DATA INFILE '/var/lib/mysql-files/list.txt' INTO TABLE pdf_file_name;

А потом что угодно с таблицей делаешь(удаляешь пустые строки, добавляешь ай-ди и т д).
.
Решил через апи битрикса. Отправляю на сервер магазина код товара и имя, ищу там через апи, в магазине, оттуда проверяю есть ли для него файл, пишу в бд тогда.
Всего: 8
Фильтр по автору
Скачать тему