2013-09-29 51 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分钟前回来,他将能够再次发布一些东西? –