限制每页用户的表单提交

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制每页用户的表单提交相关的知识,希望对你有一定的参考价值。

虽然下面的代码来自RSForm,我目前用于表单的工具,但我相信我的问题可以通过纯php知识来解决,尽管我的斗争在这里无处可去。

有没有办法限制用户在我的表单显示的特定页面中回答表单特定次数?

我有相同的表单在许多页面中被回收,我希望用户每页只能回答一次。这有可能吗?

我得到的代码已经成功地限制了我希望每个用户能够提交表单的次数,但是如果他们在特定页面中回答表单,我该如何限制它们呢?我希望的结果是,他们可以在找到表单的每页只回答一次相同的表单。

// Define the maximum number of submissions.
$max = 1;

// Get the current logged in user.
$user = JFactory::getUser();

// Get a database connection.
$db   = JFactory::getDbo();
$query   = $db->getQuery(true);

// Setup the query.
$query->select('COUNT('.$db->qn('Username').')')
    ->from($db->qn('#__rsform_submissions'))
    ->where($db->qn('FormId').'='.$db->q($formId))
    ->where($db->qn('Username').'='.$db->q($user->get('username')));
    // You can also count by User ID, just replace the above with:
    // ->where($db->qn('UserId').'='.$db->q($user->get('id')));

$db->setQuery($query);
$counter = $db->loadResult();

if ($counter >= $max){
  $formLayout = 'Sorry, you have reached the maximum number of submissions for this form.';
}

反正只有在同一页面上提交表单时,是否还要对此进行调整?


编辑:

这些表单将始终位于K2项目页面上,我想我可以使用以下代码获取项目ID:

$K2Itemid = JRequest::getInt('id');

我想我可以用这个作为我失踪的条件。我可以使用K2 ID将提交限制为不同的页面。愿有人帮我申请吗?我该如何插入这个条件?

答案

您将需要使用一些PHP服务器变量。

我会在表单中创建一个隐藏字段,并将其设置为将$ _SERVER ['REQUEST_URI']记录为提交本身的值。如果您有查询字符串,则可能还需要使用$ _SERVER ['QUERY_STRING']。

在您的代码中设置一个变量,并在您的WHERE中使用它作为您的查询,以从该URL返回提交的位置。

另一答案

您可以在数据库中包含IP作为字段,然后在用户提交服务器端的表单检查后,如果该IP已经提交了任何内容。保存提交日期并擦除超过一天的每个提交。

以上是关于限制每页用户的表单提交的主要内容,如果未能解决你的问题,请参考以下文章

js验证表单不能填数字怎么判断?

如何设置primefaces数据表的页码,每页行数?

php防止用户重复提交表单

在JSP客户端限制表单重复提交

拦截器springmvc防止表单重复提交

SpringBoot中表单提交报错“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“(代码片段