Home PHP Framework ThinkPHP Thinkphp tips to prevent repeated form submissions

Thinkphp tips to prevent repeated form submissions

Apr 11, 2020 am 09:02 AM
thinkphp

During development, if a form is added or modified, after completing the database operation in the background, we set it not to jump to other pages, or to return to this page. At this time, click the browser's back button before submitting or refreshing the page. , will cause the form to be submitted repeatedly, that is, this record will be added or modified twice.

Thinkphp tips to prevent repeated form submissions

The reason that causes the form to be submitted repeatedly is that the form submitted for the first time will be cached in the memory until the page is submitted next time or the page is closed or redirected to other pages. disappear. When the self-call returns, the data in the memory is still there. At this time, the submitted code in the page can still detect the submitted value, which will cause the effect of repeated submission.

You can use the following methods to solve it:

Method 1: The simplest: After the page is submitted, go to another page instead of this page. For example, for example, your page address is

http://yourdomain.com/User/Index/login
Copy after login

Then the form action address of the page can be another processing address, such as

<form action="{:U(&#39;User/Index/check_login&#39;)}" method="post">
Copy after login

An error is returned like this, or the user clicks the back button and will still return to the previous address, but this The situation is not safe either. It is also necessary to match method 2 to be safer together

Method 2: After submitting the form, the submit button turns gray/hides the submit button

This method is usually combined with method 1 and is done through JS 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(&#39;User/Index/check_login&#39;)}" method="post">
   
   
   
Copy after login

JS:

$().ready(function(){
     $("#login_btn").on(&#39;click&#39;,function(){
            $(this).attr(&#39;disabled&#39;,true);
      });
});
Copy after login

Method 1 Method 2 After combining, basically more than 90% of repeated submission problems can be solved, but Da Liu Here is 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 make repeated submission judgments

First of all, in the project Add the following method to 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(&#39;TOKEN&#39;, authcode($code));
}
//判断TOKEN
function checkToken($token) {
    if ($token == session(&#39;TOKEN&#39;)) {
       session(&#39;TOKEN&#39;, NULL);
       return TRUE;
    } else {
      return FALSE;
    }
}
/* 加密TOKEN */
function authcode($str) {
    $key = "YOURKEY";
    $str = substr(md5($str), 8, 10);
    return md5($key . $str);
}
Copy after login

Fill in the following HTML code in the form page form

HTML:

<input type="hidden" name="TOKEN" value="{:session(&#39;TOKEN&#39;)}" />
Copy after login

Call the creatToken() method to generate the token before the page is displayed , use checkToken() in the corresponding controller POST request to determine whether to submit repeatedly

if(IS_POST)
{
$post_token = I(&#39;post.TOKEN&#39;);
  if(!checkToken($post_token)){
      $this->error(&#39;请不要重复提交页面&#39;,U(&#39;User/Index/login&#39;));
  }
}
Copy after login

Basically, these three methods can be used together to solve the problem of repeated submission of forms in ThinkPHP development. Of course, some students It is said that ThinkPHP's token ring mechanism can be used, which is actually simpler. TP will generate a hidden field in the form by default. At that time, it can be judged whether the hidden field exists and whether it matches the value in the session. The principle is the same. Method 3 is the same.

Recommended tutorial: thinkphp tutorial

The above is the detailed content of Thinkphp tips to prevent repeated form submissions. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to run thinkphp project How to run thinkphp project Apr 09, 2024 pm 05:33 PM

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.

There are several versions of thinkphp There are several versions of thinkphp Apr 09, 2024 pm 06:09 PM

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.

How to run thinkphp How to run thinkphp Apr 09, 2024 pm 05:39 PM

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.

How to install thinkphp How to install thinkphp Apr 09, 2024 pm 05:42 PM

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.

Which one is better, laravel or thinkphp? Which one is better, laravel or thinkphp? Apr 09, 2024 pm 03:18 PM

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.

Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Development suggestions: How to use the ThinkPHP framework to implement asynchronous tasks Nov 22, 2023 pm 12:01 PM

"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.

How is the performance of thinkphp? How is the performance of thinkphp? Apr 09, 2024 pm 05:24 PM

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.

ThinkPHP6 backend management system development: realizing backend functions ThinkPHP6 backend management system development: realizing backend functions Aug 27, 2023 am 11:55 AM

ThinkPHP6 backend management system development: Implementing backend functions Introduction: With the continuous development of Internet technology and market demand, more and more enterprises and organizations need an efficient, safe, and flexible backend management system to manage business data and conduct operational management. This article will use the ThinkPHP6 framework to demonstrate through examples how to develop a simple but practical backend management system, including basic functions such as permission control, data addition, deletion, modification and query. Environment preparation Before starting, we need to install PHP, MySQL, Com

See all articles