foreach($contents as $line) {
$data = split(',',$line, 2);
krumo(array($data[0]));
$id = db_insert('price_list')
->fields(
array(
'goods_name' => $data[0],
'price' => $data[1]
)
);
$id->execute();
}
друпал - новые данные
Пытаюсь поместить запись новую в БД
Система Друпал, нормальный запрос работает...
Друпаловский отваливается, причем внятной ошибки я не получаю... говорит что на такой-то линии в таком-то файле ошибка...
Данные путаюсь загрузить с файла (кирилица)...
Пытался сам подставить кирилицу... все нормально грузит, а вот с файла не хочет, никак не пойму...
foreach($contents as $line) {
$data = split(',',$line, 2);
krumo(array($data[0]));
$id = db_insert('price_list')
->fields(
array(
'goods_name' => $data[0],
'price' => $data[1]
)
);
$id->execute();
}
2. Выдайте текст ошибки. (Еще есть смысл посмотреть в журнале самого друпала)
Запрос вроде верно делается, поэтому проблема либо в парсинге файла, либо, возможно, в структуре таблицы. Там два поля?
И вообще, что это Вы такое делаете?
Код:
текст ошибки:
PDOException: в функции form_upload_price_list_submit() (строка 72 в файле /srv/www/site.ru/sites/all/modules/price_list_uploader/price_list_uploader.page.inc).
структура таблицы:
CREATE TABLE `price_list` (
`id` bigint(10) unsigned NOT NULL auto_increment,
`goods_name` varchar(500) NOT NULL,
`price` decimal(5,0) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`goods_name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
и главное, если самому подставить те же значения(значения массива $data) значения вместо $data[0 ]и $data[1] то запрос работает.
насчет логирования, я не нашел, друпал вообще логирует по умолчанию? или надо модуль прикреплять? В логах апача ничего нет по поводу этой ошибки
Цитата: George
И вообще, что это Вы такое делаете?
Загружаю данные прайс-листа
Цитата: Kama
[quote=George;23978]И вообще, что это Вы такое делаете?
Загружаю данные прайс-листа[/quote]
Если загружать Вашим макаром, то проверьте, как парсится файл.
А вообще, я бы предложил модуль Feeds, прекрасная вещь для импорта чего угодно. Заводите тип содержимого "Запись в прайс-листе", у него можно сделать поле-ссылку на определенный продукт и поле-цену. А с помощью Feeds автоматизировать процесс загрузки прайс-листов из файла. Точно знаю, что можно из CSV, вроде как есть возможность поставить дополнительный модуль, чтобы Feeds хавал и xls.
Код:
...
$contents = file($_FILES['price_list_uploader']['tmp_name']);
...
foreach($contents as $line) {
$data = split(',',$line, 2);
krumo(array($data[0]));
$id = db_insert('price_list')
->fields(
array(
'goods_name' => array($data[0]),
'price' => $data[1]
)
);
$id->execute();
}
$contents = file($_FILES['price_list_uploader']['tmp_name']);
...
foreach($contents as $line) {
$data = split(',',$line, 2);
krumo(array($data[0]));
$id = db_insert('price_list')
->fields(
array(
'goods_name' => array($data[0]),
'price' => $data[1]
)
);
$id->execute();
}
Вывожу на экран отпарсенную строку... итог: та же строка, копирую и подставляю эту строку вместо $data[0]. Все работает при этом. Пытался экранировать, тоже не катит, да и кто муже друпал сам экранирует вроде
насчет модуля спасибо посмотрю позже, но думаю раз на то пошло интересно было бы узнать суть проблеммы..
http://xandeadx.ru/blog/drupal/384
но суть проблеммы была не в запросе, а в кодировке...
пару минут потратил на поиск нужной кодировки, сейчас я сохраняю файл в формате CVS, видимо кодировка там другая...
вот сейчас перевел на другую прежде чем записывать данные в БД и все заработало
Это так, на всякий случай, кому-может понадобиться
iconv('Windows-1251', 'UTF-8//TRANSLIT', $data)
Логично. А вообще, по друпалу я предпочитаю вопросы на drupal.ru и drupal.org задавать, там больше знающего народу.