Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单执行可以发生两次吗?_Php_Mysql_Codeigniter_Post_Browser - Fatal编程技术网

Php 表单执行可以发生两次吗?

Php 表单执行可以发生两次吗?,php,mysql,codeigniter,post,browser,Php,Mysql,Codeigniter,Post,Browser,我显然错过了什么 在某种程度上,客户在11秒内成功预订了两次。我的第一个想法是,用户可能已经完成了预订,然后返回浏览器并再次进行预订。然而,这是不可能的,因为我知道至少有2次验证会阻止这种行为 留给我的唯一结论是,如果客户试图提交预订,我们的Web服务不知何故在11秒内冻结,客户中止了请求并再次提交,因此允许这两个预订同时发生 除此之外,我不知道是什么原因造成的。MySQL插入延迟了吗 所以基本上我最想知道的是; 什么会导致表单提交并执行两次,而第二次表单会绕过所有必需的验证 我的表单的当前工作

我显然错过了什么

在某种程度上,客户在11秒内成功预订了两次。我的第一个想法是,用户可能已经完成了预订,然后返回浏览器并再次进行预订。然而,这是不可能的,因为我知道至少有2次验证会阻止这种行为

留给我的唯一结论是,如果客户试图提交预订,我们的Web服务不知何故在11秒内冻结,客户中止了请求并再次提交,因此允许这两个预订同时发生

除此之外,我不知道是什么原因造成的。MySQL插入延迟了吗

所以基本上我最想知道的是; 什么会导致表单提交并执行两次,而第二次表单会绕过所有必需的验证

我的表单的当前工作流 用户在输入字段中提交数据,然后提交。我的系统验证所有这些输入,并检查两个唯一的代码,以确保它不会通过MySQL调用被使用两次。它还确保可用的座位数量等于或大于预定的座位数量

在上述情况下,使用了相同的代码,座椅超出了允许的扩展限制


基本上,除非帖子经过验证,否则预订不会插入MySQL。

用户可以刷新处理表单的页面,从而发送两次帖子信息?您的验证位于何处,如果它只是停止表单的显示而不是处理,那么这可能是一种可能性?

用户可能已经刷新了处理表单的页面,从而两次发送帖子信息?您的验证位于何处,如果它只是阻止表单显示,而不是处理,那么这可能是一种可能性

我的系统验证所有这些输入,并检查是否存在唯一的 代码,以确保它不会在MySQL调用中使用两次

听起来您有并发问题。进行检查/插入时是否锁定表

理论上,如果两次执行同时发生,它们都将具有唯一的ID并且都在座位限制内,因此两次插入都将被允许继续进行,从而成功

以下是我思考的图解方式:

POST 1                  POST 2
Unique ID: 1234         Unique ID: 1234
Check if ID is present  Check if ID is present
ID is not present       ID is not present
Check if seats left     Check if seats left
Make insert             Make insert
第二个make POST 2在表解锁(即POST 1已完成插入)之前,不允许开始其唯一ID检查

我的系统验证所有这些输入,并检查是否存在唯一的 代码,以确保它不会在MySQL调用中使用两次

听起来您有并发问题。进行检查/插入时是否锁定表

理论上,如果两次执行同时发生,它们都将具有唯一的ID并且都在座位限制内,因此两次插入都将被允许继续进行,从而成功

以下是我思考的图解方式:

POST 1                  POST 2
Unique ID: 1234         Unique ID: 1234
Check if ID is present  Check if ID is present
ID is not present       ID is not present
Check if seats left     Check if seats left
Make insert             Make insert


第二个make POST 2在表解锁之前不允许开始其唯一ID检查,即POST 1已完成其插入。

如果附加验证方法,这将非常有用,否则这就像大理石读取验证过程不容易理解。如果没有人知道其他原因,我会把它挂起来。如果你附上你的验证方法,这将非常有帮助,否则这就像大理石阅读验证过程不容易理解。如果没有人知道其他原因,我会把它挂起来。验证完成了我自己尝试后应该执行的操作。这不是答案,而是一条注释。是的,如果用户刷新处理帖子信息的页面,并且此页面上没有阻止此操作发生的检查,则可以进行验证。更清楚?没错,这不是一个答案,但这是一个建议。@mightyuhu,49岁的代表,他可以添加评论吗?不,除了我自己的帖子之外,我不能添加任何评论。这不是答案,而是一个评论。是的,如果用户刷新处理帖子信息的页面,并且该页面上没有阻止这种情况发生的检查,这是可能的。更清楚?没错,这不是一个答案,但这是一个建议。@mightyuhu,49岁,他能添加评论吗?不,除了我自己的帖子,我不能添加评论。我从来没有想过这种行为。我想如果您的web服务很慢,这种错误可能会更频繁地发生?我该如何在MySQL上实施这种行为?我不能具体谈论MySQL的调度程序,但它们通常是不确定的。我们不能保证它是否会一个接一个地执行查询,或者如果它同时接收到查询,那么它是否会同时执行查询。您的问题可以通过在脚本开始时发出a来轻松修复,并在脚本结束时解锁表。这将有点难以知道,但这必须是
问题的原因。我会将其标记为正确,并密切关注在锁表解决方案之后问题是否仍然存在。我从未想过这种行为。我想如果您的web服务很慢,这种错误可能会更频繁地发生?我该如何在MySQL上实施这种行为?我不能具体谈论MySQL的调度程序,但它们通常是不确定的。我们不能保证它是否会一个接一个地执行查询,或者如果它同时接收到查询,那么它是否会同时执行查询。您的问题可以通过在脚本开始时发出,并在脚本结束时解锁表来轻松解决。这将有点难以确定,但这一定是问题的原因。我会将其标记为正确,并密切关注在锁表解决方案之后问题是否仍然存在。