【问题标题】:How to send GET data to the same page without loosing the previous GET data that is the URL to my page?如何将 GET 数据发送到同一页面,而不会丢失以前的 GET 数据,即我的页面的 URL?
【发布时间】:2015-09-01 16:02:44
【问题描述】:

我在页面:index.php?page=2 并且有一个“crteria”和“term”的搜索表单,但是每次我提交时,它都会带我到 index.php?criteria=x&term=x index.php?page=2&criteria=x&term=x。所以它忽略了page=2。我也想在我所在的同一页面上提交标准和术语。代码如下:

<div id="search">
    <form name="search" action="index.php?page=2" method="get">
        <p>Search by:</p>
        <select name="criteria">
            <option>Name</option>
            <option>Last name</option>
            <option>Project name</option>
        </select>
        <br><input type="text" name="tern" placeholder="term">
        <br><button type="submit">Find`enter code here`</button>
        <hr>
    </form>
</div>

在 index.php 中,我包含表单所在的页面,如下所示:

if(isset($_GET['page']) && $_GET['page'] == 2){
     include 'modules/search.php';
}

所以当我在 index.php?page=2 上时,search.php 为我提供了您可以在上面看到的表单。 我知道,这是一团糟,这是我的第一个项目。提前谢谢你。

【问题讨论】:

  • 考虑改用会话

标签: php forms get submit


【解决方案1】:

您可以简单地将输入隐藏参数添加到表单中并将其从操作属性中删除:

<form name="search" action="index.php" method="get">
    <input type="hidden" name="page" value="2">

如果有多个参数或参数可能不同,您可以将此代码添加到打印表单的 php 中:

foreach($_GET as $k => $v){
    $k = addslashes($k); //or a DBMS specific escape function
    $v = addslashes($v); //or a DBMS specific escape function
    echo "<input type='hidden' name='$k' value='$v' />";
}

【讨论】:

  • 危险:此代码是vulnerable to XSS。用户输入在插入 HTML 文档之前需要转义!
  • addslashes 总的来说是相当绝望的。它在 HTML 中完全没有希望,因为斜杠不是 HTML 转义字符!
  • 谢谢@Quentin 我现在不需要让网站防 XSS,但我必须学习如何为未来的项目做这件事。 S.Pini 感谢您的快速回答!
猜你喜欢
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多