Как я могу вставить SQL-оператор задержки с помощью PHP? - PullRequest
1 голос
/ 21 июня 2011

Я хотел бы предоставить веб-сайт для пользователя, когда пользователь вводит что-то, я помещаю его в БД.Но команда не будет выполнена, когда пользователь получит доступ к .php.Я хотел бы выполнить через некоторое время .... Это что-то вроде этого ...

10:00 am
User makes the request, and saying that the record will write in the DB one hour later. 

11:00 am 
The request execute, and the DB write a new record. 

Как я могу это сделать?Кроме того, я хотел бы добавить возможность для пользователя отменить запрос ..... Примерно так:

10:00 am
User makes the request, and saying that the record will write in the DB one hour later. 

10:30 am
User cancels the request.

11:00 am 
Nothing won't execute.

Есть идеи на этот счет?Спасибо.

Ответы [ 5 ]

3 голосов
/ 21 июня 2011

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

$query = "INSERT INTO table (body, effective_date) VALUES ('body text', '" . strtotime('+1 hour') . "'";

На страницах, где отображается ваш контент, просто добавьте WHERE effective_date>=NOW(), и он исключит ожидающие записи.

3 голосов
/ 21 июня 2011
  • При вводе пользователем сохраните этот ввод в таблице базы данных, но установите значение столбца (проверено) '0'
  • Через один час для задания cron будет установлен столбец (проверено)) значение как '1'
  • Если пользователь отменил до подтверждения, удалите эту запись

Пример:

таблица user_input :

user_id | input |    input_time     | verified
   1    |  500  | 2011-01-01 12:20  |    1
   2    |  700  | 2011-01-01 01:20  |    0

ИЛИ

  • создать новую таблицу для хранения входных запросов
  • Через час задание cron выполнит все запросы наисходная таблица.
  • Если пользователь отменит до одного часа, удалите эту запись из таблицы запросов.

Пример:

таблица user_input :

user_id | input
   1    |  500 
   2    |  700 

таблица user_requests :

user_id  |  input  |    input_time
   3     |   200   | 2011-01-01 07:20   
1 голос
/ 21 июня 2011

Вот рабочий процесс для достижения этой цели:

  1. Когда пользователь делает запрос, зарегистрируйте запрос в файле
  2. Создание задания cron для запуска отдельного PHP-скрипта, который читает файл и вставляет данные в базу данных
  3. Если пользователь отменяет запрос, удалите запрос из файла.

Вместо «файла» вы также можете зарегистрировать запрос к базе данных в «ожидающей» таблице и выполнить аналогичную операцию.

0 голосов
/ 21 июня 2011

Если вы на самом деле хотите, чтобы запись вводилась в БД через час, вам нужно создать какую-то очередь для ваших записей и настроить скрипт (через Cron илипрочее) проверяет записи на один час и вставляет их в базу данных.Вы не указали, с какой базой данных вы работаете, но, насколько мне известно, нет БД, которая бы позволяла вам выполнить команду insert , но сказать ей подождать за час до того, как на самом деледелая это .

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

Ваша очередь, вероятно, должна также находиться в вашей БД и фактически может представлять собой фактическую таблицу, в которой должны заканчиваться данные. Просто используйте свою метку времени, чтобы увидеть, прошел ли один час, и отметьте запись как нет.длиннее отменяется (если это слово существует ... хе-хе).Это будет означать, что запись фактически записывается в БД до того, как пройдет один час.Но вам просто нужно отфильтровать свои операции по тому, прошел ли час с момента его создания.

0 голосов
/ 21 июня 2011

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

...