如何为每个用户只允许一次POST


How do I only allow one POST per user?

这里是添加到数据库的代码:

<?php 
/*Config*/

听起来应该可以使用PHP会话变量轻松完成。

只需使用sessions并设置会话变量(称之为posted或其他),如果设置了该变量,则不允许用户发布(隐藏提交按钮或在javascript中使用PHP-if语句,仅在未设置该变量时执行操作)。

当用户关闭浏览器时,会话将被清除。

作为一个可能的例子,在添加到数据库的PHP代码中,只需将其放在开头:

session_start();
if (isset($_SESSION['posted']))
    die("posted");
$_SESSION['posted'] = true;


编辑:

您只需要添加另一个else if语句。它看起来像这样:

if(response == "knownudid"){
    document.getElementById('udid_message').innerHTML = '<br><i><font color="red">This UDID has already been inserted and it is valid.</font></i>' ;
}else if(response == "noudid"){
    document.getElementById('udid_message').innerHTML = '<br><i><font color="orange">Please, enter your UDID.</font></i>' ;
}else if(response == "errudid"){
    document.getElementById('udid_message').innerHTML = '<br><i><font color="red">It seems this UDID is not correct. Please check for typo.</font></i>' ;
}else if(response == "validatedudid"){
    document.getElementById('udid_message').innerHTML = '<br><i><font color="green">This UDID has been found as an invalid one. Now it is valid.</font></i>' ;
}else if(response == "posted"){    // Here is the new one
    document.getElementById('udid_message').innerHTML = '<br><i><font color="red">You have already posted a UDID for this session.</font></i>' ;
}else{
    document.getElementById('udid_message').innerHTML = '<br><i><font color="green">UDID <b>'+response+'</b> successfully inserted.</font></i>';
}

使用一些不错的jQuery或js,您可以在用户提交后隐藏表单。

  • 在HTML元素中包含javascript是不好的,请将其移动到<script>标记,或者更好的是,一个单独的.js文件。

  • 对于HTML5浏览器,placeholder是一种为文本字段提供指令的更优雅的方式。

  • 如果您使用AJAX提交表单,请在您的函数insert_udid()中添加:

document.getElementById('your_button_or_form').disabled = true;
// or document.getElementById('your_form').style.visibility = 'hidden';

否则,您将需要php代码从响应HTML中禁用或省略该表单。