如何在表单提交时保留已设置的 GET 参数值?

发布于 2024-12-01 10:05:49 字数 483 浏览 2 评论 0原文

我有一个 URL:foo.php?name=adam&lName=scott,在 foo.php 中,我有一个表单,它给出了 rectangleLength< 的值/代码> & rectangleBreadth 带有提交按钮。

当我单击表单操作为 $_SERVER['REQUEST_URI'] 的提交按钮时,我得到以下结果 URL:foo.php?rectangleLength=10&rectangleBreadth=5 (这些值已由用户填写)。

请注意,我正在丢失以前的值 name & URL 中的 lName

我怎样才能保留它们?

另外,请记住,我必须返回 foo.php,如果用户想要再次提交表单,则长度和宽度值应该更改。

I have a URL : foo.php?name=adam&lName=scott, and in foo.php I have a form which gives me values of rectangleLength & rectangleBreadth with a submit button.

When I click this submit button with form action as $_SERVER['REQUEST_URI'], I get this result URL: foo.php?rectangleLength=10&rectangleBreadth=5 (these values have been filled in by the user).

Notice that I am losing my previous values name & lName from the URL.

How can I keep them?

Also, keep in mind that I have to come back to foo.php and if the user wants to submit the form again then the length and breadth values should change.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

乱了心跳 2024-12-08 10:05:49

您可以在第一个目标站点(在您的情况下为 blabla.php)的表单中添加两个隐藏字段:

<form ...>
  <input type="hidden" name="name" value="<?php echo htmlspecialchars($_GET['name']);?>">
  <input type="hidden" name="lName" value="<?php echo htmlspecialchars($_GET['lName']);?>">

  <!-- rest of the form here -->
</form>

对于动态解决方案,请使用 foreach 循环:

<?php
foreach($_GET as $name => $value) {
  $name = htmlspecialchars($name);
  $value = htmlspecialchars($value);
  echo '<input type="hidden" name="'. $name .'" value="'. $value .'">';
}
?>

您可以考虑将动态方法锁定到已知可能键的列表:

<?php
$keys = array('name', 'lName', ...);
foreach($keys as $name) {
  if(!isset($_GET[$name])) {
    continue;
  }
  $value = htmlspecialchars($_GET[$name]);
  $name = htmlspecialchars($name);
  echo '<input type="hidden" name="'. $name .'" value="'. $value .'">';
}
?>

You can add two hidden fields in the form on the first target site, blabla.php in your case:

<form ...>
  <input type="hidden" name="name" value="<?php echo htmlspecialchars($_GET['name']);?>">
  <input type="hidden" name="lName" value="<?php echo htmlspecialchars($_GET['lName']);?>">

  <!-- rest of the form here -->
</form>

For a dynamic solution, use a foreach loop:

<?php
foreach($_GET as $name => $value) {
  $name = htmlspecialchars($name);
  $value = htmlspecialchars($value);
  echo '<input type="hidden" name="'. $name .'" value="'. $value .'">';
}
?>

You may consider locking the dynamic approach down to a list of known possible keys:

<?php
$keys = array('name', 'lName', ...);
foreach($keys as $name) {
  if(!isset($_GET[$name])) {
    continue;
  }
  $value = htmlspecialchars($_GET[$name]);
  $name = htmlspecialchars($name);
  echo '<input type="hidden" name="'. $name .'" value="'. $value .'">';
}
?>
梦里梦着梦中梦 2024-12-08 10:05:49

使用 http_build_query 保持 URL 不变的更简单解决方案

 <form action="<?php echo $_SERVER["PHP_SELF"] . '?'.http_build_query($_GET); ?>" ... 
  ..
  ..

A simpler solution to keep the URL unchanged by using http_build_query

 <form action="<?php echo $_SERVER["PHP_SELF"] . '?'.http_build_query($_GET); ?>" ... 
  ..
  ..
梦里泪两行 2024-12-08 10:05:49

有不同的方法可以做到这一点。它们都将接收到的参数写入文件、内存或数据库,然后使用密钥检索它们。

最简单的方法类似于会话变量:http://php.net/manual/en/features.sessions.php

主要设置是这样的(注意:这是不安全的代码,确保只添加会话变量想要保留并清理用户输入!):

