限制每页用户的表单提交

问题描述 投票:0回答:2

虽然下面的代码来自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 forms joomla
2个回答
0
投票

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.