簡體   English   中英

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

不幸的是,沒有簡單的方法可以做到這一點,並且PHP和Web開發人員通常已經為此困擾了多年,因為重新填充表單域從來都不是容易且干凈的。

您未提交的表單中的值將不會發送(通過GET或POST),因此您只需編寫自定義解決方法。

雖然有點麻煩,但是我建議在表單提交上發送Ajax調用,以將第二個表單的值存儲在$ _SESSION變量中。

我很遺憾地說,沒有簡單的選擇-由於HTTP請求的無狀態性質,這是每個程序員都必須努力的事情。

您需要根據$_POST內容設置select元素的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獲得的所有值。

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

這會將表單內的所有輸入內容發布到您指定的文件中,然后您可以根據自己的喜好執行它,例如顯示一條感謝消息。希望它會有所幫助。

只是為了將問題分解為更簡化的形式,讓我們假設我們沒有使用下拉菜單的麻煩。 您真正遇到的問題是從表單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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM