Разрешить пользователям изменять ввод, который они отправляют каждый час? - PullRequest
0 голосов
/ 06 августа 2009

Я хочу, чтобы люди могли "поднять" то, что они написали в моей базе данных, но в то же время позволять вводить данные только в ОДИН РАЗ в таблицу.

Например:

Код Джима - 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.");
            }
        }
?>

Я получаю синтаксическую ошибку. Есть идеи где это?

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

Ошибка разбора: синтаксическая ошибка, неожиданный конец $ 1019 *

Ответы [ 2 ]

2 голосов
/ 06 августа 2009

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

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 голосов
/ 06 августа 2009

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

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

Когда код введен, проверьте, существует ли он уже в базе данных.
Если это не так, вставьте его и установите отметку времени удара на now().
Если он существует, проверьте, была ли отметка времени в течение часа. Если это так, отобразите ошибку.
Если это не так, сбросьте его на 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...