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

Проблема з імпортом коментарів в опенкарт


Recommended Posts

Вітаю. Переношу сайт з самописного магазину на опенкарт. Зараз дійшов до перенесення коментарів. Накидав такий скрипт. Запускаю його, але не всі коментарі імпортуються в БД.

Прихований текст
<?php
require_once('config.php');

$connection = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

if ($connection->connect_error) {
    die("Error: " . $connection->connect_error);
}

$csvFile = 'com.csv';
$file = fopen($csvFile, 'r');
$a = 0;
while (($data = fgetcsv($file, 1000, ';')) !== false) {
    $review_id = $data[0];
    $customer_id = $data[3];
    $location = $data[5];
    $date_add = $data[7];
    $username = $data[8];
    $email = $data[9];
    $message = $data[10];
    $good_plus = $data[11];
    $good_minus = $data[12];
    $rating = $data[17];
    $status = $data[18] = true ? 1:0;

    $productIdQuery = $connection->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE location = '" . $location . "'");
    $productId = ($productIdQuery->num_rows > 0) ? $productIdQuery->fetch_assoc()['product_id'] : 0;

    if ($productId > 0) {
        $reviewQuery = "INSERT INTO " . DB_PREFIX . "review (review_id, product_id, customer_id, author, text, admin_reply, purchased, minus, plus, rating, status, date_added, date_modified) VALUES ('$review_id', '$productId', '$customer_id', '$username', '$message', '', 0, '$good_minus', '$good_plus', '$rating', '$status', '$date_add', '0000-00-00 00:00:00')";
        $connection->query($reviewQuery);
    }
    $a++;
    //echo $a . "<br>";
    //var_dump($reviewQuery);
}

fclose($file);
$connection->close();

echo "Done!";
?>

 

Коли починаю дампити виконання, то бачу ось таку річ:

Прихований текст

image.thumb.png.3548d8979810e6946faf4a6044c6c248.png

Хоча реально рядок виглядає нормальним:

211;0;0;0;http://;2930;eshop;2015-01-22 22:56:00;Михаил;[email protected];За неделю работы существенных недостатков не выявил, в руке сидит нормально, 150е саморезы в сосновый брус крутит с натягом, хотя это наверное перебор для шурика. В аккумуляторах 5 банок по 2к миллиампер, вольтаж заряженной батареи 20 вольт примерно, разряжалась максимум до 17.8 и шурик отказывался работать. Зарядка примерно 30 минут, очень удобно что штекер вставляется на прямую в батарею, в случае разряда можно работать как сетевым. Мне батареи хватает на 2 часа работы, кручу от 80 до 150 мм саморезы, сверлю тоже им. Лично мое мнение что литий батареи мнение тяговые чем никелевые, но зато они гораздо живучей и выносливей. В батареи стоит контролер который отключает питание при превышении максимально допустимой силы тока на двигателе, немного не привычно по началу. Шуриком доволен. ;цена, качество.;немного люфтит аккумулятор, хотя этот недостаток легко устраняется небольшой полоской скотча на ответной части разъема под аккумулятор. Литий на морозе нормально не работает, в зимнее время на морозе много ним не наработать.;109.196.185.183;1;1163779291;FALSE;4;TRUE;;;new

Хто що порадить?

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

'$review_id', '$productId',?????

'" . (int)$review_id . "', '" . (int)$productId . "',

может так лучше будет?

 

a для текста: 

$connection->escape($value['name'])
Надіслати
Поділитися на інших сайтах

В 24.09.2024 в 17:08, ibond сказав:

может так лучше будет?

Ну тут я особливо не заморочувався, так дійсно краще, але проблема саме в тексті.

 

В 24.09.2024 в 17:08, ibond сказав:

a для текста: 

Дякую. Спробую 

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

24.09.2024 в 17:29, Flint2000 сказал:

Ну тут я особливо не заморочувався

так вы смотрите как в модельках нарисовано

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

В 24.09.2024 в 17:34, ibond сказав:

так вы смотрите как в модельках нарисовано

Так це одноразовий скрипт, я не прив'язувався до синтаксису опенкарту, просто мені потрібно було по локейшину прив'язати коментарі до товарів.

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

24.09.2024 в 17:38, Flint2000 сказал:

я не прив'язувався до синтаксису опенкарту

а это что?

$connection = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
  • +1 1
Надіслати
Поділитися на інших сайтах

Ну це так, підловили

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

В 24.09.2024 в 17:08, ibond сказав:
$connection->escape($value['name'])

Не працює це

Питання відкрите

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

24.09.2024 в 22:31, Flint2000 сказал:

