Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Добрый день, пытаюсь сделать парсер товаров. Вытягиваю из нужных мне тегов данные товара и записываю в бд. Возникла проблема с записью в БД - добавляется только одно поле. 

foreach ($res as $elkis) // в $res хранятся спарсенные данные
            {
            //echo "<br/>".$elkis['product_id']."-".$elkis['descript']."<br/>";
			$x = $elkis['product_id'];
            $name = $elkis['name'];
            $prices = $elkis['price'];
            //$descript = $elkis['descript'];
			$query = "INSERT INTO product (`model`, `price`, `status`, `quantity` ) VALUES ('$name', '$prices', '1', '99')";
            }
            
			mysql_query($query) or die(mysql_error());
			mysql_close();

Парсинг происходит с помощью Simple html dom. $elkis['product_id'] и $elkis['name'] это вытянутые данные. Через echo проверял - выводятся все товары как надо. Что я упускаю?

 

Надіслати
Поділитися на інших сайтах


Нашел ошибку: mysql_query($query) or die(mysql_error()); был за пределами цикла. 
Но возник неприятный баг - не добавляются русские символы. БД и файл скрипта в utf-8.
UPD: попробовал просто записать русские символы через переменную и просто в поле, все норм:

function SaveToDB($res, $sQuery)
		{
			/* Переменные для соединения с базой данных */
			$hostname = "localhost";
			$username = "root";
			$password = "12345678";
			$dbName = "parsing";
			
			/* создать соединение */
			mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
			if (!mysql_select_db($dbName))
			{
				if (mysql_errno() == 1049)
				{		
					mysql_query("CREATE DATABASE ".$dbName." CHARACTER SET utf8 COLLATE utf8_general_ci;") or die(mysql_error());
					mysql_select_db($dbName);
				}
			}

			
			mysql_query("CREATE TABLE IF NOT EXISTS `parsinginfo` (
			`id` int(11) NOT NULL AUTO_INCREMENT,
			`textquery` varchar(255) NOT NULL,
			`data` varchar(255) NOT NULL,
			`date` varchar(255) NOT NULL,
			PRIMARY KEY (`id`))");
			
	    mysql_query("SET NAMES 'utf8'");
            foreach ($res as $elkis) 
            {
            $x = $elkis['product_id'];
            $name = $elkis['name'];
            $prices = $elkis['price'];
            $descript = $elkis['descript'];
            $data = "Мама мыла раму";   //эта запись норм добавляется в БД
            //echo "".$elkis['product_id']."-<b>".$elkis['name']."</b>-".$elkis['descript']."<br>";
			$query = "INSERT INTO parsinginfo (`title`, `product_id`, `price`, `description`, `data`, `date`) VALUES ('Мама', '$x', '$prices', '$descript', '$data', NOW())";
            mysql_query($query) or die(mysql_error());
            }
		}
Змінено користувачем xboltikxx
Надіслати
Поділитися на інших сайтах


А в базу вносить значения по $x = $elkis['product_id']; кто будет ?

попробуйте сделать по типу:

 

$query = "INSERT INTO product (`product_id`, `model`, `price`, `status`, `quantity` ) VALUES ('$x', '$name', '$prices', '1', '99')";

  • +1 1
Надіслати
Поділитися на інших сайтах

Прошу прощения, неправильно вставил код, исправил выше.

 

 

Еще, если убрать mysql_query("SET NAMES 'utf8'");   то добавляются "кракозябры" . Вопрос остается открытым про кодировку.

 

UPD:

$descript = iconv("windows-1251", "utf-8", $descript); 

Это помогло. Если кто знает более элегантное решение, то буду очень благодарен.

Змінено користувачем xboltikxx
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.