首页 > 解决方案 > 如何使用 php/javascript 仅显示 url 中的特定参数?

问题描述

我有几个传递给页面的参数,例如来自我的数据库的唯一 ID、错误消息和表单数据。我想隐藏所有这些参数,以保持 url 干净,除了 id。我尝试为 PHP 和 JavaScript 查找这个,但没有找到解决方案,所以我开始摆弄。

如果我在隐藏 id 后刷新页面,路由将无法再找到 id,这会在页面上产生一堆错误。我想隐藏除 id 之外的所有参数,这样我就不会收到这些错误。我设法使用这段 Javascript 删除了所有参数:

let clean_url = window.location['href'].split('?')[0];
window.history.pushState(null, null, clean_url);

如果已设置,我尝试仅显示 id(始终为正整数),但是当将我的 JS 更改为下一个代码块时,它会再次显示所有参数。

let url_string = window.location['href'];
let url = new URL(url_string);
let id = url.searchParams.get("id");
if (typeof id !== 'undefined') {
    let clean_url = url_string.split('?')[0].concat("?id={0}".format(id));
} else {
    let clean_url = window.location['href'].split('?')[0];
}
window.history.pushState(null, null, clean_url);

谁能告诉我我的代码有什么问题,或者它是否可以在 php 中解决?提前致谢。

编辑:由于我没有时间,我将无法将我的反馈消息设置为 $_SESSION。我找到了一种修复我的javascript的方法,因此除了参数之外的所有参数id都被隐藏:

let url_string = window.location['href'];
let short_url = window.location['href'].split('?')[0];
let url = new URL(url_string);
let id = url.searchParams.get("id");
if (id == null) {
    window.history.pushState(null, null, short_url);
} else {
    let clean_url = short_url.concat(`?id=${id}`);
    window.history.pushState(null, null, clean_url);
}

标签: javascriptphp

解决方案


为您的数据使用良好的媒介。

这并不总是正确的,但一个好的经验法则是错误消息在 $_SESSION 中,表单数据在 $_POST 中。

例如,您的表单可能如下所示:

<form method="post" action="myurl1.php?id=123">
  <!--you could also use a hidden field to send the id with post : <input type="hidden" name="id" />-->
  <input name="test" />
</form>

并且您的表格的处理可以给出:

if(empty($_POST[test])){
  $_SESSION['error']='Empty test field';
}
header('Location: myurl2.php?id='.$_GET['id']); //or $_POST['id'] if you used a hidden field

关键是您决定如何发送数据,并且您应该仅在 URL 对您的用户有价值时才使用它。

(更多关于 php 会话的信息


推荐阅读