Insanlar tabloda benzersiz bir giriş BUMP için izin sorun yaşıyorsunuz

2 Cevap php

So, my table has a bunch of codes in it and I don't want more than one of the same code in the table so I have it as "UNIQUE." But, at the same time, I want them to be able to bump their code once every hour.

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.");
        }

    }}

Şimdi, kod çalışır zaman ben işleri düşünüyorum, normal kod gönderir, böylece onu almaya çalıştım.

Şimdi, orada zaten bir kod alırsa ben "1 tuşu için Duplicate entry 'Bob'" yinelenen hatası alıyorum

Ama, ben sadece onu buldum eski sorgusu silmek için ve son teslim yana fazla bir saat oldu eğer yeniden istiyorum.

Ben ne yapıyorum yanlış Herhangi bir fikir?

2 Cevap

Sadece "çarpmak" saatini yansıtmak için veritabanında tarih / saat alanını güncelleyebilirsiniz.

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.");
    }
}

(Muhtemelen sizin için kodunuzu yeniden yazdım olmamalıdır, ve yapılabilir birkaç gelişmeler vardır, ama bu (yani bir mantıklı geliyor ben değişikliklerin minimum yapabilir iyi değişiklikleri yansıtır?))

Frank, iki farklı sorgu gerekmez

$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";