Разрешить пользователям изменять ввод, который они отправляют каждый час?

0

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

Пример:

Код Джима - 5555. Джим вводит свой код, и он стреляет в самую нижнюю часть таблицы. Спустя 34 минуты он снова пытается ввести свой код (потому что различные другие люди вводили свой код между ними время от времени), но получает ошибку отображения, позволяя ему знать, что у него есть 26 минут, чтобы подождать.

Джо вводит свой код и ждет час и пять минут и снова может вернуть свой код обратно.

В принципе, я показываю данные снизу вверх в своей таблице.

Есть ли способ легко сделать это?

function some_more_custom_content() {

    $output="<BR>";

    ob_start();

    if ($_REQUEST['code'] != "") {
        $code = $_REQUEST['code'];
        $query="INSERT INTO `fc` (`code`,`datetime`) values ('" . mysql_real_escape_string($code) . "', now())";
        $result=mysql_query($query);
        $entry['datetime'] = strtotime($entry['datetime']);

        while ($fetch_array = mysql_fetch_array($result)) {
            $seconds = time() - strtotime($fetch_array["datetime"]);

            if ((time() - $entry['datetime']) < 60*60) {
                echo ("The code " . htmlentities($code) ." was updated less than an hour ago.");
            } else {
                echo ("Inserted " . htmlentities($code) ." into the top.");
            }
        }
?>

Я получаю синтаксическую ошибку. Любая идея, где она находится?

ОБНОВЛЕНИЕ: Получение ошибки:

Ошибка анализа: синтаксическая ошибка, неожиданный $end

  • 0
    У меня уже есть, поэтому люди вводят коды, он получает штамп now () и даже показывает, как давно он был введен (потому что я выкидываю всю таблицу там). Как проверить, была ли отметка времени в течение часа, и отобразить эту ошибку? Это моя проблема
  • 1
    Я правильно сделал отступ в вашем коде, вы должны увидеть проблему самостоятельно. Подсказка: "}".
Показать ещё 1 комментарий
Теги:
database

2 ответа

2

вы должны создать таблицу с уникальным индексом в поле кода, а затем использовать запрос типа:

INSERT INTO CODES (code) 
  VALUES (555)
  ON DUPLICATE KEY UPDATE lastUpdated = 
               case when NOW() - INTERVAL 5 MINUTE > lastUpdated 
                  then NOW() 
                  else lastUpdated end

это обновит поле lastUpdated только в случаях, когда он старше 5 минут

0

Не так сложно:

Используйте временную метку для последнего "времени рельефа".

Когда введен код, проверьте, существует ли он в базе данных.
Если это не так, вставьте его и установите временную метку bump на now().
Если он существует, проверьте, была ли отметка времени в течение часа. Если это так, отобразите ошибку.
Если это не так, reset это now().

Отсортируйте отображаемые данные с помощью метки времени бум.

EDIT:

$entry = /* get entry from database, assuming the case where it already exists */;

// depending on the format of timestamp you get from the database,
// you may have to convert it to a UNIX timestamp:
$entry['timestamp'] = strtotime($entry['timestamp']);

if ((time() - $entry['timestamp']) < 60*60) { // 60*60 is one hour in seconds
    // display error
} else {
    // reset bump
}
  • 0
    У меня уже есть, поэтому люди вводят коды, он получает штамп now () и даже показывает, как давно он был введен (потому что я выкидываю всю таблицу там). Как проверить, была ли отметка времени в течение часа, и отобразить эту ошибку? Это моя проблема.
  • 0
    Обновленный ответ.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню