是否可以只运行一次更新查询,这里我有一个链接或按钮,如果他点击他的个人资料将自动更改(更新)并将他带到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'";
}
没有提交按钮没有更新数据的其他事件,但只是通过网址或链接点击我传递了更新数据的ID,我希望我的问题是由我方完成的,希望你能理解我是否错过了什么或遗失请让我知道...随便问我关于我的问题的任何内容..plz帮助我真的需要帮助....提前感谢!
答案 0 :(得分:4)
您绝不应该在GET请求中进行任何数据更改。 如HTML 4和HTTP规范中所述
如果表单的处理是幂等的(即它对世界状态没有持久的可观察效果),那么表格方法应该是GET。许多数据库搜索没有明显的副作用,并且是查询表单的理想应用程序。
如果与表单处理相关联的服务有副作用(例如,修改数据库或订阅服务),则该方法应为POST。
例如,如果用户有一个预先加载页面上所有网址的“网站加速器”,会发生什么?
您还应该检查该请求是否确实来自您网站上的用户,或者您打开了一个非常简单的CSRF漏洞。
话虽如此,修复所需内容的常用方法是,在更新数据库中的用户状态后,应该向非修改页面发出重定向。
基页 - &gt;点击更改链接 - &gt;更改数据库中的状态并再次重定向到基页
<?php
if(($age== '') || ($location= '') || ($status= '')) {
mysqli_query(/* update whatever */);
header('Location: myaccount.php');
exit;
}
如果他刷新页面,他就在基页上,所以它不会改变任何东西。 如果他在浏览器中按“返回”,他也会回到页面基础(发布重定向的页面不会保存在浏览器历史记录中)。
答案 1 :(得分:1)
进行更新后,请勿输出任何内容。相反,将用户发送到其他地方,例如:
header("Location: myaccount.php");
exit(0);
这样,GET数据从链接中丢失,重新加载不会重复更新,而单击“返回”按钮会将用户带到页面(可能是表单)之前更新,所以 - 再次 - 不会重复更新。
答案 2 :(得分: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';
}
}