У меня есть 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
и если пользователь хочет снова отправить форму, тогда значения длины и ширины должны измениться.
Вы можете добавить два скрытых поля в форму на первом целевом сайте 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 .'">'; } ?>
Более простое решение по сохранению URL-адреса без изменений с помощью http_build_query
<form action="<?php echo $_SERVER["PHP_SELF"] . '?'.http_build_query($_GET); ?>" ... .. ..
Однажды мне нужно было отсортировать результаты в таблице, чтобы результаты поиска поступали от 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>";
с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>";
Существуют разные способы сделать это. Все они записывают параметры, которые они получают в файл, память или базу данных, и получают их позже с помощью ключа
Самый простой способ – это что-то вроде переменной сеанса: http://php.net/manual/en/features.sessions.php
Основная настройка – это что-то вроде этого (предостережение: это небезопасный код, убедитесь, что вы только добавляете переменные сеанса, которые хотите сохранить, и дезинформируйте ввод пользователя!):
<?php session_start(); foreach ($_GET as $key=>$value) { $_SESSION[$key]=>$value; } ?>
и теперь, пока пользователь не закрывает браузер, вы можете получить доступ к этим переменным с помощью $_SESSION[varname];
Следующий код работает для моего проекта. Надеюсь, это поможет некоторым. 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); }
$_GET['fromvs']
В VendorSearch.php, aftersession_start (),
$srchfor =""; $fromwhat = $_GET['fromvs']; $_SESSION['fromwhat'] = $fromwhat; $vs = $fromwhat;
Использовать скрытый ввод для хранения переданной переменной URL
<div style='position: absolute; top: 10px; left: 400px;'><input type='hidden' hidden='hidden' id='fromvs' name='fromvs' value="<?php echo $_SESSION['fromwhat']; ?>"></div>
Но это
Сегмент в 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); }