neatod
Всем привет.
Суть проблемы:
_ загружаю на сервер файл .csv с целью обновить цены в магазине
_ файл содержит только артикул и цену товара
_ извлекаю содержимое файла (артикул) и ищу в базе (MySql) соответствующее значение
_ артикулы представлены только цифрами без букв (к примеру 11033)
_ в итоге процентов 10 записей он не находит, но они точно есть
_ Field (article) | Type (varchar) | Collation (utf8_general_ci)
Drunkenmunky
Попробуйте заменить на int
Предварительно сохранив копию таблицы.
neatod
К сожалению это нельзя делать, т. к. предполагается, что будут ещё артикулы и с буквами.
Drunkenmunky
Это зря.
Похоже, что в части записей(в таблице или csv) есть лишние символы. Пробелы например.
neatod
Нет. В коде я пишу $article = trim($csv[article]);
Drunkenmunky
Это легко проверить.
Сформируйте запрос из $csv[article] и запросите на вывод.
Сравните количество.
neatod
Это какой-то полтергейст))
Я уже тупо через if(){} сравниваю $csv[article] с таким же числом, и он пишет, что они не совпадают
Drunkenmunky
Как сравниваете?
neatod
if($csv[article] == 11019){
Вывожу результат сравнения
}При этом:
echo $csv[article];
Выводит 11019
Drunkenmunky
Заключите 11019 в кавычки, если $csv[article] строка.
neatod
Попробовал, не помогло
Дальше идут значения 6919, 699
они при таком сравнении выдают успех
Drunkenmunky
Ну, гадать можно до морковкиного заговенья.
Выгрузите таблицу и csv.
neatod
Не совсем понял задачу. Подробнее напишите пожалуйста что нужно сделать?
Кстати, проверил длину значения strlen($csv[article]) выдаёт 8, почему? Если должно быть 5?
Drunkenmunky
Лишние символы.
Или часть из них не цифры.
neatod
Нашёл решение) .csv файл перекодировал в utf-8 без ВОМ и всё заработало.
И всё же остаётся вопрос, если человек загрузит .csv в кодировке с ВОМ, как решить эту проблему?
Drunkenmunky
Удалять этот самый BOM.
Другое дело, почему он у вас в нескольких строках.
Это три или четыре символа в самом начале файла.
neatod
Всё ОК. Моя ошибка. Остальные товары просто ещё не добавлены в базу))
Я их со страху тоже причислил к проблемным)Спасибо за помощь!
MouseZver
Warning: Use of undefined constant article — assumed ‘article’
— Добавлено —потому что — функция strlen подсчитывает количество байт, а не число символов в строке. Почему должно 5, когда там 8 байт ?
- Чтобы посчитать сколько символов в строке, оптимально — mb_strlen
- Чтобы узнать (не)пуста ли строка / переменная — конструкция empty. Но и в ней есть нюансы, например: ‘0’ — это будет считаться как пустая строка