我正在构建一个小型多选应用程序。以下两个选项是从查询生成的。按下其中一个后,ajax将数据发送到表格,插入“下一个”按钮,当按下时,还有两个选项可用。
我刚注意到,如果通过inspect元素选项复制并插入html中的id="4"
和class="pick"
元素,则可以反复对id 4进行投票...
什么是防止这种情况的好方法?
<ul class="thisClass">
<li class="first"><a href="#" class="pick" id="4">mercedes</a></li>
<li class="last"><a href="#" class="pick" id="8">alfa romeo</a></li>
</ul>
jQuery
$('.thisClass').on('click', '.pick', function(e) {
e.preventDefault;
var pickID = $(this).attr('id');
var notPickID = $('.pick').not('#' + pickID).attr('id');
$.ajax({
type: "POST",
url: "http://mywebsite.com/index.php/home/user_pick",
data: {pick : pickID, notPick : notPickID},
success:
function(data){
$("ul.thisClass").html(data.content);
$("div#next_button").html('<a href="#" class="next" id="next">Next</a>');
}
});
return false;
});
答案 0 :(得分:0)
您需要将确保没有重复项所需的所有信息发回服务器。
userID
surveyID
questionID
answerID
获取服务器项目1,2和&amp;的值时3必须是唯一的组合...否则用户正在尝试提交多个答案(有意或无意)。
注意:如果您的问题不与调查相关联,请在确定唯一性时将上面的#2视为可选。
此外......一旦您注册了用户对给定问题的答案,您就可以让您的AJAX返回一个标志,告诉您JavaScript代码应禁用该问题或将其显示在“完成”状态,以便用户不会尝试重新回答它。
答案 1 :(得分:0)
事实上,他们不需要通过inspect元素选项复制并插入html到&#34; hack &#34;您的网站,只需将包含数据{pick : pickID, notPick : notPickID}
的POST请求发送到http://mywebsite.com/index.php/home/user_pick
,您的网站就会关闭。您必须在服务器端进行验证。
解决此问题的一个好方法是防止来自同一用户的多次选择(如果您的拣货系统不需要帐户,则阻止相同的IP地址),获取UserID
或控制器中的UserIP
用于检查用户是否被选中。