Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.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
调用RESTAPI在票证系统中创建问题的PHP脚本只应调用一次_Php_Curl_Double_Submission - Fatal编程技术网

调用RESTAPI在票证系统中创建问题的PHP脚本只应调用一次

调用RESTAPI在票证系统中创建问题的PHP脚本只应调用一次,php,curl,double,submission,Php,Curl,Double,Submission,我有一个相当具体的问题 我正在为我们公司的员工注册流程编写一个应用程序。在几个表单的过程中,收集有关新员工需求的数据,并将其输入MySQL数据库 在最后一步中,一个PHP脚本获取这些信息,并通过cURL在JIRA ticketsystem(通过RESTAPI)中创建多个票证 执行cURL调用的网页也会在之后呈现结果,即指向已创建票证的链接。如果有人单击某个链接,然后决定按浏览器的“后退”按钮,整个脚本将再次运行。 我如何有效地防止这种情况?我已经有了一些想法,但似乎没有一个是真正合适的: -在数

我有一个相当具体的问题

我正在为我们公司的员工注册流程编写一个应用程序。在几个表单的过程中,收集有关新员工需求的数据,并将其输入MySQL数据库

在最后一步中,一个PHP脚本获取这些信息,并通过cURL在JIRA ticketsystem(通过RESTAPI)中创建多个票证

执行cURL调用的网页也会在之后呈现结果,即指向已创建票证的链接。如果有人单击某个链接,然后决定按浏览器的“后退”按钮,整个脚本将再次运行。

我如何有效地防止这种情况?我已经有了一些想法,但似乎没有一个是真正合适的:
-在数据库中创建更多信息,即每个票据的状态,然后在决定运行cURL调用之前查询这些信息。
-不允许通过JS按“后退”按钮到达脚本(实际上,这个想法完全是垃圾,但我还是把它留在这里。)
-不允许用户调用脚本,而是让表单向我发送一封电子邮件,说明信息已经输入,以便我可以自己运行脚本。每次

请原谅,这不是一个“精确”的问题,而是更多关于最佳实践的问题。虽然在我看来,这是论坛需要的,而不是你可以在任何文档中阅读到的东西


问候语

只是一个想法-使用会话变量确保curl请求只发生一次-您也可以(或与会话一起)在db中根据其名称/用户id存储一个布尔值,以指示其已完成该过程

<?php
    if( !isset( $_SESSION['curl_ticket'] ) ){
        /* do the curl request */

        /* get response from request */

        /* set the session */
        $_SESSION['curl_ticket']=$some_id;
    }


    if( isset( $_SESSION['curl_ticket'] ) ){
        /* display ticket */    
    }
?>


您可以使用标题将用户从执行curl请求的脚本(收到响应后)重定向到显示ticketsOr的页面,由于您无法真正阻止用户使用浏览器历史来回,因此您可以在提交完成后设置一个会话值,如果该会话值存在,则不会处理curl请求,相反,您可以显示与该会话值相关的任何记录。实际上,我只需要DB中的一个值,就可以得到“Createalltickets脚本已经执行”这一事实。如果发生错误,我有管理员脚本,可以逐个创建每个票据。使用DB而不是session执行脚本还可以确保脚本也不能由其他人执行,或者在会话过期后,由于某种原因,同一个人返回时也不能执行脚本。