2014-01-25 5 views
0

В настоящее время у меня есть приложение, при котором пользователь нажимает кнопку отправки, он вызывает код insert, чтобы вставить запись для функции reports.данные вставки php после периода времени

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

Случай 1: После того, как пользователь нажимает кнопку отправки, данные уже insert в базу данных, но пользователь случайно попадает в представить кнопку снова и курок insert снова и вызывая к базе данных имеет две одинаковые записи с различной временной меткой примерно через 5-10 сек.

Дело 2: первый пользователь записи вводит на самом деле не пользователь хочет, например, пользователь хочет ввести ключ 29/10/2013, но пользователь вводит ключ в качестве 28/10/2013, а пользователь снова нажимает кнопку «Назад» и вставляет правильную один, который равен 29/10/2013, и для одной транзакции у него есть 2 записи, одна из которых является правильной датой, а другая - датой ошибки.

Ниже код:

$stmt = $db->prepare("INSERT INTO log (dob, log_datetime, log_count, amount) VALUES (?, ?, ?, ?)"); 
$stmt->bindParam(1, $userDate); 
$stmt->bindParam(2, $now, PDO::PARAM_STR); 
$stmt->bindParam(3, $cust_count); 
$stmt->bindParam(4, $amount); 

date_default_timezone_set('Asia/Kuala_Lumpur'); 
$now = date('Y-m-d H:i:s'); 
$cust_count = 1; 
$amount = 10; 
$stmt->execute(); 

Код выше спускового всякий раз, когда пользователь нажимает кнопку отправки, поэтому я думал, там можно сделать insert код, чтобы вызвать после определенного периода времени, например, 30sec ?

Дополнительные примечания

  1. Это приложение, разработанное и выполнить базу данных из таблицы
  2. Это не имеет ничего общего с проверкой формы, как я уже закодирована частью проверки формы.
  3. Мой вопрос есть ли способ, чтобы вызвать insert запрос на определенное количество времени, установленного

Я ищу в SO и Google, но я не мог найти подходящий пример для работы.

Пожалуйста, предложите мне любой метод, который может исправить два сценария.

спасибо.

ответ

1

Для первого случая отключите кнопку при отправке формы. Для второго случая, validate, перед тем, как вставить его в базу данных.

+0

Возможно, вы не поняли меня, это не часть проверки формы. В моем хранилище данных хранятся данные от 01/01/1940 до 01/01/2021, и пользователю необходимо указать каждую дату, чтобы извлечь нужные данные. Это приложение, и мне не нужно больше объяснять эту функцию. Теперь мой вопрос заключается в хранении данных в mysql, так или иначе, чтобы вызвать триггер 'insert' в определенный промежуток времени, например: 30 секунд и т. Д.? – Nescafe

0

У MySQL нет такого поведения.Я думаю, что то, что вы ищете, это асинхронная очередь задач, например Celery

0

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

Я предпочел бы использовать метку времени в БД в качестве временного фильтра

Я бы запросить самые последние записи (в течение последних 30 секунд) с использованием cust_count в качестве ключа кандидата, и обновлять последнюю запись (если таковые имеются) вместо того, чтобы создавать его заново.

Схематическое пример:

function update_log ($entry) 
{ 
    $recent = $db->select (
      "id FROM log 
      WHERE timestamp > now()-30 seconds 
      AND user = $entry->user"); 
    if ($recent) 
    { 
     // overwrite last record with current entry (and refresh timestamp) 
    } 
    else 
    { 
     // create a new entry 
    } 
} 

Вы можете даже удалить все журналы пользователя добавления записи, которые являются более новыми, чем 30 секунд.

+0

Ум, чтобы показать пример? Я не мог понять, что вы говорите. – Nescafe

+0

см. Мое редактирование .... –

0

Отключите кнопку отправки при отправке и на странице после отправки покажите пользователю предоставленные данные и дайте им четкий способ ее редактирования.

Пользователи, как правило, подозревают, что возвращение в форму не является хорошей идеей, но вы не даете им никаких лучших вариантов.

+0

Я пытаюсь сделать менее сложный подход для не-вычислительной техники, мой подход прост, входная страница данных -> submit -> страница результатов. Как я уже упоминал, они не разбираются в компьютерах, иногда они могут нанести неправильный номер на цифровой клавиатуре, и когда результаты показывают неправильную дату вместо даты, которую они хотят, они нажмут кнопку «Назад», чтобы ввести правильную дату. – Nescafe

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