目錄
回复讨论(解决方案)
首頁 後端開發 php教程 内网系统,单号在提交时有做防重复判断,但是相同单号提交一次变成两次。

内网系统,单号在提交时有做防重复判断,但是相同单号提交一次变成两次。

Jun 23, 2016 pm 02:00 PM

内网系统,
 服务端PHP+MYSQL
数据表字段的值在写入时PHP中有做判断,正常提示相同的单号不可能会重复插入数据的,但是有时候人家操作时明明只提交了一次,但是发现数据一模一样且同一时间同一秒写入了两条。
 那位大侠知道怎么回事呀。


回复讨论(解决方案)

估计是连点了两次提交

我目前对于这种情况是前后台两种限制

前台当点击提交按钮时先把提交按钮变灰,并且不可点 ,然后再ajax向后台传值  返回结果后视程序逻辑转跳或者恢复按钮

后台插入前先判断是否已经有这条数据了(根据一个或几个不可能重复的字段来判断) 如果没有才进行插入.

额,如果是form表单提交的话  也可以用js来代替submit  点击后js先禁用按钮,再用js进行submit

只点了一次,但这种机率一个月会遇到一两次,我PHP代码中有先查询当前这个单号是否存在,如不存在才能执行写入数据库的作业的。所以纠结是什么情况出现的。。。

具体要看你写的代码,从源头解决问题。

秒并发问题。
例如有两次请求A,B同时到达
AB,都过了判断是否重复那个位置,然后当A插入后,B都会跟着插入。

可以这样写来避免重复插入。
例如test表有两个字段 name,value

INSERT INTO test(name, value) SELECT 'fdipzone', '123' FROM DUAL WHERE 'fdipzone' NOT IN (SELECT name FROM test);
登入後複製
登入後複製

既然是内网系统,并发量肯定不会很高,多个用户同时点击按钮的概率更低。
做好前端防止重复提交,后台验证提交即可。

秒并发问题。
例如有两次请求A,B同时到达
AB,都过了判断是否重复那个位置,然后当A插入后,B都会跟着插入。

可以这样写来避免重复插入。
例如test表有两个字段 name,value

INSERT INTO test(name, value) SELECT 'fdipzone', '123' FROM DUAL WHERE 'fdipzone' NOT IN (SELECT name FROM test);
登入後複製
登入後複製

我觉得您的写法应该可取,在插入语句里再判断一次。

虽然多个用户同时提交相同的内容的概率很低,但楼主也只是“有时候”出现
撇开程序的问题,这种情况在十年前经常出现。原因是浏览器的升级版本不稳定,导致一个请求发送两次数据,当然现在都已经修复了。不过怀旧者非要使用的话,出现问题也就很正常了
另一种情况是:表单不是提交到本页,或提交是由 ajax 完成的,此时如果用户的鼠标过于劳累,单单击变成了双击。从而造成二次提交也是可能的

防范这些非人为的故障可以在接收时做一下判断

session_start();if(isset($_SESSION['post']) && $_SESSION['post'] == md5(serialize($_POST))) return;$_SESSION['post'] = md5(serialize($_POST));//正常的提交处理
登入後複製


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話如何劫持工作,如何在PHP中減輕它? 會話如何劫持工作,如何在PHP中減輕它? Apr 06, 2025 am 12:02 AM

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

PHP 8.1中的枚舉(枚舉)是什麼? PHP 8.1中的枚舉(枚舉)是什麼? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。

在PHPStorm中如何進行CLI模式的調試? 在PHPStorm中如何進行CLI模式的調試? Apr 01, 2025 pm 02:57 PM

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

See all articles