2013-09-29 180 views
2

我正在處理腳本,但它不起作用。 當用戶發佈帖子時,NOW()將被插入。我想製作一個腳本,用戶只有在他的最後一篇文章與他目前想發表的文章至少相差10分鐘時才能發表文章。我不想使用cookies,看到人們可以刪除它們。SELECT FROM和INSERT INTO

我現在有這個代碼,但不知道如何繼續前進。謝謝!

if ($db_found) { 
    $sql1="SELECT send_time FROM bloopp WHERE email='$email' ORDER BY id DESC LIMIT 1"; 
    while($row = mysqli_fetch_array($result)) { 
     $last_post = $row['send_time']; 
    } 
    if ($last_post + 600 >= NOW() { 
     sql2 = "INSERT INTO bloopp (bloopp, browser, medium, send_time, email) VALUES 
      ('$bloopp', '$browser', 'desktop', NOW(), '$email')"; 
     $result = mysql_query($sql); 
     if($result) { 
      header('Location: index.php'); 
     } 
     else { 
      echo "ERROR"; 
     } 
    } 
} 
+0

在登錄時把他的最後一篇了LEFT JOIN,此前他的職位替換會話內容...你去 –

+0

@KA_lin我需要做一個左連接,因爲它是所有同一張桌子?我對連接不太熟悉。 –

回答

2

當時間來處理,它的方便如果你可以完全依賴數據庫。這樣可以避免混淆數據庫對PHP的時間概念,PHP可能位於不同的服務器上和/或具有不同的時間配置。

所以,儘量定位到最後十分鐘發了一個帖子,如果沒有一個,你知道你是好去

SELECT COUNT(*) AS recent_posts 
FROM bloopp 
WHERE email=? AND (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(send_time))<600; 
+0

我試圖理解你的代碼。 :)我有兩個問題:我必須在哪裏放置它,爲什麼要使用count(*)? –

+1

您可以執行此查詢來查找他們在過去十分鐘內發佈的帖子數 - 如果爲零,則可以自由發表新帖。你的代碼循環遍歷結果集,這是不必要的。這個查詢總是返回一行。 –

0

上查詢您有:

sql2 = "INSERT INTO bloopp (bloopp, browser, medium, send_time, email) VALUES ('$bloopp', '$browser', 'desktop', NOW(), '$email')"; 
$result = mysql_query($sql); 

不應該;噸認爲是

$sql = "INSERT INTO bloopp (bloopp, browser, medium, send_time, email) VALUES ('$bloopp', '$browser', 'desktop', NOW(), '$email')"; 

記SQL2/$ SQL更換

+0

我試過了,但它不起作用:/ –

0

比方說你有表用戶

user_table: 
id 
email 

bloop: 
email 
browser 
.... 

Select * from user_table left join (select max(send_time),email from bloop where email=$email) max_sel on max_sel.email = user_table.email... 

這樣的事情會讓用戶獲得他最新的帖子(或者對於沒有帖子的新用戶爲null,選中放置左連接),將日期放在會話中,當他發佈更新時,你會知道如何去做這個。

問候

+0

因此,這段代碼將取代以上所有內容?但是,當瀏覽器關閉或者我錯了時,會話將會過期? :) –

+0

是的,它會過期,但你必須記錄他回...使用這個建議的查詢(更改WHERE子句)。這是一個概念,你必須適應一下 –

+0

但是如果它過期並且用戶關閉瀏覽器並在10分鐘前回來,他將能夠再次發佈一些東西? –