Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从中选择并插入_Php_Mysql_Sql_Select_Insert - Fatal编程技术网

Php 从中选择并插入

Php 从中选择并插入,php,mysql,sql,select,insert,Php,Mysql,Sql,Select,Insert,我正在写剧本,但不行。 当用户发表文章时,将插入NOW()。我想制作一个脚本,在这个脚本中,当用户的最后一篇文章与他现在想发表的文章至少相差10分钟时,他才能发表文章。我不想使用cookies,因为人们可以删除它们 我现在有这个代码,但不知道如何继续。谢谢大家! if ($db_found) { $sql1="SELECT send_time FROM bloopp WHERE email='$email' ORDER BY id DESC LIMIT 1"; while($ro

我正在写剧本,但不行。 当用户发表文章时,将插入NOW()。我想制作一个脚本,在这个脚本中,当用户的最后一篇文章与他现在想发表的文章至少相差10分钟时,他才能发表文章。我不想使用cookies,因为人们可以删除它们

我现在有这个代码,但不知道如何继续。谢谢大家!

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

在查询中,您有:

 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替换,如果您完全依赖数据库,它会很方便。这避免了将数据库的时间概念与PHP混淆,PHP可能位于不同的服务器上和/或具有不同的时间配置

所以,试着找到最近十分钟发的帖子,如果没有,你知道你可以去

SELECT COUNT(*) AS recent_posts
FROM bloopp 
WHERE email=? AND (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(send_time))<600;
选择COUNT(*)作为最近发布的内容
来自布洛普

其中email=?和(UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(send_time))假设您有表用户

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...
类似这样的操作会让用户获得他的最新帖子(对于没有帖子的新用户,请选中put left joins,为空),将日期放入会话中,当他发布更新内容时,诸如此类,您知道如何做到这一点


关于

在登录时使用左连接获取他的最后一篇文章,在他发布文章后替换会话中的内容…你看go@KA_lin因为它都是同一个表,所以我需要进行左联接吗?我不太熟悉联接。我正在尝试理解您的代码。:)我有两个问题:我必须把这个放在哪里?为什么你要使用count(*)?你执行这个查询来找出他们在过去十分钟内发表了多少篇文章-如果没有,你可以自由发表一篇新文章。您的代码在结果集周围循环,这是不必要的。这个查询总是返回一行。那么这个代码会替换上面的所有内容吗?但当浏览器关闭时,会话将过期,还是我错了?:)是的,它将过期,但您必须使用建议的查询(更改WHERE子句)让他重新登录。这是一个概念,你必须调整它一点,但如果它过期,用户关闭浏览器并在10分钟前回来,他将能够再次发布内容?如果他在登录后10分钟前回来,你有他在会话中的最后发布日期,你可以使按钮变灰或发出警告消息,告诉他我不需要设置cookie吗?