点击保存按钮后如何一次性刷新PHP编辑页面?
解决点击保存按钮后页面仅刷新一次的问题
我明白你的需求:点击"save"(也就是代码里的ajout提交按钮)后,页面自动刷新一次来展示最新的修改内容,而且不需要定时自动刷新,只在保存操作触发时刷新。
先看你当前的代码,它已经实现了成功/失败的提示框,但缺少触发页面刷新的逻辑。下面给你两种可行的解决方案,你可以根据需求选择:
方法1:JavaScript 直接刷新(简单快速)
这种方法适合需要先让用户看到成功提示,再刷新页面的场景。我们只需要在成功提示的JavaScript代码里,添加页面刷新的逻辑即可:
if (isset($_POST['ajout'])) { $travail = str_replace("'","'", $_POST['travail']); $req = $fun -> modifier($_POST['name'], $travail); if ($req) { // 成功时,先显示提示,3秒后隐藏提示并刷新页面 echo '<script type="text/javascript"> setTimeout(function() { document.getElementById("merci").style.display = "none"; window.location.reload(); // 核心:刷新当前页面 }, 3000); // 延迟3秒,给用户足够时间看到提示 </script> <div id="merci" class="alert alert-success fade in"> <button data-dismiss="alert" class="close close-sm" type="button"> <i class="fa fa-times"></i> </button> 修改成功!页面即将刷新... </div>'; } else { // 失败时保持原逻辑,只显示提示不刷新 echo '<script type="text/javascript"> setTimeout(function() { document.getElementById("merci").style.display = "none"; },10000); </script> <div id="merci" class="alert alert-danger fade in"> <button data-dismiss="alert" class="close close-sm" type="button"> <i class="fa fa-times"></i> </button> <strong>错误</strong> 请重试 </div>'; } }
说明:
- 我们在成功回调的
setTimeout里添加了window.location.reload(),这会触发页面刷新。 - 设置3秒延迟是为了让用户能看到"修改成功"的提示,你可以根据需求调整这个时间。
方法2:PHP 重定向(更安全的最佳实践)
如果想避免用户刷新页面时重复提交表单(这是POST请求常见的问题),推荐使用POST-Redirect-GET模式:用PHP重定向到当前页面,同时通过Session传递提示信息。
// 处理表单提交 if (isset($_POST['ajout'])) { session_start(); // 启动Session $travail = str_replace("'","'", $_POST['travail']); $req = $fun -> modifier($_POST['name'], $travail); // 将提示信息存入Session if ($req) { $_SESSION['success_msg'] = "修改成功!"; } else { $_SESSION['error_msg'] = "修改失败,请重试!"; } // 重定向到当前页面(使用GET请求,避免重复提交) header("Location: " . $_SERVER['PHP_SELF']); exit; // 终止后续代码执行 } // 在页面合适的位置显示提示信息 session_start(); if (isset($_SESSION['success_msg'])) { echo '<div id="merci" class="alert alert-success fade in"> <button data-dismiss="alert" class="close close-sm" type="button"> <i class="fa fa-times"></i> </button> ' . $_SESSION['success_msg'] . ' </div>'; unset($_SESSION['success_msg']); // 显示后立即清除Session,避免重复显示 } if (isset($_SESSION['error_msg'])) { echo '<div id="merci" class="alert alert-danger fade in"> <button data-dismiss="alert" class="close close-sm" type="button"> <i class="fa fa-times"></i> </button> <strong>错误</strong> ' . $_SESSION['error_msg'] . ' </div>'; unset($_SESSION['error_msg']); }
说明:
- 这种方法会先处理表单提交,然后跳转到当前页面(GET请求),彻底避免了重复提交的问题。
- 通过Session传递提示信息,刷新页面后依然能显示,并且显示后立即清除Session,不会重复提示。
总结
- 如果你需要快速实现,且不担心重复提交的问题,选方法1;
- 如果你追求更安全、规范的开发模式,推荐方法2,这也是行业内的最佳实践。
内容的提问来源于stack exchange,提问作者Hamdi Jdidi
相关产品推荐
相关产品推荐