<?php
session_start();
foreach ($_GET as $key=>$value) {
    $_SESSION[$key]=>$value;
}

?>

现在,只要用户不关闭浏览器,您就可以使用 $_SESSION[varname]; 访问这些变量

There are different ways to do this. All of them write the parameters they receive into a file, memory, or a database and retrieve them later with a key

The easiest method is something like a session variable: http://php.net/manual/en/features.sessions.php

The main setup is something like this (caution: that is unsecure code, make sure you only add session variables you want to keep, and sanitize user input!):

<?php
session_start();
foreach ($_GET as $key=>$value) {
    $_SESSION[$key]=>$value;
}

?>

and now, as long as the user does not close the browser, you can access these variables with $_SESSION[varname];

是你 2024-12-08 10:05:49

有一次,我需要对表中的结果进行排序,以保留来自 GET 的搜索结果。我确实喜欢这样:

unset($_GET['sort']); // sort param is removed, otherwise there will be created many sort params
$url = http_build_query($_GET);

echo "<a href='?".$url."&sort=title'>Title</a>";
echo "<a href='?".$url."&sort=author'>Author</a>";

Once, I needed sorting the results in a table keeping the search results coming from GET. I did like that:

unset($_GET['sort']); // sort param is removed, otherwise there will be created many sort params
$url = http_build_query($_GET);

echo "<a href='?".$url."&sort=title'>Title</a>";
echo "<a href='?".$url."&sort=author'>Author</a>";
温柔嚣张 2024-12-08 10:05:49

使用数组处理查询:

foreach (explode("\n", http_build_query($query, '', "\n")) as $keyValue) {
    [$key, $value] = explode('=', $keyValue, 2);
    $key = htmlspecialchars(urldecode($key), ENT_COMPAT | ENT_HTML5);
    $value = htmlspecialchars(urldecode($value), ENT_COMPAT | ENT_HTML5);
    echo '<input type="hidden" name="' . $key . '" value="' . $value . '"' . "/>\n";
}

To handle query with arrays:

foreach (explode("\n", http_build_query($query, '', "\n")) as $keyValue) {
    [$key, $value] = explode('=', $keyValue, 2);
    $key = htmlspecialchars(urldecode($key), ENT_COMPAT | ENT_HTML5);
    $value = htmlspecialchars(urldecode($value), ENT_COMPAT | ENT_HTML5);
    echo '<input type="hidden" name="' . $key . '" value="' . $value . '"' . "/>\n";
}
滴情不沾 2024-12-08 10:05:49

以下代码适用于我的项目。希望它能帮助一些人。
1.在菜单中(调用html)我调用VendorSearch.php。 URL 中使用变量 fromvs。
2.目标php VendorSearch.php会根据$_GET['fromvs']的值做不同的工作
3. 在VendorSearch.php中,aftersession_start(),

$srchfor ="";
$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
//save value to $VS
$vs = $fromwhat;

3. Use hidden input to store URL passed variable
<div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>

4. But this thie field's value may lost after clicking button "srchvnd". So use a function to reset 
$_SESSION['fromwhat'];  

if (isset($_POST['srchvnd']))
{ 
     $vs = $_POST['fromvs'];

     somefunction($vs);

}

-----------------Source code----------------------

Segment in Calling html 
....
<body>
<div style="  position: absolute; top: 1px; left: 5px; height:740px;  width:205px; border-radius: 10px;" >
<!-- Start css3menu.com BODY section -->
<ul  id="css3menu1" class="topmenu">
    <li class="topfirst"><a href="VendorSearch.php?fromvs=V" target="I1" style="width:183px;">Add a Subcontractor </a></li>
    ....
    <li class="topmenu"><a href="VendorSearch.php?fromvs=S" target="I1" style="width:183px;">Assign Subcontractor Contracts</a></li>
    .....
    <li class="toplast"><a href="login.php" target="_self" style="width:183px;">Log Out</a></li>
</ul>
....
</div>

Segment in target php: VendorSearch.php

<?php
//VendorSearch.php
//http://mted202.mtaent.org:9051/ocr/login.php rweinbau 
require_once('dbinfo.php');

