сохранить данные формы PHP без отправки при обновлении страницы - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть две формы на странице: одна - фильтр, вторая - список элементов, когда я применяю фильтр к форме списка элементов, выбранные значения сбрасываются к значениям по умолчанию. Для фильтра я могу сохранить выбранные значения, потому что я отправляю эту форму с помощью метода 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 ]

1 голос
/ 07 декабря 2011

просто чтобы разбить вопрос на более упрощенную форму, давайте предположим, что у нас нет проблем с выпадающими списками. Реальная проблема в том, что вы берете значение из формы 1 и работаете даже после отправки формы 2.

Если вы используете скрытое поле в форме 2 с тем же именем, что и форма 1, и заполняете его на основе данных POST формы 1 и формы 2, оно будет «запомнено»

<? // 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>
1 голос
/ 07 декабря 2011

Вам необходимо установить атрибут 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.

1 голос
/ 07 декабря 2011
<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 голос
/ 07 декабря 2011

К сожалению, не существует простого способа сделать это, и это то, что PHP и веб-разработчики в целом порочили годами, потому что заполнение полей формы никогда не бывает легким И чистым.

Значения в форме, которую вы не отправляете, не будут отправлены (через GET или POST), поэтому вам остается написать собственный обходной путь.

Хотя это и немного вопросов и ответов, я бы порекомендовал отправить вызов Ajax в форму отправки, чтобы сохранить значения для второй формы в переменной $ _SESSION.

Извините, что нет легкой альтернативы - из-за природы HTTP-запросов без сохранения состояния каждый программист должен бороться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...