【问题标题】:Select where time was 10 seconds ago选择 10 秒前的时间
【发布时间】:2011-12-17 15:53:02
【问题描述】:

为了防止向example表提交多个表单,我想从example表中选择10秒前的最后一条数据。如果返回的结果等于 1,那么他们就不能提交表单。如果返回结果为0,则可以提交表单。

这可能吗,如果不能,您能否建议另一种阻止多个表单提交的方法。我不想使用 cookie 方法,因为用户可以轻松阻止 cookie。

表格示例

|-----------------------------|
|user_id | content | date_time|
|-----------------------------|
|1       | content | something|
|-----------------------------|
|2       | test    | something|
 -----------------------------|
|3       | test    | something|
 ------------------------------

谢谢:)

【问题讨论】:

  • 只需检查最后 10 秒内是否有任何条目,假设您正在存储该提交的 DateTime
  • SQL 查询是什么样的?
  • 如果您向我们提供有关您的表结构的更多详细信息,可能会提供更详细的帮助
  • 它当前存储为时间戳,但我可以更改它
  • 这取决于您阻止表单的原因,但如果没有特别的动机重复提交表单,您完全可以依赖 cookie:人们真的不再阻止它们了。也就是说,您可以将事务的时间存储在表中,然后进行选择。

标签: sql forms select time spam-prevention


【解决方案1】:

不清楚是按用户限制还是全局限制

SELECT
    CASE WHEN EXISTS (
        SELECT 1 FROM [example] WHERE date_time > DATEADD (SS , -10 , GETDATE())
    )
        THEN cast(1 as bit)
        ELSE cast(0 as bit)
    END
FROM  ( SELECT 1 AS X ) AS [SingleRowTable];

如果最后 10 秒内有条目,此查询将返回位值为 10 的单行结果集,根据需要进行调整以适合您的目的

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多