Посылать данные db в некоем дне и часе (хоть бы без cronjobs)

Я нуждаюсь в том, чтобы послать в мою базу данных "1" в некоем дне и часе, кроме того послать "0" в другом дне и часе.

Например, Что, когда это будет Четверг и сейчас 13:30, послал "1", и когда это будет Суббота, и они были те 09:00 часы, он послал "0".

В эти дни, часы и этот "1" / "0" они находятся в той же таблице, как он показывает изображение:

introducir la descripción de la imagen aquí

Тогда интерпретируя эти колонны, когда будет выполнено расписание inicio (Пятница, 00:00) становится отвечающей современным требованиям колонна habilitada с "1", когда будет выполнено расписание termino (Суббота, 12:00), становится отвечающей современным требованиям колонна, "данная возможность" с "0".

Это то, что у меня есть до настоящего времени и оно функционирует, но только, когда я перезагружаю archivo.php в минуте совпадения:

query("SELECT inicio,termino FROM `horario_envio`") as $fila){
    $inicio = htmlentities($fila['inicio']);            //hora inicio en la db
    $termino= htmlentities($fila['termino']);           //hora termino en la db
  }

  if($diahora == $inicio){        //si día y hora actual son iguales al campo inicio
    $si = "1";
    $update = $db->prepare("UPDATE `horario_envio` SET habilitada = :si");
        $update->bindValue(':si',$si,PDO::PARAM_STR);
        $update->execute();    //pongo el "1"
  }
  if($diahora == $termino){     //si dia y hora actual son iguales al campo termino
    $no = "0";
    $update = $db->prepare("UPDATE `horario_envio` SET thabilitada = :no");
        $update->bindValue(':no',$no,PDO::PARAM_STR);
        $update->execute();    //pongo el "0"
  }
?>

Я был исследовано в stackoverflow на английском и, понял ли я добро, большинство предлагает использование cron-jobs для сходных заданий, также я увидел видео Вашего использования и то, что они делают, состоит в том, чтобы уходить в контроль панель Вашего hosting и там они программируют выполнение неких заданий.

Но я это не хочу, мне нужно, чтобы мое отправление данных осуществилось только согласно часу начала и термину, который я показал более наверху, что они находятся в моем db.

В этом post, пользователь @cmc дал три решения, первая - с cron, вторая - с бесконечным циклом, что рекомендовало как последняя инстанция, и третий выбор - user driven.

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

// you can simply include a the job this in your page footer, when there is no more output.

Я не понимаю, как могло бы применяться это к моему случаю, что он говорит, - что-то как:

  • включи это в footer твоей страницы, когда они прекратят выйти

  • возьми последнее выполнение времени db

  • если эта стоимость, которую ты только что взял, меньше в настоящее время + 24 часа:

    • setea последнее выполнение со времени до настоящего часа db

    • что-то.

В конце концов, я не знаю, как применять это.

Я пробую делать это в php, но если бы не было возможно и существовал другой путь, чтобы делать то, что я описал сначала, равный он мог бы применять ее, даже, если бы единственный путь пошел cron-jobs.

Спасибо за Ваше внимание.

EDIT

Почему он не подает меня cron?

Стоимость я "инициализируюсь" и "заканчиваюсь" таблицы, которую я поместил наверху, они проконтролируют ранг часов, которые и "они должны быть" изменяемые с frontend сайта, тогда никогда не будет установленного ранга часов, будешь меняться, в зависимости от которого выбрал администратор с платформы и был введен в базе данных.

Подтверждая примерами немного: Я хочу предложить программу, которая позволяла бы моему клиенту устанавливать ранг часов, между которыми Ваш персонал сможет посылать некие данные в базу данных. И я не хочу, чтобы мой клиент был должен использовать cron, когда он захочет изменить это расписание, но он это сделает автоматически с frontend.

0
задан 23.05.2017, 15:39
5 ответов

