bewaar PHP-formuliergegevens zonder op pagina-vernieuwing in te dienen

Ik heb twee formulieren op de pagina waarvan één filter is, ten tweede is de lijst met items, wanneer ik het filter op de lijst met artikellijsten toepast, worden de geselecteerde waarden teruggezet naar de standaardwaarde. Voor filter kan ik geselecteerde waarden opslaan, omdat ik dit formulier verzend via de POST-methode, maar andere niet-ingediende is mogelijk om geselecteerde formulierwaarden na het vernieuwen van de pagina op te slaan? Hier is een code van de tweede vorm:

<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 ""; 
    ?></td>
  </tr>
</form>
0
toegevoegd de auteur Jakub, de bron

4 antwoord

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

     <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 ""; ?></td>
  </tr>
</form>

This will post all inputs inside your form to the file you specify then you can have it do whatever you like, for example show a thank you message..Hope it helps.

1
toegevoegd
Ik denk dat ik de vraag verkeerd heb begrepen, maar ik zal dit laten voor het geval iemand het in de toekomst nodig heeft.
toegevoegd de auteur Andres, de bron
Met deze code verdwijnen de waarden niet, dan zou je de tweede vorm in een iframe kunnen hebben? U kunt vervolgens de bron van het iframe instellen met een querystring van de waarde voor die selectie, dus wanneer deze laadt, heeft deze de waarde en hebt u geen waarden verloren van 1e formulier.
toegevoegd de auteur Andres, de bron
Ja, ik moet geselecteerde formulierwaarden behouden nadat ik het gegevensfilter en de paginavernieuwing heb toegepast, omdat na het vernieuwen van de waarden die zijn ingesteld om de waarde "Kies" te defauten :)
toegevoegd de auteur darius, de bron

U moet het kenmerk geselecteerd van uw geselecteerde element instellen op basis van wat zich in $ _ POST bevindt. Zoiets als:

$selected = $_POST['Client'];
while($nt=mysql_fetch_array($result)){
  if ($selected == $nt[pers_code]) {
    echo "";
  }
  else {
    echo "";
  }
}

Merk ook op dat u waarschijnlijk alle waarden die u krijgt van $ _ POST moet opschonen.

1
toegevoegd

Helaas is er geen gemakkelijke manier om dit te doen, en het is iets dat PHP en webontwikkelaars in het algemeen al jarenlang hebben belasterd, omdat het herbevolken van formuliervelden nooit gemakkelijk EN schoon is.

Waarden in het formulier dat u niet indient, worden niet verzonden (via GET of POST), dus u blijft achter met het schrijven van een aangepaste oplossing.

While it's a bit Q&D, I would recommend sending an Ajax call on form submit to store the values for your second form in the $_SESSION variable.

Helaas is er geen gemakkelijk alternatief - vanwege de staatloze aard van HTTP-verzoeken is dit iets waar elke programmeur mee worstelt.

1
toegevoegd

gewoon om de vraag tot een meer vereenvoudigde vorm te verbreken, laten we aannemen dat we niet het gedoe hebben om met dropdowns te werken. Het echte probleem dat u ondervindt, is waarde van formulier 1 te nemen en te laten werken, zelfs nadat formulier 2 is ingediend.

Als u een verborgen veld gebruikt op formulier 2, met dezelfde naam als formulier 1, en het vult op basis van zowel formulier 1 als de POST-gegevens van formulier 2, wordt het "onthouden"

<?//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
toegevoegd