ThinkPHP tips on how to prevent repeated form submissions
Why are there pitfalls of duplicate forms?
During development, if a New or modified forms, after completing database operations in the background, we set whether to jump to other pages or return to this page. At this time, click the browser's back button and then Submitting or refreshing the page will cause form form to be submitted repeatedly, that is, this record will be added or modified twice.
The reason why the form is submitted repeatedly is: the first submission. The form will be cached into memory and will not disappear until the next time the page is submitted or the page is closed or redirected to another page. When the self-call returns, the data in the memory is still there, and the judgment in the page is submitted at this time. The code can still detect the submitted value, but it will produce the effect of repeated submission.
How to solve it? Summarizing the online solutions and your own tests, you can use the following methods:
Method 1: The simplest: After the page is submitted, go to another page instead of this page. For example, if your page address is http://yourdomain.com/User/Index/login
address of the page can be another processing address, such as <form action="{:U('User/Index/check_login')}" method="post">
, and will still return to the previous address. , but this situation is not safe either. We also need to use method 2 to be safer together
Method 2: After submitting the form, the submit button turns gray/hides the submit button This method is generally done in combination with method 1, using
JSto dynamically monitor the user's click action, and dynamically set the button attribute to disabeled, which means it is gray and unavailable. The code is as follows. :HTML:
<form action="{:U('User/Index/check_login')}" method="post">
JS:
$().ready(function(){ $("#login_btn").on('click',function(){ $(this).attr('disabled',true); }); });
After the combination of method 1 + method 2, basically more than 90% of repeated submission problems can be solved, but Da Liu here Let me talk about the third method, which is to solve this problem once and for all on the server side
Method 3: Use the method of hiding random TOKEN values to determine repeated submissions First, add the following method in the project's functions.php
//创建TOKEN function createToken() { $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)); session('TOKEN', authcode($code)); } //判断TOKEN function checkToken($token) { if ($token == session('TOKEN')) { session('TOKEN', NULL); return TRUE; } else { return FALSE; } } /* 加密TOKEN */ function authcode($str) { $key = "YOURKEY"; $str = substr(md5($str), 8, 10); return md5($key . $str); }
Fill in the following HTML code in the form page form
HTML:
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}" />
Call creatToken before the page is displayed () method generates a token, and uses checkToken() in the corresponding
controllerPOST request to determine whether to submit it repeatedlyif(IS_POST)
{
$post_token = I('post.TOKEN');
if(!checkToken($post_token)){
$this->error('请不要重复提交页面',U('User/Index/login'));
}
}
The above is the detailed content of ThinkPHP tips on how to prevent repeated form submissions. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



To run the ThinkPHP project, you need to: install Composer; use Composer to create the project; enter the project directory and execute php bin/console serve; visit http://localhost:8000 to view the welcome page.

ThinkPHP has multiple versions designed for different PHP versions. Major versions include 3.2, 5.0, 5.1, and 6.0, while minor versions are used to fix bugs and provide new features. The latest stable version is ThinkPHP 6.0.16. When choosing a version, consider the PHP version, feature requirements, and community support. It is recommended to use the latest stable version for best performance and support.

Steps to run ThinkPHP Framework locally: Download and unzip ThinkPHP Framework to a local directory. Create a virtual host (optional) pointing to the ThinkPHP root directory. Configure database connection parameters. Start the web server. Initialize the ThinkPHP application. Access the ThinkPHP application URL and run it.

"Development Suggestions: How to Use the ThinkPHP Framework to Implement Asynchronous Tasks" With the rapid development of Internet technology, Web applications have increasingly higher requirements for handling a large number of concurrent requests and complex business logic. In order to improve system performance and user experience, developers often consider using asynchronous tasks to perform some time-consuming operations, such as sending emails, processing file uploads, generating reports, etc. In the field of PHP, the ThinkPHP framework, as a popular development framework, provides some convenient ways to implement asynchronous tasks.

Performance comparison of Laravel and ThinkPHP frameworks: ThinkPHP generally performs better than Laravel, focusing on optimization and caching. Laravel performs well, but for complex applications, ThinkPHP may be a better fit.

ThinkPHP installation steps: Prepare PHP, Composer, and MySQL environments. Create projects using Composer. Install the ThinkPHP framework and dependencies. Configure database connection. Generate application code. Launch the application and visit http://localhost:8000.

ThinkPHP is a high-performance PHP framework with advantages such as caching mechanism, code optimization, parallel processing and database optimization. Official performance tests show that it can handle more than 10,000 requests per second and is widely used in large-scale websites and enterprise systems such as JD.com and Ctrip in actual applications.

Development suggestions: How to use the ThinkPHP framework for API development. With the continuous development of the Internet, the importance of API (Application Programming Interface) has become increasingly prominent. API is a bridge for communication between different applications. It can realize data sharing, function calling and other operations, and provides developers with a relatively simple and fast development method. As an excellent PHP development framework, the ThinkPHP framework is efficient, scalable and easy to use.
