虽然以下代码来自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将提交限制为不同的页面。愿有人帮我申请吗?我该如何插入这个条件?
答案 0 :(得分:0)
您需要使用一些PHP服务器变量。
我会在表单中创建一个隐藏字段,并将其设置为将 $ _ SERVER [' REQUEST_URI'] 记录为提交内容中的值。如果您有查询字符串,则可能需要使用 $ _ SERVER [' QUERY_STRING'] 。
在你的代码中设置一个变量,并在你的WHERE中使用它来为你的查询返回从该URL提交的内容。
答案 1 :(得分:0)
您可以在数据库中包含IP作为字段,然后在用户提交服务器端的表单检查后,如果该IP已经提交了任何内容。保存提交日期并擦除超过一天的每个提交。