Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果用户单击“上一步”或刷新页面,则重定向到当前页面_Php_Post - Fatal编程技术网

Php 如果用户单击“上一步”或刷新页面,则重定向到当前页面

Php 如果用户单击“上一步”或刷新页面,则重定向到当前页面,php,post,Php,Post,对不起,我已经发布了这个问题,我在谷歌上搜索了很多,但我仍然无法解决这个问题 我有一个php页面,它有一个表单,当用户单击“刷新”或“F5”时,它会在数据库中创建重复的值,并且会向用户发出一条消息,指示重新提交可能会在数据库中插入重复的值。我的老板不想让用户看到浏览器的警告框,也不希望将重复的值插入数据库 我知道它的头()。我在php手册中读了很多header(),也读了server\u name函数,但我还是尝试了很多方法,把它们放在顶部,但都无法解决。这非常重要。任何人都可以帮我一个解释方法

对不起,我已经发布了这个问题,我在谷歌上搜索了很多,但我仍然无法解决这个问题

我有一个php页面,它有一个表单,当用户单击“刷新”或“F5”时,它会在数据库中创建重复的值,并且会向用户发出一条消息,指示重新提交可能会在数据库中插入重复的值。我的老板不想让用户看到浏览器的警告框,也不希望将重复的值插入数据库

我知道它的
头()。我在php手册中读了很多
header()
,也读了
server\u name
函数,但我还是尝试了很多方法,把它们放在顶部,但都无法解决。这非常重要。任何人都可以帮我一个解释方法的代码示例。非常感谢任何帮助

 <form method="post" action"demo.php">
  <input name="fname" type="text">
  <input type="submit" value="submit">
 </form>
 demo.php
  <?php
   $firstname = $_POST['fname'];
   ?>

demo.php
告诉我应该在demo.php页面中添加什么来阻止它一次又一次地提交表单,并且如果用户单击浏览器上的“后退”按钮,它不应该指向上一页,它仍然应该重定向到当前页


因此,如果用户单击“刷新”或“上一步”按钮,它应仅重定向到当前页面,不应插入任何重复值,并且应禁用警报框。请在此处说明如何操作,我将在“深度帮助”中提供帮助。感谢您需要重复键,这将更新记录,而不是创建记录副本:
因此,无论他们点击刷新还是重新提交,如果记录已经存在,它都会被更新。

解决方案是在数据库操作(如插入、更新和删除)后重定向页面 pageName:test.php

if(isset($_REQUEST['deleteBtn']))
{
$emp_id=$_REQUEST['emp_id'];
$count=mysql_query("delete from employees where emp_id=$emp_id");
header("location:test.php");
}

这样,如果单击F5或“上一步”按钮,表单数据将不会再次发布。

您的代码有很多错误,有很多方法可以减轻影响

首先,为什么要创建重复条目? 除了坏数据的问题,还意味着你的网站容易受到CSRF的攻击。阅读如何使用一次性代币防止CSRF

如果您的站点存在性能问题,那么用户通常会多次单击“提交”按钮。在解决数据库上的重复提交问题时,使用javascript禁用页面上的提交链接,并提供页面正在执行操作的视觉反馈

重定向不是解决问题的方法

我老板不想要浏览器的警告框


你是说重复的邮政警报吗?虽然您可以使用PRG解决此问题,但这会产生其他问题。

您希望在创建会话id时在表单中嵌入会话id,并在服务器上跟踪该会话id。然后,当提交表单并且您正在服务器上处理表单时,如果表单提交了多次,您可以覆盖数据库中的第一次提交,或者以错误消息或其他方式响应。(仅在第一次提交时显示弹出窗口,不管怎样。)

一种简单的方法是生成会话id,将其作为表单中的隐藏字段发送,并在提交表单时将会话id存储在数据库中,同时限制会话id的唯一性。

必须发布唯一id(会话id)并将其保存在数据库中。 注册时,测试会话id是否已存在。如果是,请向用户发送消息。“您已发布此表单”

守则:

<?php session_start; ?>
    <form method="post" action"demo.php">
      <input name="fname" type="text">
      <input type="submit" value="submit">
      <input type="hidden" name="session_id" value="<?php echo session_id();?>">
     </form>
     demo.php
      <?php
      //test session_id in database
      $session_id = session_id();
      mysql_connect('localhost','xxx','xxx');
      mysql_select_db('xxx');
      $return = mysql_query("SELECT COUNT(*) AS nb_data FROM TABLENAME WHERE session_id='".session_id()."'");
      $data = mysql_fetch_assoc($return);
      if ($data['nb_data'] == 0){
            echo 'Your message';
      }
      else{       
            $firstname = $_POST['fname'];
            //.....
            header('location:xxx.php')?
      }
?>


我将使用php头函数替换当前位置,这样,如果用户单击“刷新”,它将不会重新发布信息和会话来存储发布的值并检查是否重新提交。 demo.php


form.php

<form method="post" action"demo.php">
  <input name="fname" type="text">
  <input type="submit" value="submit">
 </form>


提交表单后,您应该使用javascript
location.href='url'
重新加载页面。顺便问一下,你没有使用任何框架、架构或CMS等吗?@J.J.你说你没有使用任何框架是什么意思?我对php有点陌生。如果我需要使用任何框架,请告诉我。你听过ZEND、MVC、Magento、joomla、Typo3等吗?@J.J.其实不是什么they@all请用一些html和php页面向我解释抱歉,但我在谷歌上阅读了所有这些内容,但我无法将事情安排有序这就是我所要求的是,我不想从浏览器中弹出警报框,你能不能给我解释一下写php和html页面,让我明白,人们告诉我添加这个并重定向所有这些,但我仍然没有找到一个解决方案我需要一个更好的解决方案我需要php和html页面示例来理解,而不是直接发布一个指向它的链接,以及如何避免浏览器的警报框?只需插入到位
echo'Your message'带有
echo“警报(\'your message\')一定要回来,用复选标记将对您帮助最大的答案标记为“答案”。@J.J Sab Teek hai ter Kya hal hi?
<form method="post" action"demo.php">
  <input name="fname" type="text">
  <input type="submit" value="submit">
 </form>