Возникли проблемы с тем, чтобы позволить людям БУМАТЬ уникальную запись в таблице - PullRequest
0 голосов
/ 07 августа 2009

Итак, в моей таблице есть куча кодов, и я не хочу, чтобы в таблице было больше одного кода, поэтому у меня есть «UNIQUE». Но, в то же время, я хочу, чтобы они могли поднять свой код один раз в час.

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) or die(mysql_error());
        $seconds = time() - strtotime($fetch_array["datetime"]);
        if($sql){
            echo("Intserted " . htmlentities($code) ." into the top.");
        }else{
            if ($seconds < 60*60) {
                echo ("The code " . htmlentities($code) ." was updated less than an hour ago.");
         } else {
                $query="DELETE FROM `fc` (`code`,`datetime`) values ('" . mysql_real_escape_string($code) . "', now())";
                echo ("Inserted " . htmlentities($code) ." into the top.");
        }

    }}

Теперь я попытался сделать так, чтобы, когда код работал, он отправлял код как обычно, что, я думаю, работает.

Теперь, если он получает код, который уже существует, я получаю двойную ошибку «Дублирующая запись« Боб »для ключа 1»

Но я просто хочу, чтобы он удалил старый запрос и повторно отправил его, если с момента последнего представления прошло более часа.

Есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Вы можете просто обновить поле даты / времени в базе данных, чтобы отразить время «удара».

if ($_REQUEST['code'] != "")
{
    $code = $_REQUEST['code'];

    $sql = "SELECT * FROM fc WHERE code = '" . mysql_real_escape_string($code) . "'";

    $result = mysql_query($sql);
    if (mysql_num_rows($result))
    {
        $row = mysql_fetch_array($result);
        $seconds = time() - strtotime($row["datetime"]);

        if ($seconds > 60*60)
        {
            $sql = "UPDATE fc SET datetime = NOW() WHERE code = '" . mysql_real_escape_string($code) . "'";

            mysql_query($sql);
            echo("Intserted " . htmlentities($code) ." into the top.");
        }
        else
        {
            echo ("The code " . htmlentities($code) ." was updated less than an hour ago.");
        }
    }
    else
    {
        $sql = "INSERT INTO fc (code, datetime) VALUES ('" . mysql_real_escape_string($code) . "', NOW())";

        mysql_query($sql);
        echo("Intserted " . htmlentities($code) ." into the top.");
    }
}

(мне, вероятно, не следовало бы переписывать ваш код для вас, и есть еще несколько улучшений, которые могут быть сделаны, но это отражает лучшие изменения, которые я могу сделать с минимумом изменений (имеет ли это какой-то смысл ?))

0 голосов
/ 07 августа 2009

Фрэнк, вам не нужны два разных запроса

$query="INSERT INTO `fc` (`code`,`datetime`) 
         values ('" . mysql_real_escape_string($code) . "', now())
         ON DUPLICATE KEY UPDATE datetime = case when now() - interval 1 hour > `datetime` 
                                      then NOW() 
                                      else `datetime` 
                                         end";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...