web-dev-qa-db-fra.com

Comment conserver les valeurs de paramètre GET déjà définies lors de la soumission du formulaire?

J'ai une URL: foo.php?name=adam&lName=scott, et dans foo.php j'ai un formulaire qui me donne les valeurs de rectangleLength & rectangleBreadth avec un bouton d'envoi.

Lorsque je clique sur ce bouton d'envoi avec l'action de formulaire sous la forme $_SERVER['REQUEST_URI'], j'obtiens l'URL de résultat suivante: foo.php?rectangleLength=10&rectangleBreadth=5 (ces valeurs ont été renseignées par l'utilisateur).

Notez que je perds mes valeurs précédentes name & lName de l'URL.

Comment puis-je les garder?

Aussi, gardez à l'esprit que je dois revenir à foo.php et si l'utilisateur souhaite soumettre le formulaire à nouveau, les valeurs de longueur et de largeur doivent changer.

23
saurabh

Vous pouvez ajouter deux champs cachés dans le formulaire sur le premier site cible, blabla.php dans votre cas:

<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>

Pour une solution dynamique, utilisez une boucle foreach:

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

Vous pouvez envisager de verrouiller l’approche dynamique sur une liste de clés possibles connues:

<?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

Il y a différentes facons de faire cela. Tous écrivent les paramètres qu’ils reçoivent dans un fichier, une mémoire ou une base de données et les récupèrent plus tard avec une clé

La méthode la plus simple ressemble à une variable de session: http://php.net/manual/en/features.sessions.php

La configuration principale ressemble à ceci (attention: il s’agit d’un code non sécurisé, assurez-vous de n’ajouter que les variables de session que vous souhaitez conserver et de nettoyer les entrées utilisateur!):

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

?>

et maintenant, tant que l'utilisateur ne ferme pas le navigateur, vous pouvez accéder à ces variables avec $_SESSION[varname];

3
ty812

Une solution plus simple pour garder l’URL inchangée en utilisant http_build_query

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

Une fois, j’ai eu besoin de trier les résultats dans un tableau en conservant les résultats de recherche provenant de GET. J'ai fait comme ç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>";
2
Sarvar Nishonboev
  1. Dans le menu (appelant HTML), j'appelle VendorSearch.php. La variable fromvs est utilisée dans l'URL.
  2. La cible php VendorSearch.php effectuera différents travaux en fonction de la valeur de $_GET['fromvs']
  3. Dans VendorSearch.php, aftersession_start (), 

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

  4. Utiliser une entrée cachée pour stocker la variable passée par 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. Mais ce thie 

Segment en appelant html .... Ajouter un sous-traitant </ li> .... Attribuer des contrats de sous-traitance </ li> ..... Déconnexion </ li> ... .

Segment en php cible: 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

Le code suivant fonctionne pour mon projet. J'espère que cela aidera certains. 1. Dans le menu (appelant HTML), j'appelle VendorSearch.php. la variable fromvs est utilisée dans l'URL. 2. La cible php VendorSearch.php effectuera différents travaux en fonction de la valeur de $ _GET ['fromvs'] 3. Dans 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