2011-12-06 274 views
0

我在页面中有两种形式,一种是过滤器,二是项目列表,当我将过滤器应用到项目列表表单时,所选值重置为默认值。对于筛选器,我可以保存选定的值,因为我通过POST方法提交此表单,但其他保持不排除可以在页面刷新后保存选定的表单值?下面是第二种形式的一些代码:保存PHP表单数据而不提交页面刷新

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

可能重复[提交时没有页面刷新](http://stackoverflow.com/questions/3776900/form-submit-without-page-refresh) – Jakub

回答

1

您需要根据$_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获得的任何值。

1

不幸的是没有简单的方法来做到这一点,它的东西,PHP和一般的WEB开发者诟病多年,因为重新填充表单字段是不容易的,干净。

您没有提交的表单中的值不会被发送(通过GET或POST),所以您只需编写自定义解决方法即可。 D,我建议在表单提交时发送一个Ajax调用,以将第二个表单的值存储在$ _SESSION变量中。

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

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> 

这将发布所有输入您的表格,那么您指定的文件中,你可以把它做任何你喜欢的,比如告诉你message..Hope它感谢帮助。

+0

我想我误解了这个问题,但我会离开这个以防万一任何人需要它未来.. – Andres

+0

是的,我需要保留选定的表格值后,我应用数据过滤器和页面刷新,因为刷新后设置为默认值“选择”值:) – darius

+0

这个代码的价值观不会消失,那么你可能有t他在iframe中的第二种形式?然后,您可以使用该select的值的查询字符串来设置iframe的来源,以便在加载时具有该值,并且您没有从第一个表单中丢失值。 – Andres

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>