Перейти к содержанию
C0DENAMED

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

Рекомендуемые сообщения

Приветствую, ребят возникла проблема. Пытаюсь написать отдельный .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 .  *******);

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так а что должно приходить, если у вас echo "done";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так а что должно приходить, если у вас echo "done";

 

Запрос не выполняется, который идет в

//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));

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте после foreach вставить

var_dump($row);

 

посмотрите, что выйдет.

 

При этом в БД не смотрели Update проходит или нет ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вы уверены что Вы написали в первом сообщении слова про себя, о том что написали модуль??? Мне кажется вы мало знакомы с 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".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.