2011-12-06 476 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>