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

Отдельный скрипт для обновления без участия ОС


Recommended Posts

Приветствую, ребят возникла проблема. Пытаюсь написать отдельный .php скрипт, который бы работал без участия магазина на сервере, и обновлял товары. Некоторое время назад я написал дополнение, которое нажатием кнопки позволяло выгружать и обновлять товары со склада поставщика через АПИ, в общем-то  скрипт рабочий, теперь появилась необходимость сделать внешнюю версию, которую можно запускать на хостинге через SSH или планировщик.

Фишка в том, что мои навыки программирования оставляют желать лучшего, пишу методом тыка.

 

Итак, вот проблемный момент:

 

Простейший php скрипт



<?php
// DB
$DB_HOSTNAME = "localhost";
$DB_USERNAME = "vladbl0m_eshop";
$DB_PASSWORD = "***********";
$DB_DATABASE = "vladbl0m_eshop";

$con=mysqli_connect($DB_HOSTNAME, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE); 

if (mysqli_connect_errno($con)) {
echo "Failed to connect to MySQL:" . mysqli_connect_error();
}

else {
echo "CONNECTED TO " . $DB_DATABASE;

.
.
.
.
.


// Establishing parent connections.

$select = $con->query("SELECT * FROM oc_category") or die("Error in the consult.." . mysqli_error($con));

foreach ($select->rows as $row) {

   if ($row['merlion_parent_id'] == 'Order') {
       $result = $con->query("UPDATE oc_category SET
       parent_id = '0',
       top = '1',
       column = '1',
       status = '1',
       date_modified = NOW(),
       date_added = NOW()
       WHERE category_id = '". (int)$row['category_id'] ."'") or die("Error in the consult.." . mysqli_error($con));

    }

else {

       $search = $con->query("SELECT category_id FROM oc_category WHERE merlion_id = '" . $merlion_parent_id . "'");
       $parent_id = $search->row["category_id"];

       $result = $con->query("UPDATE oc_category SET
       parent_id = '". (int)$parent_id ."',
       column = '1',
       status = '1',
       date_modified = NOW(),
       date_added = NOW() WHERE category_id = '" . (int)$category_id ."'") or die("Error in the consult.." . mysqli_error($con));
     }
}

echo "done";

?>  

Так вот. Эта часть выполняется пустой, то есть проходит done. и все. Запрос как будто в упор не видит. Если запускать такой же скрипт через магазин, то выполняет без проблем. Есть идеи?

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


require_once "config.php";
require_once(DIR_SYSTEM . 'library/db.php');

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$query = $db->query("SELECT * FROM " . DB_PREFIX .  *******);

как минимум так начать

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



require_once "config.php";
require_once(DIR_SYSTEM . 'library/db.php');

$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$query = $db->query("SELECT * FROM " . DB_PREFIX .  *******);

как минимум так начать

 

Спасиб, думал об этом, но все же. Большая часть кода работает, а вот тот запрос почему-то не хочет.

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


удалите все лишнее и делайте частями. Тогда сразу поймете что где не выполняется.

 

Вот тут:

Этот запрос не проходит или что. Такое ощущение что выборку не делает. Точно такой же запрос через ОС проходит. 

 

$select = $con->query("SELECT * FROM oc_category") or die("Error in the consult.." . mysqli_error($con));

foreach ($select->rows as $row) {

if ($row['merlion_parent_id'] == 'Order') {

$result = $con->query("UPDATE oc_category SET

parent_id = '0',

top = '1',

column = '1',

status = '1',

date_modified = NOW(),

date_added = NOW()

WHERE category_id = '". (int)$row['category_id'] ."'") or die("Error in the consult.." . mysqli_error($con));

}

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


нет такого проходит или нет!! Или есть ошибки или результат пустой.

Вы уверены что Вы написали в первом сообщении слова про себя, о том что написали модуль??? Мне кажется вы мало знакомы с php и простейшими методами отладки!!!

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

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

ошибки у вас начиная вот с этого места

$select = $con->query("SELECT * FROM oc_category") or die("Error in the consult.." . mysqli_error($con));

вы их не видите потому как они отключены.
а допускаете вы их потому как пытаетесь вызывать методы OpenCart, не имея его в окружении

я бы вам посоветовал посмотреть тему https://opencartforum.com/topic/5095-modul-rabotaiuschii-cherez-cron/

 

но судя по тому какой бред вы пишите в коде, думаю вопросов будет ещё больше

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

нет такого проходит или нет!! Или есть ошибки или результат пустой.

Вы уверены что Вы написали в первом сообщении слова про себя, о том что написали модуль??? Мне кажется вы мало знакомы с php и простейшими методами отладки!!!

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

Результат пустой! Ошибки не показывает, поэтому немогу понять в чем дело. Пробовал по разному и mysql_query("..."). Сам скрипт проходит до конца, то есть после выполнения выводит done. 

 

 

Вот тот же самый кусок из модуля, например.

// Establishing parent connections.
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category");

foreach ($query->rows as $row) {

$category_id = $row['category_id'];
$merlion_parent_id = $row['merlion_parent_id'];

if ($merlion_parent_id == 'Order') {
$this->db->query("UPDATE " . DB_PREFIX . "category SET parent_id = '0', `top` = '1', `column` = '1', status = '1', date_modified = NOW(), date_added = NOW() WHERE category_id = '". (int)$category_id ."'");
}
else {
$search = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "category WHERE merlion_id = '" . $merlion_parent_id . "'");
$parent_id = $search->row["category_id"];
$this->db->query("UPDATE " . DB_PREFIX . "category SET parent_id = '". (int)$parent_id ."', `column` = '1', status = '1', date_modified = NOW(), date_added = NOW() WHERE category_id = '" . (int)$category_id ."'");
}
$this->cache->delete('category');
}
Надіслати
Поділитися на інших сайтах


ошибки у вас начиная вот с этого места

вы их не видите потому как они отключены.

а допускаете вы их потому как пытаетесь вызывать методы OpenCart, не имея его в окружении

я бы вам посоветовал посмотреть тему https://opencartforum.com/topic/5095-modul-rabotaiuschii-cherez-cron/

 

но судя по тому какой бред вы пишите в коде, думаю вопросов будет ещё больше

 

Ознакомлюсь. Просто не хотелось в такой простой скрипт пихать кишки от опенкарта, когда можно вроде как обойтись обычными Mysql запросами...

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


так вы сами лезите в эти кишки

вам, судя по всему, следует писать следующее

$result = mysql_query("SELECT * FROM oc_category", $conn);
if($result) {
    while ($row = mysql_fetch_array($result)) {
Надіслати
Поділитися на інших сайтах

 

так вы сами лезите в эти кишки

вам, судя по всему, следует писать следующее



$result = mysql_query("SELECT * FROM oc_category", $conn);
if($result) {
    while ($row = mysql_fetch_array($result)) {

Признателен за помощь. Завтро попробую.

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


Заготовка для использования БД opencart во внешних скриптах

<?php
require_once "config.php";
// Кэш если нужен
require_once(DIR_SYSTEM . 'library/cache.php');
$cache = new Cache();
// БД 
require_once(DIR_SYSTEM . 'library/db.php');
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$db->query('запрос');
?> 

Если понадобится.

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

Заготовка для использования БД opencart во внешних скриптах


Если понадобится.

 

если бы понадобился, был бы применен еще после второго сообщения, которое гласит тем же самой заготовкой....

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

Заготовка для использования БД opencart во внешних скриптах



<?php
require_once "config.php";
// Кэш если нужен
require_once(DIR_SYSTEM . 'library/cache.php');
$cache = new Cache();
// БД 
require_once(DIR_SYSTEM . 'library/db.php');
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$db->query('запрос');
?> 

Если понадобится.

Да, понадобился. Оказалось просто. А можно же тогда вызвать уже готовую функцию прямо из model? Чем переписывать это все...

Вот только там $this что такое не могу понять. Что нужно присоединить, чтобы он понимал

$this->db->query ? Или проще просто заменить на $db->query?

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


Да, понадобился. Оказалось просто. А можно же тогда вызвать уже готовую функцию прямо из model? Чем переписывать это все...

Вот только там $this что такое не могу понять. Что нужно присоединить, чтобы он понимал

$this->db->query ? Или проще просто заменить на $db->query?

 

$this это главный класс OpenCart, это так сказать основа всего приложения. Чтобы вызвать функцию из model или подружать контроллеры необходимо эмулировать работу OpenCart. Т.е. "index.php" и "system/startup.php".

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

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

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

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

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

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

Вхід

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

Вхід зараз

×
×
  • Створити...

Important Information

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