it-swarm.com.ru

Как сохранить уже установленные значения параметров GET при отправке формы?

У меня есть URL: foo.php?name=adam&lName=scott, а в foo.php есть форма, которая дает мне значения rectangleLength & rectangleBreadth с кнопкой отправки.

Когда я нажимаю эту кнопку отправки с действием формы как $_SERVER['REQUEST_URI'], я получаю URL результата: foo.php?rectangleLength=10&rectangleBreadth=5 (эти значения были заполнены пользователем).

Обратите внимание, что я теряю свои предыдущие значения name & lName из URL.

Как я могу сохранить их?

Кроме того, имейте в виду, что я должен вернуться к foo.php, и если пользователь захочет отправить форму еще раз, значения длины и ширины должны измениться.

23
saurabh

Вы можете добавить два скрытых поля в форму на первом целевом сайте, в вашем случае 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 .'">';
}
?>
29
Emil Vikström

Есть разные способы сделать это. Все они записывают параметры, которые они получают, в файл, память или базу данных и получают их позже с помощью ключа.

Самый простой метод - это что-то вроде переменной сеанса: http://php.net/manual/en/features.sessions.php

Основная настройка выглядит примерно так (осторожно: это небезопасный код, убедитесь, что вы добавляете только те переменные сеанса, которые хотите сохранить, и очищаете пользовательский ввод!):

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

?>

и теперь, пока пользователь не закрывает браузер, вы можете получить доступ к этим переменным с помощью $_SESSION[varname];

3
ty812

Более простое решение сохранить URL-адрес без изменений с помощью http_build_query

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

Однажды мне нужно было отсортировать результаты в таблице, сохранив результаты поиска из 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>";
2
Sarvar Nishonboev
  1. В меню (вызов html) я вызываю VendorSearch.php. переменная fromvs используется в URL.
  2. Целевой php VendorSearch.php будет выполнять различные задания в зависимости от значения $_GET['fromvs']
  3. В VendorSearch.php, aftersession_start (), 

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

  4. Используйте скрытый ввод для хранения URL переданной переменной

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

  5. Но это воровка 

Сегмент в вызове html .... Добавить Субподрядчика </ li> .... Назначить контракты субподрядчикам </ li> ..... Выйти </ li> .... 

Сегмент в целевой 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);
}
0
Peter Moh

Следующий код работает для моего проекта. Надеюсь, что это поможет некоторым . 1. В меню (вызов html) я вызываю VendorSearch.php. переменная fromvs используется в URL . 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);
}
0
Peter Moh