Перейти к содержимому


Вычисления по расписанию (или через CRON)


Сообщений в теме: 13

#1 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Февраль 2013 - 17:54

Есть вычисление, при котором при просрочке даты сменяется статус заявки, но вычисление может быть произведено в лучшем случае при отображении, как сделать, что бы это вычисление произошло к примеру каждый день в 3 ночи (как это можно сделать для CRON)?
Код вычисления:
if ($line['Статус брони']=="Забронирован" and $line['Забронировано до']<date ("Y-m-d 00:00:00")) $line['Статус брони'] = "Просроченная бронь";
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Февраль 2013 - 18:31

Собственно создаете задание cron и добавляете туда свое вычисление. Но там разумеется бессмысленно использовать переменную $line, т.к. нет текущей строки, необходим прямой запрос к нужной таблице.

#3 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Февраль 2013 - 18:40

Можно какой-либо пример, что бы понять общий формат, а нужные цифры ID таблицы и строки подставлю
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 05 Февраль 2013 - 18:43

Примеры запросов есть в документации. Да и на форуме их более чем достаточно.

#5 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 05 Февраль 2013 - 19:20

Есть возможность написать эту строчку? Я пользуюсь документацией, но не до конца знаю что искать!
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 06 Февраль 2013 - 09:11

Здесь примеры есть: http://clientbase.ru...16/php_samples/ Там хоть и написано, что это вычисления для старых версий, но под этим имеется ввиду вычисления в таблице, а для крона - наоборот самое то, т.к. там вычисления с запросами к БД. Единственно, необходимо заменить в примерах {ID} на реальный id записи, или переменную, или иное свое условие, т.к. {ID} в кроне работать не будет (по той же причине что там нет текущей записи)

#7 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 06 Февраль 2013 - 10:40

Почему то не срабатывает, посмотрите?
Вычисление:
$data = data_table("Автомобили DAF","id=121");
$dat = date("Y-m-d 00:00:00");
if ($data['Статус брони']=="Забронирован" and $data['Забронировано до']<$dat);
$data['Статус брони'] = "Просроченная бронь";
Лог Крона:
2013-02-06 11:35:36 - OneTime -
ID таблицы автомобили DAF = 121
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#8 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 06 Февраль 2013 - 10:55

Подозреваю, что проблема в строке:
$data = data_table("Автомобили DAF","id=121");
id=121 - сюда указывается ID таблицы? или ID записи из таблицы? Если второе, то как прописать для всех строк таблицы?
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 06 Февраль 2013 - 10:56

А где у вас запрос на обновление записи? Вы заполняете переменную $data['Статус брони'], но никуда ее не записываете. Я же вам говорил, не путайте ситуацию с вычислениями в таблице, где достаточно просто заполнить переменную $line, а сохранит данные сама программа в текущую запись автоматом. Здесь же текущей записи нет, соответственно нужен явный запрос на запись в таблицу. Используйте функцию update_query, в тех примерах она тоже есть.

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 06 Февраль 2013 - 11:06

Цитата

id=121 - сюда указывается ID таблицы? или ID записи из таблицы?

ID записи, разумеется. Вообще, вторым аргументом функции идет условие запроса, в данном случае у вас это "id=121", где id - имя служебного поля id (ид записи), 121 - значение id.

Цитата

Если второе, то как прописать для всех строк таблицы?

Если для всех, то условие пустое. Но такого практически не бывает, как правило задается хотя бы отбор по активным записям (т.е. не архив и не корзина): "status=0". Но если вам нужен проход по нескольким записям, то придется добавлять цикл:

$lines = data_table("Автомобили DAF", "status=0", "all"); // параметр all говорит, что нам нужна не только первая запись из набора, а все
foreach ($lines as $data) // цикл по набору записей
{
  $dat = date("Y-m-d 00:00:00");
  if ($data['Статус брони']=="Забронирован" and $data['Забронировано до']<$dat);
  $data['Статус брони'] = "Просроченная бронь";
  update_query ($data, "Автомобили DAF", "id=".$data['ID']); // запрос на обновление текущей в наборе записи
}


#11 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 06 Февраль 2013 - 11:30

Работает!! Спасибо большое! Когда есть рабочий пример сильно проще дальше делать подобные!

Сообщение отредактировал ber: 06 Февраль 2013 - 11:41

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#12 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 07 Февраль 2013 - 14:34

Всплыла проблема... CRON срабатывает постоянно, хоть и условие не выполняется.
Текст условия:

$lines = data_table("Автомобили DAF", "status=0", "all"); // параметр all говорит, что нам нужна не только первая запись из набора, а все
foreach ($lines as $data) // цикл по набору записей
{
$dat = date("Y-m-d 00:00:00");
if ($data['Статус брони']=="Забронирован" and $data['Забронировано до']<$dat);
$data['Статус брони'] = "Просроченная бронь";
update_query ($data, "Автомобили DAF", "id=".$data['ID']); // запрос на обновление текущей в наборе записи
}

Лог смены статусов:
Свободен - Просроченная бронь | 2013-02-07 15:30:36 | Cron

Как видно из условия, статус Свободен Крон вообще не должен трогать, в чём ошибка условия? он применяет сценарий ко всем записям без проверки выполнения условия

Сообщение отредактировал ber: 07 Февраль 2013 - 14:39

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Февраль 2013 - 15:07

Просмотр сообщенияber (07 Февраль 2013 - 14:34) писал:

if ($data['Статус брони']=="Забронирован" and $data['Забронировано до']<$dat);
зачем точка с запятой в конце?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 237 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 07 Февраль 2013 - 15:37

Просмотр сообщенияandibrag (07 Февраль 2013 - 15:07) писал:

зачем точка с запятой в конце?

спасибо, и правда, ошибочка
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто





Количество пользователей, читающих эту тему: 12

0 пользователей, 12 гостей, 0 анонимных