session_start();
$c = oci_pconnect("ocr","ocrmta","HQT4");
oci_set_client_identifier($c, $_SESSION['username']);
$username = htmlentities($_SESSION['username'], ENT_QUOTES); 
.....
$srchfor ="";

$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
$vs = $fromwhat;

if (isset($_POST['srchvnd']))
{ 
     $vs = $_POST['fromvs'];

     somefunction($vs);

}
else
{
    ;
}

?>
<body>
    <form class="vfrmsrch" name="vndsearch" id="vndsearch" action="VendorSearch.php?fromvs='<?php echo $fromwhat; ?>'" method="POST"> 
        <div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>
    ......
      <td><input type="submit" class="slbt" name="srchvnd"  id ="srchvnd" vaue="Search"></input></td>
     ......
    </form>
.......
</body>  
</html> 
<?php
function somefunction($vvs){    
//$msg = "We are inf somefunction() function </a></div><br>";

// echo  "<div style='position: absolute; top: 100px; left: 10px;'><a style='color:blue'>".$msg;

$_SESSION['fromwhat'] = $vvs;
............

oci_close($c);
}

Following code works for my project. Hope it help some.
1. In menu (calling html) I call VendorSearch.php. variable fromvs is used in URL.
2. The target php VendorSearch.php will do different jobs based on the value of $_GET['fromvs']
3. In VendorSearch.php, aftersession_start(),

$srchfor ="";
$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
//save value to $VS
$vs = $fromwhat;

3. Use hidden input to store URL passed variable
<div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>

4. But this thie field's value may lost after clicking button "srchvnd". So use a function to reset 
$_SESSION['fromwhat'];  

if (isset($_POST['srchvnd']))
{ 
     $vs = $_POST['fromvs'];

     somefunction($vs);

}

-----------------Source code----------------------

Segment in Calling html 
....
<body>
<div style="  position: absolute; top: 1px; left: 5px; height:740px;  width:205px; border-radius: 10px;" >
<!-- Start css3menu.com BODY section -->
<ul  id="css3menu1" class="topmenu">
    <li class="topfirst"><a href="VendorSearch.php?fromvs=V" target="I1" style="width:183px;">Add a Subcontractor </a></li>
    ....
    <li class="topmenu"><a href="VendorSearch.php?fromvs=S" target="I1" style="width:183px;">Assign Subcontractor Contracts</a></li>
    .....
    <li class="toplast"><a href="login.php" target="_self" style="width:183px;">Log Out</a></li>
</ul>
....
</div>

Segment in target php: VendorSearch.php

<?php
//VendorSearch.php
//http://mted202.mtaent.org:9051/ocr/login.php rweinbau 
require_once('dbinfo.php');

session_start();
$c = oci_pconnect("ocr","ocrmta","HQT4");
oci_set_client_identifier($c, $_SESSION['username']);
$username = htmlentities($_SESSION['username'], ENT_QUOTES); 
.....
$srchfor ="";

$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
$vs = $fromwhat;

if (isset($_POST['srchvnd']))
{ 
     $vs = $_POST['fromvs'];

     somefunction($vs);

}
else
{
    ;
}

?>
<body>
    <form class="vfrmsrch" name="vndsearch" id="vndsearch" action="VendorSearch.php?fromvs='<?php echo $fromwhat; ?>'" method="POST"> 
        <div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>
    ......
      <td><input type="submit" class="slbt" name="srchvnd"  id ="srchvnd" vaue="Search"></input></td>
     ......
    </form>
.......
</body>  
</html> 
<?php
function somefunction($vvs){    
//$msg = "We are inf somefunction() function </a></div><br>";

// echo  "<div style='position: absolute; top: 100px; left: 10px;'><a style='color:blue'>".$msg;

$_SESSION['fromwhat'] = $vvs;
............

oci_close($c);
}
笨死的猪 2024-12-08 10:05:49
  1. 在菜单中(调用 html)我调用 VendorSearch.php。 URL 中使用变量 fromvs。
  2. 目标php VendorSearch.php会根据$_GET['fromvs']的值做不同的工作
  3. 在VendorSearch.php中,aftersession_start(),

    $srchfor ="";
    $fromwhat = $_GET['fromvs'];
    $_SESSION['fromwhat'] = $fromwhat;
    $vs = $fromwhat;

  4. 使用隐藏输入来存储 URL 传递的变量

    <输入类型='隐藏'隐藏='隐藏'id='fromvs'name='fromvs'value="" >

  5. But this thie

