<?php
/* 在同一页面POST提交表单并显示数据。
这里使用了一个小小的技巧用以服务器在收到该URL请求时确定是POST请求还是GET请求。就是在表单中增加一个隐藏的变量,在处理请求时我们通过isset函数检测是否设置了这个隐藏变量,由此判断出该请求使用了POST还是GET方法。
*/
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
echo '<pre>';
print_r($_POST);
echo '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
echo '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Name: <input type="text" name="personal[name]"><br />
Email: <input type="text" name="personal[email]"><br />
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbr</option>
</select><br />
<input type="hidden" name="action" value="submitted" />
<input type="submit" name="submit" value="submit me!" />
</form>
<?php
}
?>

<?php
/* 改进版
PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。
由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效。
可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session的值,如果不是400,就不再处理表单中的数据。流程见上图。
可设置Session的有效时间?
*/
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
session_start();
isset($_SESSION['num']) or die ("no session");
if ($_SESSION['num']==400){
print '<pre>';
print_r($_POST);
print '<a href="'. $_SERVER['PHP_SELF'] .'">Please try again</a>';
print '</pre>';
$_SESSION['num']=500;
} else {
print '<pre>';
print_r($_POST);
echo "However you have submitted";
print '</pre>';
}
} else {
session_start() or die("session is not started");
$_SESSION['num']= 400;
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog</option>
<option value="guinness">Guinness</option>
<option value="stuttgarter">Stuttgarter Schwabenbr</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>

- 大小: 13.5 KB
分享到:
相关推荐
### 防止页面的重复提交和刷新 #### 一、引言 在现代Web应用开发过程中,确保数据完整性与用户体验至关重要。其中,“防止页面的重复提交和刷新”这一问题尤为关键,它不仅关系到系统的稳定性,还直接影响用户体验...
当表单提交时,服务器会检查令牌的有效性并删除,避免同一令牌的再次使用。 3. **HTTP方法幂等性**:使用HTTP的PUT或DELETE方法,这些方法天生具有幂等性,即多次执行结果相同。POST方法则不具有此特性,因此通常...
使用`event.preventDefault()`阻止默认的表单刷新或跳转行为,然后在回调函数中处理提交数据。 2. **表单数据获取**:获取表单内的输入数据,可以通过`document.querySelector`或`document.querySelectorAll`选择...
在Web开发中,用户在提交表单后可能会意外地点击浏览器的刷新或后退按钮,导致数据重复提交,这在数据库操作中可能引起严重问题,比如财务交易的重复扣款或者用户信息的重复录入。针对这个问题,我们可以采取多种...
这种技术允许用户在不刷新整个页面的情况下提交数据,从而实现页面的动态更新。这里我们将详细探讨异步提交的核心概念、工作原理以及如何使用Ajax进行表单异步提交。 ### 1. 异步提交简介 异步提交是基于HTTP的...
在Web开发中,防止表单重复提交是一个重要的问题,它能确保用户操作的唯一性和数据的一致性。ThinkPHP 3.2 是一个基于MVC模式的PHP开发框架,提供了丰富的功能来帮助开发者构建安全、高效的应用。在这个场景中,我们...
4. **事件监听**:在父页面中,我们需要监听iframe的`load`事件,当iframe加载完成时,表明表单已提交并处理完毕。然后,我们还需要监听window的`message`事件,以便接收来自iframe的返回值。通过比较event.origin和...
Flash表单允许用户在不离开当前页面的情况下发送数据到服务器,提供了丰富的用户体验。本篇将深入探讨“Flash提交表单2”的相关知识点。 1. **Flash与表单基础** Flash提供了一个强大的ActionScript语言,用于编写...
- `event.preventDefault()`防止页面刷新,确保数据通过Ajax发送。 - `dataType: 'json'`表明我们期望服务器返回JSON格式的数据。 4. **跨域问题** - 如果服务器端接口不在同一域下,需要考虑CORS(跨源资源共享...
在网页开发中,尤其是涉及到用户交互的表单提交时,防止页面刷新导致的事件重复提交是一个常见的挑战。这个问题源于浏览器的刷新行为,它会重新发送上一次的HTTP请求,包括POST请求,即表单提交。在ASP.NET环境中,...
在ASP.NET开发中,防止用户通过浏览器的后退按钮重复提交表单是一个常见的问题,因为这可能导致数据的不一致性和数据库的错误。以下是一些防止这种情况的方法和相关的知识点: 1. **利用HTTP响应头控制缓存** - `...
在Java开发中,异步提交表单请求是一种常见的前端与后端交互方式,它通过Ajax技术实现,使得用户无需等待整个页面刷新即可完成数据的提交和获取,提升了用户体验。Ajax,全称Asynchronous JavaScript and XML(异步...
为了实现无刷新上传,我们需要在客户端使用JavaScript或jQuery监听表单提交事件,并使用AJAX发送文件和表单数据。这样,页面不会被刷新,用户可以继续填写其他信息: ```javascript $(document).ready(function() {...
2. **浏览器刷新**:用户在提交表单后立即按下F5键刷新页面,浏览器可能会重新发送上一次的POST请求。 3. **回退/前进操作**:用户在提交表单后使用浏览器的回退和前进功能,可能导致表单数据再次提交。 **解决表单...
在ASP.NET开发中,防止重提交(也称为双重提交或重复提交)是一个重要的问题,它涉及到用户可能在页面刷新或网络延迟时意外地多次提交相同的数据。这可能导致数据不一致性和逻辑错误。本文将深入探讨如何在ASP.NET...
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种技术,它允许我们在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。本篇文章将深入探讨如何使用AJAX来提交HTML Form表单,提高用户体验,...
6. AJAX提交:为了提供更好的用户体验,可以使用JavaScript或jQuery的`$.ajax()`或`$.post()`方法实现异步提交表单,这样页面无需刷新即可完成数据提交和反馈显示。 7. 响应式设计:考虑到不同设备的屏幕尺寸和触摸...
然而,在某些情况下,特别是使用Chrome浏览器时,可能会遇到一个常见的问题:表单只能成功提交一次,再次尝试提交时,浏览器不会有任何响应,除非刷新页面。这个问题在其他浏览器如Firefox和IE中通常不会出现。 ...
2. **使用Post/Redirect/Get模式**:即在表单提交后进行重定向操作,从而避免浏览器的刷新操作导致的重复提交。 3. **前端限制**:利用JavaScript控制表单的提交行为,例如禁用提交按钮或使用AJAX异步提交等方式减少...
- POST:非幂等,多次执行可能会产生不同的结果,例如多次提交同一表单会产生多个新记录。 5. **可缓存** - GET:可以被浏览器缓存,有助于提高重复请求的响应速度。 - POST:一般不会被浏览器缓存,因为可能...