Не працює це

Что именно? Покажите новый код, ошибки?

Дайте дамп пустой таблицы.

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

В 25.09.2024 в 17:20, ibond сказав:

Что именно? Покажите новый код, ошибки?

Дайте дамп пустой таблицы.

імпортуються не всі коментарі, а саме ті в яких ось це. Як бачите в запиті текст має символ, який ломає запит

Прихований текст

image.thumb.png.8642c7abde1a515dad450a9734b6a11a.png

Прихований текст
<?php
require_once('config.php');

$connection = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

if ($connection->connect_error) {
    die("Ошибка соединения: " . $connection->connect_error);
}

$csvFile = 'com.csv';
$file = fopen($csvFile, 'r');
$a = 0;
while (($data = fgetcsv($file, 1000, ';')) !== false) {
    $review_id = $data[0];
    $customer_id = $data[3];
    $location = $data[5];
    $date_add = $data[7];
    $username = $connection->real_escape_string($data[8]);
    $email = $connection->real_escape_string($data[9]);
    $message = $connection->real_escape_string($data[10]);
    //$message = $data[10];
    $good_plus = $connection->real_escape_string($data[11]);
    $good_minus = $connection->real_escape_string($data[12]);
    $rating = $data[17];
    $status = $data[18] = true ? 1:0;
    $purchased = "0";
    $admin_reply = "";
    $date_modified = "0000-00-00 00:00:00";

    $productIdQuery = $connection->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE location = '" . $location . "'");
    $productId = ($productIdQuery->num_rows > 0) ? $productIdQuery->fetch_assoc()['product_id'] : 0;
    if ($productId > 0) {

        $reviewQuery = "INSERT INTO " . DB_PREFIX . "review SET review_id = '" . (int)$review_id . "', product_id = '" . (int)$productId . "', customer_id = '" . (int)$customer_id . "', author = '" . $username . "', text = '" . $message . "', admin_reply = '" . $connection->real_escape_string($admin_reply) . "', purchased = '" . $connection->real_escape_string($purchased) . "', minus = '" . $good_minus . "', plus = '" . $good_plus . "', rating = '" . (int)$rating . "', status = '" . (int)$status . "', date_added = '" . $date_add . "', date_modified = '" . $connection->real_escape_string($date_modified) . "'";


        $connection->query($reviewQuery);
    }
    $a++;
    echo $a . "<br>";
    var_dump($reviewQuery);
}

fclose($file);
$connection->close();

echo "Done!";
?>

 

 

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

$connection->real_escape_string?

уже в mysqli есть:

public function escape($value) {
    return $this->connection->real_escape_string($value);
}

у вас в коде должно работать $connection->escape, если бы вы подгружали как $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT); то было бы  $db->escape. Все текстовые поля так надо обернуть (минус плюс и т.д.). И должна быть ошибка, добавьте в скрипт вывод ошибок:

 

ini_set("display_errors",1);
error_reporting(E_ALL);

 

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

@ibond

$connection = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

У мене конструкція звичайна https://www.php.net/manual/en/mysqli.quickstart.connections.php

Помилок ніяких немає

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

При var_dump строки - тоже кракозяблы?

 

если ткнуть пальцем в небо - смотреть кодировку исходного файла

 

либо длинный текст который message прогнать через

 

$message = iconv(mb_detect_encoding($message), 'UTF-8', $message);

 

либо вообще весь sql-запрос

 

есть еще приколы с кириллицей, играться этим

 

mbstring.func_overload=2

mbstring.internal_encoding=UTF-8

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

В 25.09.2024 в 20:33, spectre сказав:

При var_dump строки - тоже кракозяблы?

 

Так

 

В 25.09.2024 в 20:33, spectre сказав:

если ткнуть пальцем в небо - смотреть кодировку исходного файла

 

UTF-8

 

В 25.09.2024 в 20:33, spectre сказав:

либо длинный текст который message прогнать через

 

Так, саме на довгих текстах таке

@spectre Дякую

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

25.09.2024 в 21:02, Flint2000 сказал:

Так, саме на довгих текстах таке

dump показать и можно увидеть кодировку, о чем просил

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

25.09.2024 в 21:31, ibond сказал:

dump показать и можно увидеть кодировку, о чем просил

наверное поняли не так мой dump, имелось ввиду dump таблицы mysql

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

25.09.2024 в 19:51, Flint2000 сказал:

У мене конструкція звичайна https://www.php.net/manual/en/mysqli.quickstart.connections.php

Помилок ніяких немає

А кто вам сказал, что там ошибки?

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

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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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