Segment in Calling html
....

添加分包商
....
分配分包商合同
……
退出

....

目标 php 中的段:VendorSearch.php

<?php
//VendorSearch.php
//http://mted202.mtaent.org:9051/ocr/login.php rweinbau 
require_once('dbinfo.php');

session_start();
$c = oci_pconnect("ocr","ocrmta","HQT4");
oci_set_client_identifier($c, $_SESSION['username']);
$username = htmlentities($_SESSION['username'], ENT_QUOTES); 
.....
$srchfor ="";

$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
$vs = $fromwhat;

if (isset($_POST['srchvnd']))
{ 
 $vs = $_POST['fromvs'];

 somefunction($vs);

}
else
{
    ;
}

?>
<body>
<form class="vfrmsrch" name="vndsearch" id="vndsearch" action="VendorSearch.php?fromvs='<?php    echo $fromwhat; ?>'" method="POST"> 
    <div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>
......
</form>
.......
</body>  
</html> 
<?php
function somefunction($vvs){    
//$msg = "We are inf somefunction() function </a></div><br>";

// echo  "<div style='position: absolute; top: 100px; left: 10px;'><a style='color:blue'>".$msg;

$_SESSION['fromwhat'] = $vvs;
............

oci_close($c);
}
  1. In menu (calling html) I call VendorSearch.php. variable fromvs is used in URL.
  2. The target php VendorSearch.php will do different jobs based on the value of $_GET['fromvs']
  3. In VendorSearch.php, aftersession_start(),

    $srchfor ="";
    $fromwhat = $_GET['fromvs'];
    $_SESSION['fromwhat'] = $fromwhat;
    $vs = $fromwhat;

  4. Use hidden input to store URL passed variable

    <div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat']; ?>"></div>

  5. But this thie

Segment in Calling html
....

Add a Subcontractor

....
Assign Subcontractor Contracts

.....
Log Out

....

Segment in target php: VendorSearch.php

<?php
//VendorSearch.php
//http://mted202.mtaent.org:9051/ocr/login.php rweinbau 
require_once('dbinfo.php');

session_start();
$c = oci_pconnect("ocr","ocrmta","HQT4");
oci_set_client_identifier($c, $_SESSION['username']);
$username = htmlentities($_SESSION['username'], ENT_QUOTES); 
.....
$srchfor ="";

$fromwhat = $_GET['fromvs'];
$_SESSION['fromwhat'] = $fromwhat;
$vs = $fromwhat;

if (isset($_POST['srchvnd']))
{ 
 $vs = $_POST['fromvs'];

 somefunction($vs);

}
else
{
    ;
}

?>
<body>
<form class="vfrmsrch" name="vndsearch" id="vndsearch" action="VendorSearch.php?fromvs='<?php    echo $fromwhat; ?>'" method="POST"> 
    <div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat'];  ?>"></div>
......
</form>
.......
</body>  
</html> 
<?php
function somefunction($vvs){    
//$msg = "We are inf somefunction() function </a></div><br>";

// echo  "<div style='position: absolute; top: 100px; left: 10px;'><a style='color:blue'>".$msg;

$_SESSION['fromwhat'] = $vvs;
............

oci_close($c);
}
℡Ms空城旧梦 2024-12-08 10:05:49

我个人的偏好是指定您希望接受的键,并确保通过 htmlspecialchars() 运行该值。

$url_params = array(
  'tab'
);
foreach( $url_params as $key ) {
  echo !empty( $_GET[$key] ) ? '<input type="hidden" name="'. $key .'" value="'. htmlspecialchars( $_GET[$key] ) .'" />' : '';
}

My personal preference would be to specify the keys you wish to accept and be sure to run the value through htmlspecialchars().

$url_params = array(
  'tab'
);
foreach( $url_params as $key ) {
  echo !empty( $_GET[$key] ) ? '<input type="hidden" name="'. $key .'" value="'. htmlspecialchars( $_GET[$key] ) .'" />' : '';
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文