保存PHP表单数据而无需在页面刷新时提交


save PHP form data without submit on page refresh

我在页面中有两个表单,一个是过滤器,第二个是项目列表,当我将过滤器应用于项目列表表单时,所选值将重置为默认值。对于过滤器,我可以保存选定的值,因为我通过POST方法提交了此表单,但其他表单仍然未提交。是否可以在页面刷新后保存选定的该表单值?这是一些第二种形式的代码:

<form name="forma" method="post" onMouseOver="kaina();" onSubmit="return tikrinimas()" action="pagrindinis.php?page=generuoti.php">
  <table width="540" border="1" align="center">
  <tr>
    <td>Client:</td>
    <td>MB:</td>
    <td>Price:</td>
  </tr>
  <tr>
    <td>
    <?php
        $query="SELECT name,surname,pers_code FROM Clients";
        mysql_query("SET NAMES 'UTF8'");
        $result = mysql_query ($query);
        echo "<select name=Clients id='clients'>";
        echo "<OPTION value=''>- Choose -</OPTION>'n";
        while($nt=mysql_fetch_array($result)){
            echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
        }
        echo "</select>"; 
    ?></td>
  </tr>
</form>

您需要根据$_POST中的内容设置选择元素的selected属性。类似于:

$selected = $_POST['Client'];
while($nt=mysql_fetch_array($result)){
  if ($selected == $nt[pers_code]) {
    echo "<option value=$nt[pers_code] selected="selected">$nt[name] $nt[surname]</option>";
  }
  else {
    echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
  }
}

还要注意,您可能应该清除从$_POST获得的任何值。

不幸的是,没有简单的方法可以做到这一点,这也是PHP和web开发人员多年来一直诟病的问题,因为重新填充表单字段从来都不是一件容易和干净的事情。

您未提交的表单中的值不会被发送(通过GET或POST(,因此您需要编写一个自定义的解决方法。

虽然这有点问答;D、 我建议在表单提交时发送一个Ajax调用,将第二个表单的值存储在$_SESSION变量中。

我很抱歉地说,没有简单的替代方案——由于HTTP请求的无状态性质,这是每个程序员都必须努力解决的问题。

为了将问题分解为更简单的形式,我们假设我们没有使用下拉列表的麻烦。你面临的真正问题是从表格1中获取一个值,即使在表格2提交后也要让它发挥作用。

如果您在表单2上使用与表单1同名的隐藏字段,并根据表单1和表单2的POST数据填充它,它将被"记住">

<? // mostly html with a bit of php. ?>
<form id="f1" method="POST">
    <input type ="text" name="f1val" value="<?= htmlspecialchars( array_key_exists( 'f1val', $_POST )?$_POST['f1val']:'' ); ?>">
    <input type="submit">
</form>

<form id="f2" method="POST">
    <input type="hidden" name="f1val" value="<?= htmlspecialchars( array_key_exists( 'f1val', $_POST )?$_POST['f1val']:'' ); ?>">
    <input type ="text" name="f2val" value="<?= htmlspecialchars( array_key_exists( 'f2val', $_POST )?$_POST['f2val']:'' ); ?>">
    <input type="submit">
</form>
<script type="text/javascript" src="js/jquery1.6.1.js"></script>
<script type="text/javascript">
   $(document).ready(function () {
       $("#forma").submit(function(event) {
    var 1stformfield = $form.find( 'input[name="misc"]' ).val();
    /* stop form from submitting normally */
    //event.preventDefault(); 
    $.post("1stformsubmit.php", $("#forma").serialize());
    //after it posts you can have it do whatever
    //just post code here
    $('#iframe1').attr('src', 'iframepage.php?client=' + 1stformfield);
    window.frames["iframe1"].location.reload();
    return false;
     });
   });
    </script>
    <form name="1stform" method="post" action="/">
        <input type="text" name="misc" id="misc" />
        <input type="submit" name="submit" id="submit" value="submit 1st form"/>
    </form>
    <iframe id="iframe1" src="" scrolling="no" ></iframe>

iframe页面

     <form name="forma" method="post" onmouseover="kaina();" action="/">
       <table width="540" border="1" align="center">
         <tr>
              <td>Client:</td>
               <td>MB:</td>
      <td>Price:</td>
  </tr>
  <tr>
     <td>
   <?php
    $selected = $_GET['Client'];
    $query="SELECT name,surname,pers_code FROM Clients";
    mysql_query("SET NAMES 'UTF8'");
    $result = mysql_query ($query);
    echo "<select name=Clients id='clients'>";
    echo "<OPTION value=''>- Choose -</OPTION>'n";
    while($nt=mysql_fetch_array($result)){
        echo "<option value=$nt[pers_code]>$nt[name] $nt[surname]</option>";
       }
    echo "</select>"; ?></td>
  </tr>
</form>

这将把表单中的所有输入发布到您指定的文件中,然后您可以让它做任何您喜欢的事情,例如显示感谢信息。。希望能有所帮助。