我一直在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
。
每个表至少有ID
和PRIMARY KEY
(因此从函数生成)。
对于数据提交,使用ajax。在慢速互联网上,用户碰巧多次点击提交按钮,导致重复数据。
只要Form准备好输入数据,如何生成ID?它需要锁定ID
,直到提交数据。
答案 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
标记将被删除。