提交后记住输入值 - 最佳方式?

时间:2014-03-07 09:08:29

标签: php jquery

在我提交了多个表单后,我想在提交完成后记住表单中的值。

我能想到的最自发的方式是:

<div class="top_child">
    <h3>Faktureringsuppgifter:</h3>
    <label name="firstname">Förnamn:</label>
    <input type="text" name="firstname" value="<?php if(isset($_POST['firstname'])) { echo $_POST['firstname']; } ?>">
    <label name="lastname">Efternamn:</label>
    <input type="text" name="lastname" value="<?php if(isset($_POST['lastname'])) { echo $_POST['lastname']; } ?>">
    <label name="personnmbr">Personnummer:</label>
    <input type="text" name="personnmbr">
    <label name="address">Gatuadress:</label>
    <input type="text" name="address">
    <label name="zip">Postnummer:</label>
    <input type="text" name="zip">
    <label name="city">Postort:</label>
    <input type="text" name="city">
    <label name="phone">Telefonnummer:</label>
    <input type="text" name="phone">
    <label name="customernmbr">Kundnummer</label>
    <input type="text" name="customernmbr">
</div>

我用PHP检查每个字段?这是一个很好的方法吗?

&GT;

8 个答案:

答案 0 :(得分:0)

你可以使用jQuery ajax方法 - &gt;发布,当你获得成功时,没有任何反应,因此表格字段将不受影响。

e.g。

    <script>
    $(document).ready(function() {
      $('#button').click(function() {
         $.ajax({
        type: "POST",
        url: "example.php",
        data: "data="data,
        success: function(html){
            if(html=='true') {
                /* nothing */
            }
            else {
                                  /* nothing */
            }
        }
    });
      });
    });
    </script>

答案 1 :(得分:0)

使用Sessions

session_start()
$_SESSION['YOUR_KEY'] = 'YOUR_VALUE' // Probably $_POST['some_field_name'];

然后像这样访问这些值:

echo $_SESSION['YOUR_KEY'];

答案 2 :(得分:0)

如果您可以使用JS执行此操作,则可以执行以下操作;

var previousData = <?php echo json_encode($_POST); ?>;
for (item in previousData) {
  // Check if item is set by you and not is a js property
  if (previousData.hasOwnProperty(item)) {
    // Set the value to the input with same name
    $('input[name='+item+']').val(previousData[item]);
  }
}

请注意我在这个例子中使用jQuery。

http://jsbin.com/nadeb/7/edit?html,console,output

有了这个,你不需要在每个输入中添加代码,也不需要修改$ _POST或创建会话等等。所以你需要做更少的更改并且一直工作。如果输入的名称如此[是] [an] [field],则只会出现问题。在这种情况下,你可能需要做更详细的javascript,因为$ _POST将字段存储在一个数组中这个=&gt;是=&gt; an =&gt;字段。

我不确定这是不是最好的做法,但很容易做到并且很有效。

答案 3 :(得分:0)

您可以使用隐藏的输入字段并沿表单传递表单数据:

<?

    foreach($_POST as $name=>$value){

    ?><input type="hidden" name="<?=$name?>" value="<?=$value?>"><?

    }

?>

答案 4 :(得分:0)

将$ _POST字段插入HTML是不好的解决方案。

首先,您需要验证并过滤$ _POST值:preg_match,htmlspecialchars等。然后将清除的值复制到其他数组中(例如$ input_data)。

在HTML中,您可以使用:

<input name="lastname" value="<?=$input_data['lastname']?>" />

<input name="lastname" value="<?php echo $input_data['lastname']; ?>" />

答案 5 :(得分:0)

对于像这样的持久性数据,最好使用$_SESSION。提交表单时,请将$_POST值分配给$_SESSION变量。

$_SESSION['firstname'] = $_POST['firstname'];
$_SESSION['lastname'] = $_POST['lastname'];

然后在你的HTML中

<input type="text" name="lastname" value="<?php if(isset($_SESSION['lastname'])) { echo $_SESSION['lastname']; } ?>">

然后在提交表单并成功通过验证后,您可以取消设置$_SESSION变量

unset($_SESSION['firstname']);
unset($_SESSION['lastname']);

答案 6 :(得分:0)

如果将jsp与servlet一起用于请求和响应,则可以在html标记中执行类似的操作。

<div class="top_child">
    <h3>Faktureringsuppgifter:</h3>
  <form>
    <label name="firstname">Förnamn:</label>
    <input type="text" name="firstname" value=${firstname}>
    <label name="lastname">Efternamn:</label>
    <input type="text" name="lastname" value=${lastname}>
    <label name="personnmbr">Personnummer:</label>
    <input type="text" name="personnmbr" value=${personnmbr}>
    <label name="address">Gatuadress:</label>
    <input type="text" name="address" value=${address}>
    <label name="zip">Postnummer:</label>
    <input type="text" name="zip" value=${zip}>
    <label name="city">Postort:</label>
    <input type="text" name="city" value=${city}>
    <label name="phone">Telefonnummer:</label>
    <input type="text" name="phone" value=${phone}>
    <label name="customernmbr">Kundnummer</label>
    <input type="text" name="customernmbr" value=${customernmbr}>
    <input type="submit" value="submit>
  </form>
</div>

答案 7 :(得分:0)

如果未将py.test设置为打印通知,则error_reporting将为空,因此:

$_POST['some_data']

会做,否则您的解决方案会很好。