保存PHP表单数据而不提交页面刷新

时间:2011-12-06 20:45:01

标签: php 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>

4 个答案:

答案 0 :(得分:1)

不幸的是,没有简单的方法可以做到这一点,并且PHP和Web开发人员通常会多年来一直受到诽谤,因为重新填充表单字段绝不容易和干净。

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

虽然它有点Q&amp; D,但我建议在表单提交上发送一个Ajax调用,以便将第二个表单的值存储在$ _SESSION变量中。

我很遗憾地说没有简单的替代方案 - 由于HTTP请求的无状态特性,这是每个程序员都必须努力的事情。

答案 1 :(得分:1)

您需要根据selected中的内容设置select元素的$_POST属性。类似的东西:

$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获得的任何值。

答案 2 :(得分:1)

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

这会将表单中的所有输入发布到您指定的文件,然后您可以随意执行任何操作,例如显示感谢信息。希望它有所帮助。

答案 3 :(得分:1)

只是为了将问题分解为更简化的形式,让我们假设我们没有处理下拉菜单的麻烦。您遇到的真正问题是从表单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>