[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с данными
gagger
Здравствуйте, пишу скрипт для компиляции данных из текстовой базы данных в Mysql.

Столкнулся с совершенно непонятной и фантастической ситуацией:

Скрипт вытаскивает данные, вырезает хтмл код, вставляет данные в переменные и отправляет в БД.

Проверяю перед запросом в БД данные получаю -

$title = 'Subaru ED6,0 230-SLE (ED6.0/230-SLE)';

$desc = 'Мощность, Вт:1.6 кВт квт Напряжение: 220 В Описание: на даче, в походе, на рыбалке и т.п.';

$text = 'Модель Ranger2000 Обозначение Генераторная установка Класс OPEN Напряжение 230В/ 50 Гц Область применения Досуг';


Отправляю в БД а там отображается только $title. Остальные данные не попадают, с чем может быть связана проблема?



Спустя 4 минуты, 31 секунда (31.10.2011 - 23:57) Семён написал(а):
Размер поля и тип поля проверяй.

Спустя 3 минуты, 38 секунд (1.11.2011 - 00:01) gagger написал(а):
desc - varchar(255)
text - text

Спустя 1 минута, 19 секунд (1.11.2011 - 00:02) Семён написал(а):
А ты в эту одну ячейку это всё суёшь?
Если нет, то показывай как ты INSERT делаешь

Спустя 38 секунд (1.11.2011 - 00:03) caballero написал(а):
распечатай результирующий sql запрос которым вставляешь
и выполни его отдельно или просто посмотри что там

Спустя 53 секунды (1.11.2011 - 00:03) gagger написал(а):
В desc идет соответственно $desc = 'Мощность, Вт:1.6 кВт квт Напряжение: 220 В Описание: на даче, в походе, на рыбалке и т.п.';

в текст - $text = 'Модель Ranger2000 Обозначение Генераторная установка Класс OPEN Напряжение 230В/ 50 Гц Область применения Досуг';

Спустя 4 минуты, 11 секунд (1.11.2011 - 00:08) Игорь_Vasinsky написал(а):
а INSERT как выглядит?

Спустя 1 минута, 7 секунд (1.11.2011 - 00:09) gagger написал(а):

INSERT INTO jos_makroprom_vm_product VALUES ('', '1', '', '$prod', 'Мощность, Вт:1.6 кВт квт Напряжение: 220 В Описание: на даче, в походе, на рыбалке и т.п.',

'Модель Ranger2000 Обозначение Генераторная установка Класс OPEN Напряжение 230В/ 50 Гц Область применения Досуг',
'', '', 'Y', '', '', '', '', '', '', '', '', '1318982400', '', '', '', '',
'1319002912', '1319002996', 'Subaru ED6,0 230-SLE (ED6.0/230-SLE)', '', '', '', '', '', '', '', '', '', '')


Вставляю руками в БД все отлично вставлятся

Спустя 1 минута, 49 секунд (1.11.2011 - 00:11) Семён написал(а):
Посмотри пример:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Спустя 51 секунда (1.11.2011 - 00:11) imbalance_hero написал(а):
gagger
все данные обрабатывай через mysql_real_escape_string

Спустя 15 секунд (1.11.2011 - 00:12) Игорь_Vasinsky написал(а):
а чё пустого так много? для Int кавычки не нужны, id если авто инкремент не указывай...

пустоту наверн можно явно как NULL указать

Спустя 12 минут (1.11.2011 - 00:24) gagger написал(а):
imbalance_hero, спасибо, но не помогло.

Игорь_Vasinsky, навести марафет это в последнюю очередь, пусть сейчас хоть как-то заработает...

Мне не понятно, каким образом УЖЕ полученные данные не ВСЕ попадают в БД, хотя при том условии что я их добавляю руками через sql они отлично туда попадают.

Спустя 3 минуты, 10 секунд (1.11.2011 - 00:27) gagger написал(а):

<?php


$host='localhost';
$database='macroprom_db';
$user='root';
$pswd='';

$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");


$file_handle = fopen('test.txt', 'r');

while (!feof($file_handle)) {
// в тексте могут находиться переносы строк, поэтому если строка заканчивается знаком '\', мы его обрезаем, а строку соединяем со следующей.
$line = $s.fgets($file_handle);
if (substr($line,strlen($line)-3,1)=='\\'){
$s = substr($line,0,strlen($line)-3);
continue;
}else{
$s='';
}
if (!empty($line)){
$data = explode('|',$line);
//echo '<pre>';
//print_r($data);
//echo '</pre>';
//$td = explode('<tbody>',$data[32]);

$price = '<br />Цена:'.$data[31];




//Обрабатываем картинку

$jpg = explode("`",$data[37]);
$pic = $jpg[0].$jpg[1];

$content = $td[0].$td[1].$td[2].$head.$td[3].$td[4].$td[5];
$jpg = explode("`",$data[37]);

if (isset($jpg[1])) {
$pic = 'images/products/'.$jpg[0].'.'.$jpg[1];
}
else $pic ='';


$desc = 'Мощность, Вт:'.$data[27].' квт
Напряжение: '
.$data[28].'
Описание: '
.$data[30];


//Убиваем HTML

$search = array ("'<script[^>]*?>.*?</script>'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
//"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // интерпретировать как php-код

$replace = array (" ",
" ",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");


$text2 = preg_replace($search, $replace, $data[32]);

if (isset($data[32])) {


$desc = mysql_real_escape_string($desc);
$text2 = mysql_real_escape_string ($text2);
$prod++;


mysql_query("SET NAMES 'utf8'");
mysql_query("INSERT INTO jos_makroprom_vm_product VALUES ('','1', '', '$prod', '$desc', '$text2', '$pic', '$pic', 'Y', '', '', '', '', '', '', '', '',
'1318982400', '', '', '', '', '1319002912', '1319002996', '
$data[16]', '', '', '', '', '', '', '', '', '', ''); ");

}
}
}


?>

Спустя 1 минута, 59 секунд (1.11.2011 - 00:29) Семён написал(а):
убери эти идиотские:
'', '', '', '', '', '', '', '', '', ''

и воспользуйся примером:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Спустя 4 минуты, 4 секунды (1.11.2011 - 00:33) imbalance_hero написал(а):
INSERT INTO `table` SET
`cell` = 'value',
`cell2`= 'value2'

А вот так вообще понятно

Спустя 13 минут, 41 секунда (1.11.2011 - 00:47) gagger написал(а):
  mysql_query  ("INSERT INTO `jos_makroprom_vm_product` SET

`vendor_id` = '1',
`product_sku` = '
$prod',
`product_s_desc` = '
$desc',
`product_desc` = '
$text2',
`product_thumb_image` = '
$pic',
`product_full_image` = '
$pic',
`product_publish` = 'Y',
`product_available_date`= '1318982400',
`cdate`= '1319002912',
`mdate`= '1319002996',
`product_name`= '
$data[16]'
"
);


При таком варианте, вообще ничего не добавляет.

Спустя 1 минута, 44 секунды (1.11.2011 - 00:48) Winston написал(а):
gagger
Еще раз посмотри на то, что тебе Семён показал !

Спустя 9 секунд (1.11.2011 - 00:48) Игорь_Vasinsky написал(а):
конкатенвцию используй, mysql_real_escape_string()

'".$var."'


допиши к запросу
or die(mysql_error());

Спустя 1 минута, 34 секунды (1.11.2011 - 00:50) Игорь_Vasinsky написал(а):
(ячейки...) VALUES (данные....)

Спустя 11 минут, 31 секунда (1.11.2011 - 01:02) gagger написал(а):
Аналогично не работает

mysql_query  ("INSERT INTO jos_makroprom_vm_product (vendor_id, product_sku, product_s_desc, product_desc, product_thumb_image, product_full_image, product_publish, product_available_date, cdate, mdate, product_name)
VALUES ('1', '$prod', '$desc', '$text2',
'$pic', '$pic', 'Y', '1318982400', '1319002912', '1319002996', '$data[16]')"
) or die("Не удается сделать запрос.");

Спустя 4 минуты, 50 секунд (1.11.2011 - 01:06) Игорь_Vasinsky написал(а):
блин.. я для чего mysql_error() указал? чтоб получить ошибку.

Спустя 10 минут, 31 секунда (1.11.2011 - 01:17) gagger написал(а):
Стер подключение к БД случайно по этому не подключалось к БД
Но проблема осталась прежней

Спустя 26 минут, 7 секунд (1.11.2011 - 01:43) Игорь_Vasinsky написал(а):
гадание на кофейной гуще...

Спустя 1 минута, 21 секунда (1.11.2011 - 01:44) Winston написал(а):
В or die допиши
or die("Не удается сделать запрос." . mysql_error());

Спустя 7 минут, 4 секунды (1.11.2011 - 01:51) gagger написал(а):
Да нету ошибки, проходит запрос, попадает в БД но не ВЕСЬ.

Спустя 5 минут, 20 секунд (1.11.2011 - 01:57) imbalance_hero написал(а):
продублируй запрос mysql_query и второй замени на die();

Выведется полностью текст запроса.

Запрос сделай как я показал, переменные все обрабатывай mysql_real_escape_string, для этого продемонстрируй запрос отдельно тут.

Не забудь указать or die(mysql_error()); !!!

Покажи обе записи из mysql .

Вообщем всё проделай и выложи тут запрос, код запроса, запись в БД (её вид, именно скрин-шот).

Спустя 11 секунд (1.11.2011 - 01:57) Winston написал(а):
Значит, скорее всего у тебя не все переменные имеют значения (пустые) подставляются

Спустя 10 минут, 46 секунд (1.11.2011 - 02:08) gagger написал(а):
Не совсем понял это - продублируй запрос mysql_query и второй замени на die();
Скриншот из бд

Спустя 33 секунды (1.11.2011 - 02:08) gagger написал(а):
      mysql_query("SET NAMES 'utf8'");
mysql_query ("INSERT INTO `jos_makroprom_vm_product` SET

`vendor_id` = '1',
`product_sku` = '
$prod',
`product_s_desc` = '
$desc',
`product_desc` = '
$text2',
`product_thumb_image` = '
$pic',
`product_full_image` = '
$pic',
`product_publish` = 'Y',
`product_available_date`= '1318982400',
`cdate`= '1319002912',
`mdate`= '1319002996',
`product_name`= '
$data[16]'
"
) or die(mysql_error());

Спустя 24 минуты, 12 секунд (1.11.2011 - 02:32) imbalance_hero написал(а):
gagger
Вот показываешь запрос, где обработка данных?
 `product_desc` = '".mysql_real_escape_string($text2)."',


Второй вариант, вместо mysql_query напиши exit() - увидишь вид своего запроса!!!.

Спустя 10 минут, 35 секунд (1.11.2011 - 02:43) gagger написал(а):
INSERT INTO `jos_makroprom_vm_product` SET `vendor_id` = '1', `product_sku` = '1', 
`product_s_desc` = 'Мощность, Вт:1.6 кВт квт\n Напряжение: 220 В \n Описание: на даче, в походе, на рыбалке и т.п.',
`product_desc` = ' Модель Ranger2000 Обозначение Генераторная установка Класс OPEN Напряжение 230В/ 50 Гц Область применения Досуг, периодическая эксплуатация Мощность,
Вт 1600 Акустическая мощность (LWA) 97 Звуковое давление (дБ/7м) 74 Двигатель Марка Honda Модель GC135
Расположение клапанов Верхнее расположение распредвала (OHV) Запуск Ручной Топливо АИ-92 Автоном.
(при полн. баке и нагр. 75%) 2,2 ч Расход топлива 0,77 л/ч Емкость бака 1,7 л Ав. останов по уровню масла Стандарт Мощность (л.с. при 3600 об/мин) 4 Рабочий объем 135 см3
Кол-во масла 1.7 л Габариты и вес Длина 53 см
Ширина 37 см Высота 41 см Вес 23 кг «Розетки» 2 x 10/16A230 В бытовые Автомат защиты стандартно '
,
`product_thumb_image` = 'images/products/81105.jpg',
`product_full_image` = 'images/products/81105.jpg', `product_publish` = 'Y', `product_available_date`= '1318982400', `cdate`= '1319002912', `mdate`= '1319002996', `product_name`= 'SDMO RANGER 2000'

Спустя 4 минуты, 36 секунд (1.11.2011 - 02:48) imbalance_hero написал(а):
gagger
А структуру БД показать, а переделанный запрос? smile.gif

Спустя 51 секунда (1.11.2011 - 02:49) imbalance_hero написал(а):
gagger
И ещё, зачем ты показываешь первую запись, когда там у тебя уже 1400 записей? Надо показывать как раз последнюю, ты же ПОСЛЕДНЮЮ добавляешь, а не первую smile.gif

Спустя 1 минута, 25 секунд (1.11.2011 - 02:50) gagger написал(а):
Я все время заливаю пачкой весь текстовый файл, так что то что я показываю это именно тот самый запрос.

--
-- Структура таблицы `jos_makroprom_vm_product`
--

CREATE TABLE IF NOT EXISTS `jos_makroprom_vm_product` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`vendor_id` int(11) NOT NULL DEFAULT '0',
`product_parent_id` int(11) NOT NULL DEFAULT '0',
`product_sku` varchar(64) NOT NULL DEFAULT '',
`product_s_desc` varchar(255) DEFAULT NULL,
`product_desc` text,
`product_thumb_image` varchar(255) DEFAULT NULL,
`product_full_image` varchar(255) DEFAULT NULL,
`product_publish` char(1) DEFAULT NULL,
`product_weight` decimal(10,4) DEFAULT NULL,
`product_weight_uom` varchar(32) DEFAULT 'pounds.',
`product_length` decimal(10,4) DEFAULT NULL,
`product_width` decimal(10,4) DEFAULT NULL,
`product_height` decimal(10,4) DEFAULT NULL,
`product_lwh_uom` varchar(32) DEFAULT 'inches',
`product_url` varchar(255) DEFAULT NULL,
`product_in_stock` int(11) NOT NULL DEFAULT '0',
`product_available_date` int(11) DEFAULT NULL,
`product_availability` varchar(56) NOT NULL DEFAULT '',
`product_special` char(1) DEFAULT NULL,
`product_discount_id` int(11) DEFAULT NULL,
`ship_code_id` int(11) DEFAULT NULL,
`cdate` int(11) DEFAULT NULL,
`mdate` int(11) DEFAULT NULL,
`product_name` varchar(64) DEFAULT NULL,
`product_sales` int(11) NOT NULL DEFAULT '0',
`attribute` text,
`custom_attribute` text NOT NULL,
`product_tax_id` int(11) DEFAULT NULL,
`product_unit` varchar(32) DEFAULT NULL,
`product_packaging` int(11) DEFAULT NULL,
`child_options` varchar(45) DEFAULT NULL,
`quantity_options` varchar(45) DEFAULT NULL,
`child_option_ids` varchar(45) DEFAULT NULL,
`product_order_levels` varchar(45) DEFAULT NULL,
PRIMARY KEY (`product_id`),
KEY `idx_product_vendor_id` (`vendor_id`),
KEY `idx_product_product_parent_id` (`product_parent_id`),
KEY `idx_product_sku` (`product_sku`),
KEY `idx_product_ship_code_id` (`ship_code_id`),
KEY `idx_product_name` (`product_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='All products are stored here.' AUTO_INCREMENT=1 ;

Спустя 47 секунд (1.11.2011 - 02:51) gagger написал(а):
Я ж показывал запрос переделанный...
на прошлой странице

Спустя 4 минуты, 5 секунд (1.11.2011 - 02:55) imbalance_hero написал(а):
gagger
Я не увидел в запросе как раз использование mysql_real_escape_string, а так же не увидел новые записи в БД smile.gif Зачем ты показал мне записи с 1 по 20? Когда должен показывать с 1400 ?

Спустя 5 минут, 15 секунд (1.11.2011 - 03:00) gagger написал(а):
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '` = 'Модель Ranger2000 Обозначение Генераторная установка Кл' at line 6

И как с этим бороться?

Спустя 1 минута, 54 секунды (1.11.2011 - 03:02) imbalance_hero написал(а):
ты издеваешься? Ты же сказал, что у тебя ошибки никакой нет, когда ты запрос сделал этот.

Спустя 1 минута, 10 секунд (1.11.2011 - 03:03) gagger написал(а):
Он не выдает эту ошибку, если не писать

 '".mysql_real_escape_string($text2)."'


Просто пропускает запрос в бд но в поля ничего не записывает.

Спустя 2 минуты, 4 секунды (1.11.2011 - 03:05) imbalance_hero написал(а):
gagger
Ты думаешь, я вижу твой запрос?

Спустя 1 минута, 35 секунд (1.11.2011 - 03:07) gagger написал(а):
mysql_query("SET NAMES 'utf8'");
mysql_query ("INSERT INTO `jos_makroprom_vm_product` SET

`vendor_id` = '1',
`product_sku` = '
$prod',
`product_s_desc` = '"
.mysql_real_escape_string($desc)."',
product_desc` = '"
.mysql_real_escape_string($text2)."',
`product_thumb_image` = '
$pic',
`product_full_image` = '
$pic',
`product_publish` = 'Y',
`product_available_date`= '1318982400',
`cdate`= '1319002912',
`mdate`= '1319002996',
`product_name`= '
$data[16]'
"
) or die(mysql_error());

Спустя 4 минуты, 26 секунд (1.11.2011 - 03:11) imbalance_hero написал(а):
gagger
Я же сказал, ко всем данным...

Спустя 3 минуты, 36 секунд (1.11.2011 - 03:15) gagger написал(а):
Так все остальные же проходят, зачем их трогать... Все то же самое выдает после того как я ко всем данным подставил

Спустя 4 минуты, 10 секунд (1.11.2011 - 03:19) imbalance_hero написал(а):
'
' '
' '


Смотрим, где нарушение кавычек? smile.gif Правильно, в последней строке, а где логично нарушено? В первой!

Спустя 5 минут, 33 секунды (1.11.2011 - 03:25) gagger написал(а):
Я уже плохо соображаю для такого юмора...)


    mysql_query("INSERT INTO `jos_makroprom_vm_product` SET

`vendor_id` = '1',
`product_sku` = '"
.mysql_real_escape_string($prod)."',
`product_s_desc` = '"
.mysql_real_escape_string($desc)."',
product_desc` = '"
.mysql_real_escape_string($text2)."',
`product_thumb_image` = '"
.mysql_real_escape_string($pic)."',
`product_full_image` = '"
.mysql_real_escape_string($pic)."',
`product_publish` = 'Y',
`product_available_date`= '1318982400',
`cdate`= '1319002912',
`mdate`= '1319002996',
`product_name`= '"
.mysql_real_escape_string($data[16])."'
"
) or die(mysql_error());



You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '` = 'Модель Ranger2000 Обозначение Генераторная установка Кл' at line 6

Спустя 1 минута, 51 секунда (1.11.2011 - 03:26) imbalance_hero написал(а):
gagger
product_desc` - закрытая кавычка есть, а где открытая?

Спустя 14 минут, 38 секунд (1.11.2011 - 03:41) gagger написал(а):
Угу точно... сплю. Теперь ошибки нет и снова пустые ячейки.............

Спустя 2 минуты, 42 секунды (1.11.2011 - 03:44) imbalance_hero написал(а):
Ладно, ты меня игнорируешь, я тебя тоже буду smile.gif

Спустя 6 минут, 4 секунды (1.11.2011 - 03:50) gagger написал(а):
Блин, ну можешь объяснить что я опять не не сделал? Я серьезно уже плохо соображаю.

Спустя 3 часа, 54 минуты, 8 секунд (1.11.2011 - 07:44) Игорь_Vasinsky написал(а):
mysql_query("SET NAMES 'utf8'");
mysql_query ("INSERT INTO `jos_makroprom_vm_product` SET

`vendor_id` = 1,
`product_sku` = '"
.$prod,"',
`product_s_desc` = '"
.mysql_real_escape_string($desc)."',
`product_desc` = '"
.mysql_real_escape_string($text2)."',
`product_thumb_image` = '"
.$pic."',
`product_full_image` = '"
.$pic."',
`product_publish` = 'Y',
`product_available_date`= 1318982400,
`cdate`= 1319002912,
`mdate`= 1319002996,
`product_name`= '"
.$data[16]."'
"
) or die(mysql_error());

Спустя 2 часа, 14 минут, 44 секунды (1.11.2011 - 09:59) gagger написал(а):
В общем ничего не помогает, я не понимаю как такое может быть, но это вряд ли связанно с запросом к БД...

Спустя 8 минут, 18 секунд (1.11.2011 - 10:07) gagger написал(а):
4 страницы писали, и никто не обратил внимание на mysql_query("SET NAMES 'utf8'");

именно это и убивало текст

Спустя 9 минут, 49 секунд (1.11.2011 - 10:17) Игорь_Vasinsky написал(а):
так ты блин сам с кодировкой то определиться не мог?

Спустя 6 минут, 15 секунд (1.11.2011 - 10:23) gagger написал(а):
Игорь_Vasinsky
А то ты не знаешь как это бывает? Допускаешь ошибку ищешь совершенно в другом месте и не понимаешь почему не работает. Для этого и существует этот раздел, чтобы не упрекать, а помогать тем кто попал в такую ситуацию.

Спустя 4 часа, 9 минут, 43 секунды (1.11.2011 - 14:33) imbalance_hero написал(а):
gagger
Для начала ты не скинул скрин-шот с записями из БД.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.