2015-06-19 3 views
0

У меня есть функция insertdata(), которая написана на php. Он принимает значения из одной таблицы базы данных и затем вставляет ее в другую таблицу базы данных.Как вызвать функцию повторно в течение фиксированного интервала, используя php

Я хочу повторить это с фиксированным интервалом времени до нажатия кнопки остановки. Пожалуйста, помогите мне ..

Я пробовал использовать setInterval, но его работа только один раз. Также я использовал

if(isset($_POST['stopbutton'])) 
    $stop=1; 
else 
    $stop=0; 

function insertdata(){ 
    while ($stop=0) { 
     //get the values from Table1 and insert it into Table2 
    } 
    sleep(1); 
    if ($stop==1) 
     echo stop; 
    } 

Пожалуйста, помогите мне ..

+1

Определенно не использовать 'сон (1);'! –

+1

Возможно, вы захотите использовать 'setTimeout()' на стороне клиента и сделать запрос сервера (как-то сохранить состояние); после ответа вы продолжаете до тех пор, пока не будет нажата кнопка остановки ... не делайте спать на стороне сервера. –

ответ

0

Попробуйте этот код. Это работает.

Edited Код

repeatInsert.php

<?php 
if(isset($_POST['stopbutton'])) 
{ 
    echo "Stopped"; 
    exit; 
} 
if(isset($_POST['startbutton'])) 
{ 
    insertdata(); 
    exit; 
} 

function insertdata(){ 
    //Insert code here 
} 
?> 
<html> 
    <head> 
     <title>Repeated Insert</title> 
    </head> 
    <body> 
     <input type="button" value="Start Insert" name="startbutton" onclick="start();" /> 
     <input type="button" value="Stop Insert" name="stopbutton" onclick="stopInsert();" /> 
     <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
     <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
     <script type="text/javascript"> 
      var intervals; 
      $(document).ready(function(){ 

      }); 
      function start() 
      { 
       startInsert(); 

       intervals = setInterval(startInsert, 1000); 
      } 

      function startInsert() { 
       $.ajax({ 
        type: "POST", 
        url: "repeatInsert.php", 
        data: {startbutton : true}, 
        success: function(){ 
        }, 
        dataType: "json" 
       }); 
      } 

      function stopInsert() { 
       clearInterval(intervals); 
       $.ajax({ 
        type: "POST", 
        url: "repeatInsert.php", 
        data: {stopbutton : true}, 
        success: function(){ 
        }, 
        dataType: "json" 
       }); 
      } 
     </script> 
    </body> 
</html> 
+0

Мои html и php коды находятся в одном файле. У меня есть две кнопки «DataInsert» и «StopInsert». – uddipana

+0

@uddipana Пожалуйста, просмотрите отредактированный код – Rads

+0

Извините Rads .. Я очень новичок в веб-технологиях, поэтому у меня есть сомнения, что я буду реализовывать это, когда у меня есть html, php-коды в том же файле. – uddipana

0

Вы должны продолжать проверять переменную $stop. После отправки сообщения ваше приложение не знает, потому что оператор if уже вызван. Вы можете исправить это, проверив его в цикле while.

+0

Не могли бы вы также показать свой javascript? – itotallyrock

+0

@ itotallyrock .. Я не могу проверить переменную внутри цикла while. Как только цикл начинается, как проверить, нажата ли кнопка остановки или нет. Используется ли с помощью javascript? но это тоже не работает .. Пожалуйста, помогите. Спасибо заранее. – uddipana

0

Это в основном то, что произойдет, если вы делаете что:

CLIENT    | SERVER 
        | 
+--------+ 
|  | stop = 0 
| *----|--------> +------+ 
|  |   | loop | 
|  |   |  | 
|  |   |  | 
|  |   |  | 
|  |   |  | stop = 0 
| *----|---------------------------> +------+ 
|  |   |  |   | loop | 
|  |   |  |   |  | 
|  |   |  |   |  | stop = 1 
| *----|---------------------------------------------> +------+ 
|  |   |  |   |  |   | stop | 
+--------+   |  |   |  |   +------+ 
        +------+   |  | 
             |  | 
             |  | 
             +------+ 

В каждом вызове сценариев на стороне сервера, значение $stop никогда не меняется.

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

Это ваша задача отслеживать, где вы находитесь, в операции перемещения и синхронизировать ее с клиентской стороной.

Смежные вопросы