検索
ホームページphp教程php手册经验之谈PHP表单重复提交问题解决方案

经验之谈PHP表单重复提交问题解决方案

Jun 13, 2016 am 11:04 AM
php学ぶ開発するマルチユーザー提出する形状解決繰り返す質問

PHP经过长时间的发展,很多用户都很了解PHP了,这里我发表一下个人理解,和大家讨论讨论。我们在做网站时,常常为一些灌水文章而烦恼。有时,由于网络状况等原因用户不知道提交是否成功,也会再次提交同一份表单,这就造成了PHP表单的重复提交不起。

有一个简单的方法可以避免同一表单的重复提交。首先,先定义一个session变量用来保存一个PHP表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个hidden 变量,把值设为

<ol class="dp-xml">
<li class="alt"><span><span>$userLastAction+1:  </span></span></li>
<li class="">
<span></span><strong><font color="#006699"><span class="tag"><span class="tag-name">input</span></span></font></strong><span> </span><span class="attribute"><font color="#ff0000">type</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">Hidden</font></span><span> </span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">lastAction</font></span><span> </span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="tag"><strong><font color="#006699"></font></strong></span><span> =$userLastAction+1 </span><strong><font color="#006699"><span class="tag">?></span><span class="tag">></span></font></strong><span>  </span>
</li>
</ol>

最后,在处理提交之前判断PHP表单是否已被提交过。

<ol class="dp-xml">
<li class="alt"><span><span>if($lastAction</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>$userLastAction){  </span></span></li>
<li class=""><span>$userLastAction++; // 序列号加1  </span></li>
<li class="alt"><span>// 处理表单数据  </span></li>
<li class=""><span>}  </span></li>
<li class="alt">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>

这个技巧的主要原理是不允许用户回退后再次提交,也就是说回退后修改再提交也是不允许的,但是还是不能避免Ctrl-C/Ctrl-V的灌水办法。下载文件的下载次数回填:我们在下载软件时,经常会看到此软件的下载统计次数,而这些统计数给网站管理员分析软件的受欢迎程度带来了方便。其实现原理是:在后端数据库中存放软件的唯一标识和下载数,在用户下载软件时,首先更新对应软件的下载次数即下载次数加1,然后再到下载文件上正式开始下载。请看下面的实现代码:

先建一数据表download (后端用MySql)

<ol class="dp-xml">
<li class="alt"><span><span>download表中含有下列两个字段:  </span></span></li>
<li class=""><span>id下载的文件的唯一标识  </span></li>
<li class="alt"><span>downnum 下载次数,默认值为0 </span></li>
</ol>

实现

假设已经从数据库取出:描述文件名 五笔字型 ;下载文件名:wbzx.zip ;标识号id值为2处理后生成的超级链接代码为:

<ol class="dp-xml"><li class="alt"><span><strong><font color="#006699"><span class="tag"><span class="tag-name">a</span></span></font></strong><span> </span><span class="attribute"><font color="#ff0000">href</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"download.php?filename=wbzx.zip&id=2"</font></span><span class="tag"><strong><font color="#006699">></font></strong></span><span>五笔字型</span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">a</span><span class="tag">></span></font></strong><span> </span></span></li></ol>

下面的代码download.php处理下载次数累计及根据传递的文件名定位下载文件。

<ol class="dp-xml">
<li class="alt"><span><span>//连接Mysql数据库代码略  </span></span></li>
<li class="">
<span>$</span><span class="attribute"><font color="#ff0000">res</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">mysql_query</font></span><span>("update download set </span><span class="attribute"><font color="#ff0000">downnum</font></span><span>=(downnum+1) where </span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">'$id'</font></span><span>" ,$db);  </span>
</li>
<li class="alt"><span>header("location:$filename");  </span></li>
<li class="">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。