PHP 如何在处理另一个表单后保持在同一页面上


PHP How to stay on same page after another form has been processed?

所以在我正在处理的这个应用程序上,它会在我的数据库中搜索一些代码,抓取它,打开一个新页面,并通过获取其 id 将代码(必要时)放在新页面上。

现在,在该代码(来自数据库)中,还有另一种基于用户输入进行处理的形式。我遇到的问题是新表单未在同一页面上处理。它会重定向到未指定数据库中代码的新 URL。例如。。。

当使用数据库中的代码生成新页面时,url 如下所示...

localhost/newpage.php?id=1

然后,当我从数据库中提交代码中的表单时,它会更改为此...

localhost/newpage.php?input1=blah&input2=blah

但我想要这样的东西...

localhost/newpage.php?id=1&input1=blah&input2=blah

仅供参考,此代码必须是动态的。例如,假设我不知道用户要查找的 id,并且该 id 中我不知道有多少输入字段。

如果你们需要一些明确的代码(显然我省略了不必要的东西)......

这是搜索页面.php它搜索数据库并显示所有相关项目。然后用户选择一个包含 id 的项目并生成具有该 id 的新页面.php...

//there is a search query then puts all elements in an associative array
$rows = items->fetch_all(MYSQL_ASSOC);
foreach ($rows as $row) {
   $id = $row['id'];
   echo "<a href='newpage.php?id=$id>User clicks to generate a newpage</a>"; 
}

这是从数据库中检索并放置在新页面.php...

<form action="newpage.php" method="GET">
   <input name="input1"></input>
   //there can be an x amount of input tags here depending on what id is pulled
</form>

这是新页面顶部的 php.php当它生成时...

if (isset($_GET['id'])) {
   //retrieves data from specified id from database
   if(isset($_GET['inputs'])) {
      //do something with user inputs
   }
}

有什么办法可以做到这一点吗?感谢所有帮助!谢谢:)


溶液

为此,我必须创建一个存储 id 的会话。因此,我不得不将所有 _GET 美元的变量(处理 id 信息)更改为 _SESSION 美元的变量。但只要您不存储关键/敏感信息,它就可以工作!

这是代码更改...

搜索更改.php ...

//there is a search query then puts all elements in an associative array
$rows = items->fetch_all(MYSQL_ASSOC);
foreach ($rows as $row) {
   $id = $row['id'];
   $_SESSION['current_id'] = $id;
   echo "<a href='newpage.php?id=$id>User clicks to generate a newpage</a>"; 
}

新页面中的更改.php...

<form action="newpage.php?id=" method="POST">
   <input name="input1"></input>
   //there can be an x amount of input tags here depending on what id is pulled
</form>

新页面的 php 更改.php ...

if (isset($_SESSION['current_id'])) {
   //retrieves data from specified id from database
   if(isset($_POST['inputs'])) {
      //do something with user inputs
   }
}

这一切都归功于...

萨提克汗

您可以在引用的标头中获取查询字符串"id"。您可以在客户端或服务器中附加该查询字符串。

请使用$_SERVER['HTTP_REFERER']获取引用网址,然后从那里获取ID。如果它是登录用户的ID,出于安全原因,我建议将它们存储在会话中。

根据您的意见,您可以执行以下任一操作,1. 将表单中的 ID 保留为隐藏变量2. 使用 id 作为查询字符串之一更新您的 URL,并发送回客户端进行纠错。3. 将 ID 保留在会话中(如果适用)4. 在重定向之前使用帖子并执行表单验证

谢谢。