Ввиду ограничений, которые этот вопрос представлял (не использовать cron-jobs, не использовать mysql event_scheduler из-за того, что быть выведенным из строя в hosting бесплатные) и благодаря ответам, которые пришли ко мне давая пользователи, мы закончили, что самый подходящий способ делать работу, которой я требую (позволять действия внутри временного ранга), он состоит в том, чтобы разрабатывать алгоритм, который оценивал бы, если в настоящее время расположены внутри временного ранга выполнять отправление данных.

Изначально я выставил таблицу, с которой он работал, где он хотел поместить "1" или "0" в некий час в области "уполномоченной" колонны:

introducir la descripción de la imagen aquí

Но даже он не нуждался в этом поле, так как чтобы разрабатывать алгоритм, который позволял бы мне оценивать, если в настоящее время - внутри ранга часов, предопределенного полями "начала", и я "заканчиваюсь", только я нуждаюсь в этих двух полях.

Тогда то, что я сделал, пошло, сначала приносить эти два поля в мой файл php, также было получено день и настоящий час, тогда с этими тремя данными (день / в час inicio, actual и termino) я перехожу, чтобы давать ему некое первенство каждому дню недели как дня inicio, это позволит мне давать ему числовую стоимость в дни inicio, actual и termino, считая также час inicio, actual и termino чтобы осуществлять условие, которое скажет мне, действительно - ли внутри ранга или нет.

Я оставляю код, если он интересует кого-то:

<?php 
date_default_timezone_set("America/Santiago");     
$hoy = getdate();       

$dia = $hoy["wday"];
$dias = ["Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado"];
$dia = $dias[$dia];                  //nombre del día actual

$hora = $hoy["hours"];              //la hora
$minuto = $hoy["minutes"];      //los minutos

if($hora < 10) $ceroh = "0";
else $ceroh = "";

if($minuto < 10) $cerom = "0";
else $cerom = "";

$diahora = $dia.",".$ceroh.$hora.$cerom.$minuto;  //day,time actual

include 'connect.php';

foreach($db->query("SELECT inicio,termino FROM `horario_envio`") as $fila){
  $inicio = htmlentities($fila['inicio']);    //dia,hora de inicio
  $termino= htmlentities($fila['termino']);   //dia,hora de termino
}

$diai = strtok($inicio, ",");                      //obtengo el dia de inicio
$diat = strtok($termino, ",");                 //obtengo el dia de termino

