0

是否可以只运行一次更新查询,这里我有一个链接或按钮,如果他点击他的个人资料将自动更改(更新)并将他带到 myaccount.php 页面。一切正常且工作正常,但主要问题是在重新加载同一页面(myaccount.php)和他的个人资料每次更新时出现。但我希望他的个人资料只在他单击链接或该按钮一次时才更改...我将链接设置为

<a href='myaccount.php.php?age =$age && status= $status' target='_blank' style='color:#E07707;font-weight:bold;'>Update Profile</a></div></div><br>

我将 myaccount.php 上的更新查询设置为:

  if(($age== '') || ($location= '') || ($status= ''))
     {  
      $newquery1 = "update $tabl_u something...................... where id='$id'";
    }

没有提交按钮,没有其他更新数据的事件,但只有通过 url 或链接点击,我传递了一些更新数据的 id我知道...请随时就我的问题提出任何问题..请帮助我真的需要帮助....提前致谢!

4

3 回答 3

4

您不应该在 GET 请求中进行任何数据更改。如 HTML 4 和 HTTP 规范中所述

如果表单的处理是幂等的(即它对世界状态没有持久的可观察影响),那么表单方法应该是 GET。许多数据库搜索没有明显的副作用,是查询表单的理想应用。

如果与处理表单相关的服务有副作用(例如,修改数据库或订阅服务),则方法应该是 POST。

例如,如果用户有一个“网络加速器”来预加载页面上的所有 url,会发生什么?

您还应该检查该请求是否确实来自您网站上的用户,或者您打开了一个非常简单的CSRF漏洞的大门。

话虽如此,解决您想要的问题的常用方法是,在更新数据库中的用户状态后,您应该发出重定向到非修改页面。

基本页面 -> 单击更改链接 -> 更改数据库中的状态并再次重定向到基本页面

<?php
if(($age== '') || ($location= '') || ($status= '')) {
   mysqli_query(/* update whatever */);
   header('Location: myaccount.php');
   exit;
}

如果他刷新页面,他就在基本页面上,所以它不会改变任何东西。如果他在浏览器中按“返回”,他也会返回页面库(发出重定向的页面不会保存在浏览器历史记录中)。

于 2013-05-19T12:03:18.043 回答
1

完成更新后,不要输出任何内容。相反,将用户发送到其他地方,例如:

header("Location: myaccount.php");
exit(0);

这样,GET 数据会从链接中丢失,并且重新加载不会重复更新,而单击“返回”按钮会将用户带到更新的页面(可能是表单) ,所以 - 再次 - 更新将不再重复。

于 2013-05-19T12:02:59.860 回答
0
session_start();
if(isset($_GET)) {

   if(empty($_SESSION['update'])) {
     //update data 
     $_SESSION['update'] = 'Finished';
     echo 'updating is finished';
   }else{
     echo 'Your details have beed updated already';
   }
 }
于 2013-05-19T12:08:04.377 回答