如何避免在php中刷新时重新发送数据

2024-04-24

我有一个页面“index.php”,其中有一个名为“add_users.php”的链接。在“add_users.php”中,我接受用户信息并返回到同一页面“index.php”,其中信息通过后操作传入并插入到数据库中。

当我刷新页面或点击后退按钮时,会出现一个重新发送框。我经历了许多解决方案,他们要求我创建第三页。我尝试这样做:在数据库中插入值后,我将页面重定向为 header('Location:http://thisisawebsite.com/thankyou.php http://thisisawebsite.com/thankyou.php,并在thankyou.php中我再次将页面重定向到index.php。但这导致收到警告“无法修改标头信息 - 标头已由 [...] 发送”

什么是更好的解决方案?


普里扬卡,

你走在正确的轨道上。您想要实现的实际上是网络开发中使用的一种众所周知的模式,称为POST/重定向/GET 模式 http://en.wikipedia.org/wiki/Post/Redirect/Get。 (模式现在是一个流行词,所以也许范式是一个更好的词)。

此模式/范式的一种常见实现是仅具有一个入口点。

通过做这个,add_user.php现在看起来像这样(它仍然不是最优雅的,但希望它能让您了解如何实施它):

<?php

// is this a post request?
if( !empty( $_POST ) )
{
   /*
     process the form submission
     and on success (a boolean value which you would put in $success), do a redirect
   */
   if( $success )
   {
       header( 'HTTP/1.1 303 See Other' );
       header( 'Location: http://www.example.com/add_user.php?message=success' );
       exit();
   }
   /* 
      if not successful, simply fall through here
   */
}

// has the form submission succeeded? then only show the thank you message
if( isset( $_GET[ 'message' ] ) && $_GET[ 'message' ] == 'success' )
{
?>

<h2>Thank you</h2>
<p>
You details have been submitted succesfully.
</p>

<?php
}
// else show the form, either a clean one or with possible error messages
else
{
?>

<!-- here you would put the html of the form, either a clean one or with possible error messages -->

<?php
}
?>

那么,它的基本工作原理是这样的:

  • 如果对脚本发出的请求不是 POST 请求(即表单尚未提交)并且没有?message=success附加到 url 然后简单地显示一个干净的表单。
  • If the request made to the script IS a POST request, then process the form.
    • If form processing succeeded, redirect to the same script again, and append ?message=success
      • 如果对脚本的请求是带有?message=success附加到它只显示感谢信息,不显示表格。
    • 如果表单处理失败,则让它“失败”并再次显示表单,但这次带有一些描述性错误消息,并且表单元素填充了用户已经填写的内容。

希望这与我给您的示例一起具有足够的意义。

现在,你被臭名昭著的原因Warning: headers already sent消息已解释在这个答案中我给出了 https://stackoverflow.com/questions/2171139/what-means-by-top-of-the-page-in-php-file/2171305#2171305另一个问题是为什么某些 php 调用最好放在脚本的顶部(实际上,它不一定必须放在顶部,但必须在任何输出(甚至(意外的)空格)之前调用它)输出)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免在php中刷新时重新发送数据 的相关文章

  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 如何将粘在一起的单词分开?

    我有很多命名不好的文件 videoofmegoingtoschool avi 是否有一个库或某种算法可以正确地将其分离 video of me going to school avi 我不认为那里有什么 我可以想象一个程序 它使用单词词典并
  • 如何在 WordPress 中按类别获取所有帖子

    我想在 WordPress 中按类别获取帖子 args array post type gt project postslist get posts args 0 gt WP Post 对象 ID gt 421 post author gt
  • JavaScript 中带前导零的数字发生变化

    我使用 print 语句从 php 调用 javascript 函数来打印 html 代码 并且传入一个整数 但是 在 php 中传递的值与 javascript 函数接收到的数字不匹配 我不知道为什么 这是调用 javascript 函数
  • 创建 Facebook 测试用户时访问令牌出现问题

    我正在尝试为我的 Facebook 应用程序创建测试用户 他们在 11 月份的博客文章 http developers facebook com blog post 429 中宣布了此功能 并在此处记录了该功能 http developer
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • PHP 错误:“无法通过引用传递参数 2”

    我只是需要有关这个 PHP 错误的帮助 我不太明白 致命错误 无法在第 13 行 web stud openup inactivatesession php 中通过引用传递参数 2
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • 如何在数据列表 HTML PHP 中设置选择

    您好我想知道是否有一种方法可以在数据列表中设置选定的值 我想要这样的东西

随机推荐

  • 使用#selector 传递参数

    我是 Swift 的初学者 我正在尝试通过通知中心启动一个功能 ViewController swift 中的观察者调用函数reload override func viewDidLoad super viewDidLoad Notific
  • 使用 Gson 反序列化 JSON 时引用父对象

    给定以下 JSON authors name Stephen King books title Carrie title The Shining title Christine title Pet Sematary 这个对象结构 publi
  • Tymon\JWTAuth::toUser 错误:需要令牌

    我有一个 Larvel API 它使用 Tymon JWTAuth 来验证用户身份 它运行良好 由于某些原因 我还有一条不受保护的路线web php Route get myroute MyController mymethod MyCon
  • 如何在flutter中解析没有key的JSON

    我想解析一个 JSON 但这个 JSON 没有键值 仅仅是价值 我尝试创建课程但不起作用 错误是类型 List 不是类型 Map 的子类型 我尝试解析它们在 json 中占据的位置 例如 json 0 但我对此不确定 提前致谢 Json P
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 单击“保存”按钮后的 WPF 数据绑定

    我有一个应用程序和一个设置窗口 其中 TabControl 包含几个 TabItems 它们每个都有一些字段 文本框 这些字段数据绑定到同一个 Singleton 对象 仅在单击 保存 按钮后 是否有任何优雅且类似 WPF 的数据绑定方式
  • iOS 7 - 呈现模式视图控制器时收到警告消息

    使用 iOS 7 编译和运行 在呈现模式视图控制器时 我收到警告消息 不鼓励在分离视图控制器上呈现视图控制器 我在使用 iOS 6 或更早版本时从未遇到过问题 任何人都可以显示在呈现模式视图控制器时是否有任何更改吗 SearchViewCo
  • 如何向打开 Chrome 控制台的用户显示警告,就像 Facebook 和 Blockchain 那样?

    当我在 Facebook 和 Blockchain 等网站上打开控制台时 我收到如下警告 我想知道如何在我的网站上执行此操作 显示警告 告诉用户这很危险 他不应该在那里粘贴任何内容 您可以设置 console log 消息的样式 conso
  • 当我尝试移动 Pygame 时,玩家回到初始位置

    当我移动玩家时 当我按住右箭头时 他会移动 10 个像素 当我释放按键时 他会返回到初始位置 顺便说一句 你不需要告诉我当我按右时他会向左移动 我知道 这是代码 import pygame pygame init WIDTH 1000 HE
  • 为什么 Java 中不能抛出和捕获对象? [复制]

    这个问题在这里已经有答案了 可能的重复 你可以在 Java 中添加什么 https stackoverflow com questions 5749898 what can you throw in java 为什么我不能在 Object
  • 如何将音频从浏览器流式传输到 WebRTC 本机 C++ 应用程序

    到目前为止 我已成功运行以下示例 WebRTC 原生 C 到浏览器视频流示例 http sourcey com webrtc native to browser video streaming example 该示例展示了如何将视频从本机
  • React Native - 如何查看 AsyncStorage 中存储的内容?

    我将一些项目保存到AsyncStorage在 React Native 中 我使用 chrome 调试器和 iOS 模拟器 不使用 React Native 使用常规 Web 开发localStorage 我能够看到存储的localStor
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • Xcode 附加到进程不显示 NSLog

    我刚刚开始使用 Apple Watch 我找到了来自 五分钟观察套件 http www fiveminutewatchkit com blog category Xcode 让 iOS 应用程序和手表套件应用程序都在模拟器中运行 并且两个进
  • mongod,mac os x - rlimits警告[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在我的 mac os x 10 8 上使用 mongo 昨天突然在我的日志中出现了这个警告 当启动 shell 时它也出现了 警告 软限制太低
  • 在模拟的 HttpContextBase 上设置属性

    我正在开发一个 ASP NET MVC 应用程序 并尝试针对控制器操作编写一些单元测试 其中一些操作 HttpContext 上的属性 例如 Session Request Cookies Response Cookies 等 在弄清楚如何
  • OpenTok - 如何手动发布/取消发布?

    我查看了这些链接 http www tokbox com opentok api tools js documentation overview publish html http www tokbox com opentok api to
  • 无法获取未知属性“组装”

    所以 昨天一切都很好 但现在 Android Studio 和我的项目抛出了这个错误 ERROR Could not get unknown property assemble for task patternjkh assembleDeb
  • android AlertDialog 具有透明背景

    我有一个自定义的 AlertDialog 我想使其背景完全透明 通常为了使活动完全透明 我会执行以下操作 将背景设置为 00000000在 xml 布局中 在清单集中android theme android style Theme Hol
  • 如何避免在php中刷新时重新发送数据

    我有一个页面 index php 其中有一个名为 add users php 的链接 在 add users php 中 我接受用户信息并返回到同一页面 index php 其中信息通过后操作传入并插入到数据库中 当我刷新页面或点击后退按钮