if($diai == "Lunes"){
    $prioridad = array("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Martes"){
    $prioridad = array("Martes","Miercoles","Jueves","Viernes","Sabado","Domingo","Lunes");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Miercoles"){
    $prioridad = array("Miercoles","Jueves","Viernes","Sabado","Domingo","Lunes","Martes");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Jueves"){
    $prioridad = array("Jueves","Viernes","Sabado","Domingo","Lunes","Martes","Miercoles");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Viernes"){
    $prioridad = array("Viernes","Sabado","Domingo","Lunes","Martes","Miercoles","Jueves");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Sabado"){
    $prioridad = array("Sabado","Domingo","Lunes","Martes","Miercoles","Jueves","Viernes");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}
if($diai == "Domingo"){
    $prioridad = array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");
    $pda = array_search($dia, $prioridad);  //prioridad dia actual
    $pdt = array_search($diat, $prioridad); //prioridad dia termino
}

$pdi = 0;                                    //prioridad dia inicio

$hini = substr($inicio, -5);
$hter = substr($termino, -5);
$hini = (int)str_replace(":", "", $hini);   //obtengo la hora de inicio en números
$hter = (int)str_replace(":", "", $hter);   //obtengo la hora de termino en números
$hact = (int)substr($diahora, -4);       //obtengo la hora actual en números

if(($pda>$pdi or ($pda==$pdi and $hact>=$hini)) and ($pda<$pdt or ($pda==$pdt and $hact<$hter))){
    $sepuede = true;                        //evalúo si el día y hora actual están dentro
}else $sepuede = false;                 // del rango de horas preestablecido

if($sepuede){                         //si se está dentro del rango de horas:
    $rut = $_POST["rut"];             //hago el insert con los datos enviados
    $pedidos = $_POST["pedidos"];
    $update = $db->prepare("INSERT INTO `t...
    $update->execute();
}
else echo "no";

?>

Тогда в frontend я призываю к этому файлу с функцией $ .ajax JQuery, перемещая его данные, которых здесь я получаю посредством POST, если в success я получаю один "не", я дам бдительность для того, чтобы пользователь знал, что Ваши смены не были посланы из-за того, что были вне ранга часа.

Код функционирует верно, но любая подсказка, чтобы это оптимизировать, - втречена с радостью.

Благодаря всем из-за Ваших вкладов.

1
ответ дан 24.11.2019, 12:45

Чтобы отвечать на твой вопрос

То, что этот ответ, о котором ты упоминаешь, автор хочет сказать, состоит в том, чтобы ты включил твое задание в конце рукописного шрифта, с которым ты производишь страницы твоего сайта.

Предполагая, что у тебя есть один или несколько scripts, с которыми ты производишь контент твоего сайта, в конце выражения (s) рукописный шрифт (s) ты мог бы делать необходимым для того, чтобы твое задание осуществилось. Таким образом, каждый раз, когда был hit в твоем сайте, будет работать вышеупомянутый код и следовательно могло бы осуществляться задание, которое интересует тебя.

Давайте предполагать, что у тебя оригинально есть один index.php с этим контентом:

<?php
  echo "hola, bienvenido a mi sitio";
?>

В конце концов, размести код, который уже у тебя есть в функции (я буду называть ее actualizarStatusDB) и твой рукописный шрифт мог бы оставаться нечто похожее:

<?php
  include 'miFuncion.php';

  //acá inicia tu script original
  echo "hola, bienvenido a mi sitio";
  //acá terminar tu script original

  actualizarStatusDB();  //llamada a la función que actualiza el status
?>

В этом случае, у твоей страницы должен быть по крайней мере hit в минуту, для того, чтобы это функционировало, и поэтому дело в том, что первоначальный автор инициализируется говоря:

If you have в decent amount of traffic on your сайт...

Если трафик твоей страницы меньше, ты должен реализовывать настройки в твоем рукописном шрифте для того, чтобы он, например, изменил стоимость на DB в первом вызове час спустя. Все же, ты требуешь порядочной общей суммы трафика, чтобы этого добиваться.

Аналитическая часть

Сейчас, ввиду того, что ты упоминаешь о том, что ты находишься в бесплатном hosting, осведомляюсь я: зачем ты нуждаешься в этой стоимости, обновленной в базе данных? Так как эта конечно также закрылась, и я сомневаюсь, что ты можешь использовать ее для интеграции с внешней системой..., думай: почему он должен быть обновленным?

Если ты нуждаешься в этом для самого функционирования твоего сайта, мой совет: забудь поле в DB и произведи стоимость каждый раз, когда ты нуждался в этом.

1
ответ дан 24.11.2019, 12:45
  • 1
    Спасибо за aclaraci и # 243; n, я вижу, что он не подает мне user driven. Относительно Анальной части и # 237; костариканская, я нуждаюсь в том, что эта информация est и # 233; обновленный, так как идея он состоит в том, чтобы позволять пользователям моей Веб платформы, посылать некие данные внутри ранга часов, тогда с этим " 1" или " 0" podr и # 233; проверять, если в настоящее время est и # 225; или уже я вышел и # 243; такого ранга. Если тебе приходит в голову какой-то другой способ это делать, пожалуйста h и # 225; zmelo знать, quiz и # 225; я осложняюсь слишком много, петля и # 225; что был экспертом и # 237;. Конечно, стоимость " inicio" и " termino" моему db они изменяемые с frontend сайта, поэтому он не подает меня cron. – Roberto Sepúlveda Bravo 04.11.2016, 00:13
  • 2
    Так как просто каждый раз, когда ты пошлешь информацию, стоившая, если настоящий час est и # 225; внутри ранга, позволенного в configuraci и # 243; n, y, в случае когда этого ты не, ты не обрабатываешь petici и # 243; n а ты отвечаешь с ошибкой. – jachguate 04.11.2016, 02:53
  • 3
    В чем-то эксперт и # 237; я работаю в этом моменте, думаю, что из-за ах и # 237; идет вещь, только я должен создавать хорошо этот большой if validaci и # 243; n, он делается мне dif и # 237; cil, так как я должен оценивать их d и # 237; эксперт недели и часов, которые они приносят, давать им некий jerarqu и # 237; в деньги и # 225; слюда в этих d и # 237; схвати, чтобы устанавливать хорошо ранг, когда он будет иметь, например в любой час: я инициализируюсь: Я и # 233; rcoles, я заканчиваюсь: Пятница. Или начало: В пятницу, я заканчиваюсь: Я и # 233; rcoles. Или начало: В воскресенье, я заканчиваюсь: Воскресенье (немного позже). – Roberto Sepúlveda Bravo 04.11.2016, 03:04
  • 4
    я этого добился! хотя уже soluci и # 243; n он вытекает из рамы моего первоначального вопроса, так как я не нуждался в и # 241; adir этот " 1" или " 0" просто я сделал evaluaci и # 243; n ранга часов направляя час начала, я заканчиваюсь, и настоящий час. Цюй и # 233; быть должным и # 237; чтобы делать? напечатал soluci и # 243; n конец или он не соответствует из-за того, что вытекает из рамы вопроса? – Roberto Sepúlveda Bravo 04.11.2016, 05:27
  • 5
    @RobertoSep и # 250; lvedaBravo Помести ответ показывая, что нет soluci и # 243; n возможный ввиду ограничений, которые ты автонавязал себе, и в ограничения, которые тебе помещает твоя услуга hosting (он перечисляет cu и # 225; они они), и потом объясни альтернативу, которую они советовали тебе, и как ты разработал ее, потому что ты понял, что это правильная альтернатива в твою реальную проблему (позволять acci и # 243; n во временном ранге). Ты был v и # 237; ctima так называемой проблемы XY, которую состоит в том, чтобы спрашивать на (Y) твой soluci и # 243; n, вместо того, чтобы спрашивать на (X) твою проблему. – Peregring-lk 04.11.2016, 05:57

Я также осведомляюсь о, почему не делать это посредством cron хотя ты выставляешь, что "идея он состоит в том, чтобы позволять пользователям моей Веб платформы, посылать некие данные внутри ранга часов".No у меня остается ясным: посылать почту с твоей Веб платформы? или: посылать данные в базу данных?. В любом случае функция, которая берется за то, чтобы посылать "эти данные", могла проверять, если он работает в установленном расписании (будьте сказано установленное заранее программирование или gestionable также) для пользователя или для всех пользователей платформы. И если ты уйдешь из-за cron, так как просто cron он будет выполнять контент файла, следовательно там будет вызов по крайней мере в функцию, которая будет управляющей санкционирования, если - внутри расписания, позволенного, чтобы "посылать некие данные"

Улучшая ответ: давайте исходить из следующего: у твоего приложения есть пользователи, уже будьте в качестве менеджера (давайте называть его таким) и других пользователей под списком, использованным (хотя менеджер - служащий также, но давайте оставлять это простым).

  • У пользователей менеджер будет способность создавать (с frontend говоришь ты) calendarizaciones для отправления информации, как??: с UI escojen датируй и час начала и конец периода, позволенного, чтобы посылать информацию.

    И использованные пользователи, будут стараться посылать информацию в определенном моменте дня.

Просто твоя система (твоя Веб платформа) должна будет быть способна проверять, что момент (дата и час), в котором служащий пробует посылать информацию, - внутри интервала calendarización, созданного пользователем менеджер. Я думаю, что твоя проблема не так программирования а рисунка твоей системы.

Именно из-за этого мы делаем incapiés в аналитической части

1
ответ дан 24.11.2019, 12:45
  • 1
    То, за чем оно последует, что стоимость " inicio" и " termino" таблицы, которую я поместил наверху, они изменяемые с frontend сайта, поэтому он не подает меня cron, никогда habr и # 225; установленный ранг часов, изменится, в зависимости от которого выбрал администратор с платформы. Кратко, я хочу предложить программу, которая позволяла бы моему клиенту устанавливать ранг часов, между которыми Ваш персонал podr и # 225; n посылать некие данные в базу данных. И я не хочу, чтобы мой клиент был должен использовать cron, когда он захочет изменить это расписание, но он это сделает autom и # 225; ticamente в frontend. – Roberto Sepúlveda Bravo 04.11.2016, 02:08
  • 2
    mmmm, partamso следующего: твой aplicaci и # 243; n у него есть пользователи, уже будьте в качестве менеджера, llam и # 233; mosle схвати и # 237; и другие пользователи под использованным списком. – Francisco 04.11.2016, 03:11
  • 3
    точный, схвати и # 237; это мой aplicaci и # 243; n. – Roberto Sepúlveda Bravo 04.11.2016, 03:13
  • 4
    Я этого добился!, быть должным и # 237; чтобы печатать ее как ответ или обязанность и # 237; чтобы издавать мой первоначальный вопрос? – Roberto Sepúlveda Bravo 04.11.2016, 05:30
  • 5
    @Roberto, я предлагаю, чтобы ты не изменил полностью первоначальный вопрос, так как ответы уже не tendr и # 237; an чувство. Ты можешь расширять ее, чтобы показывать ограничения, которые существуют, и печатать твой собственный soluci и # 243; n как ответ всегда втречен с радостью. – jachguate 04.11.2016, 16:38

привет ты можешь создавать cron job на уровне ВАС или можешь calendarizar событие в твоей базе данных, тебе оставил один соединение примера calendarizacion событий в mysql: https://donnierock.com / 2013/01/30/eventos-en-mysql-planificar-tareas-fecha /

типов привета,

0
ответ дан 24.11.2019, 12:45
  • 1
    Уже я увидел эту дорожку, но оказывается, что в hosting бесплатно, они имеют event_scheduler выведенный из строя и из-за очевидных причин, также не возможно включать с ГЛОБАЛЬНЫМ SET event_scheduler = ON; поскольку он появляется в art и # 237; зад, который ты соединяешь, однако, если ты знаешь alg и # 250; n hosting бесплатный, что этим манипулировал включенный, быть и # 237; в необыкновенный. – Roberto Sepúlveda Bravo 03.11.2016, 22:53
  • 2
    если ты имеешь доступ к phpmyadmin (понимая, что ты используешь mysql) ты можешь создавать это с ах и # 237; i формы грамм и # 225; fica – Oxxi 03.11.2016, 22:56
  • 3
    Но первое - что это: ГЛОБАЛЬНЫЙ SET event_scheduler = ON; functione. И если у тебя нет привилегий супер пользователя не podr и # 225; s делать это, или, по крайней мере, это entend и # 237; этого: 000webhost.com/forum/t/set-global-event-scheduler-on/25994 – Roberto Sepúlveda Bravo 03.11.2016, 23:01
  • 4
    другой opci и # 243; n смоги состоять в том, чтобы ты использовал amazon cloud или digitalOcean из-за испытательного срока и ты сами установил mysql и создал события, если ты не хочешь использовать cron job панели administraci и # 243; n твоего hosting, так как hosting бесплатные, у которого не было блокированные этой функциональности, я не помню ни одного – Oxxi 03.11.2016, 23:37

Правильный способ это делать serГ, - чтобы хранить тебя в базе данных Гєltima датирует ejecuciГіn cron, и что, выполнив твой файл .php, единственным, что он делает, был checkear, если он провел час.

, Когда это уже estГ© функционируя обязательное, что ты выполнил cron каждый час с твоим файлом .php для того, чтобы он выполнил задания, в которых ты нуждаешься.

cron может быть на уровне linux или с mГіdulos plugins тебя см, если он состоит в том, что ты имеешь.

0
ответ дан 24.11.2019, 12:45

Теги

Похожие вопросы