实现MySQL事务以生成主键并保持直到提交PHP表单数据

时间:2015-08-23 03:43:28

标签: php jquery mysql forms

我一直在MySQL中实现以下功能,以便在PHP中提交表单数据之后生成ID。

FUNCTION `getActivityID`() RETURNS bigint(16)
NO SQL
BEGIN 
DECLARE qid integer;
  SELECT max(id)+1 into qid from wi_activity;
 IF(qid IS NULL) THEN
    SET qid=1;
END IF;
 RETURN convert(concat(6,DATE_FORMAT(CURDATE(),'%d%m%Y'),lpad(qid,7,'0')), unsigned integer);

在上述功能中, ID AUTO_INCREMENT,返回ID为PRIMARY KEY。 每个表至少有IDPRIMARY KEY(因此从函数生成)。 对于数据提交,使用ajax。在慢速互联网上,用户碰巧多次点击提交按钮,导致重复数据。

只要Form准备好输入数据,如何生成ID?它需要锁定ID,直到提交数据。

2 个答案:

答案 0 :(得分:0)

您可以使用.one,只需按一次按钮,Reference

$( "#foo" ).one( "click", function() {
  alert( "This will be displayed only once." );
});

或者更好click只需设置点击启用标志= true,并始终检查该标志,如果确实没有点击ajax。请求完成或失败时您可以再次将标记设置为false

答案 1 :(得分:0)

经过研究,我找到了SESSION变量的答案。在PHP传递表单时,在会话中设置随机令牌并将令牌传递给hidden input形式为:

$random = substr( md5(rand()), 0, 7); //something like this
$_SESSION['form_token']=$random;

将此令牌传递为:

<input type="hidden" value="<?php echo $token; ?>" />

如果只有FORM令牌和SESSION令牌相同,则会插入数据。插入后,SESSION标记将被删除。