Подтвердить что ты не робот

Как запомнить входные данные в формах даже после обновления страницы?

что делать, чтобы форма запомнила предыдущий ввод или текущий ввод пользователя даже после того, как он обновил страницу?

должен ли я делать,

            <div class="row">
             <label>Contact Messenger </label>
             <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_SESSION['messenger']; ?>"/>
            </div>

или

            <div class="row">
             <label>Contact Messenger </label>
             <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_POST['messenger']; ?>"/>
            </div>

или

Есть трюк, чтобы сделать это?.. как?

4b9b3361

Ответ 1

на странице, где отправляется ваша форма, сделать что-то вроде этого

    session_start();
    $_SESSION['data'] = $_POST['data'];
    $_SESSION['data_another'] = $_POST['data_another'];

и вы можете получить доступ к этим переменным сеанса, где бы они ни находились.

    session_start(); // this should be at the top of the page before any html load
    <input type="text" name="name" value="<?php echo $_SESSION['data'];?>"/>

обновите свою страницу при успешном вызове, например

     $.ajax({
           type: "POST",
           url: "yourfile.php",
           data: 'data='+ data,
           success: function(){
               location.reload();
           }
       });

Ответ 2

У меня была аналогичная проблема в одном из моих проектов, поэтому я написал несколько js, чтобы обработать это с помощью файлов cookie. Сначала я нашел две простые функции для установки и получения значений cookie:

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name) {
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1) {
        c_start = c_value.indexOf(c_name + "=");
    }
    if (c_start == -1) {
        c_value = null;
    } else {
        c_start = c_value.indexOf("=", c_start) + 1;
        var c_end = c_value.indexOf(";", c_start);
        if (c_end == -1) {
            c_end = c_value.length;
        }
        c_value = unescape(c_value.substring(c_start, c_end));
    }
    return c_value;
}

Чем я написал две другие функции для установки и получения входных значений:

function saveValue(input) {
    var name = input.attr('name');
    var value = input.val();
    setCookie(name,value);
}

function getValue(input) {
    var name = input.attr('name');
    var value = getCookie(name);
    if(value != null && value != "" ) {
        return value;
    }
}

И используя jQuery, я сохраняю введенное пользователем значение в cookie сеанса

$('input[type=text]').each(function(){
    var value = getValue($(this));
    $(this).val(value);
}).on('blur', function(){
    if($(this).val() != '' ) {
        saveValue($(this));
    }
});

Я надеюсь, что это поможет;)

Ответ 3

Это зависит от того, откуда берутся данные в полях. Если ваш сценарий состоит в том, что вы представляете пустую форму, пользователь вводит некоторые данные, а затем не отправляет их, обновляет страницу, вы ничего не можете сделать. Это для браузера.

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

С другой стороны, если ваши данные поступают с предыдущей страницы или что-то в этом роде, это другая история. Но тогда вам нужно сообщить нам, откуда поступают данные, поэтому я могу дать вам разумный ответ.

Ответ 4

Если вы имеете в виду, заполнив поля формы и щелкнув обновление, тогда нет прямого способа, так как данные не отправляются. Такое поведение зависит от браузера.

Единственное, что вы можете сделать, это отправить данные через AJAX обратно на ваш сервер при изменении полей. Ваш PHP script, получающий данные, установит некоторые переменные сеанса. Когда форма загружается, вы должны установить свои значения по умолчанию для соответствующих значений сеанса.

Редко, хотя есть необходимость в таком поведении. На ваш сервер будет отправлено множество запросов.

Ответ 5

Ни одно из ваших предложений не поможет вам "запомнить" данные после обновления (действие, которое не отправляет данные на сервер). Вам нужно захватить данные через javascript (возможно, с типом событий onkeyup) и захватить его с помощью файлов cookie. С jquery очень легко.

Ответ 6

Сессия - хороший способ хранить и запоминать данные, но зачем усложнять вещи? Если у формы много полей, разработчик должен хранить множество значений в сеансе. Почему бы просто не печатать и не эхо.

Пример:

Форма отправляется с вводом ssName и скрытым полем ssAct со значением отправки

Получить ssName и ssAct в форме submit

$ssAct=$_REQUEST["ssAct"];
$ssName=$_REQUEST["ssName"];

и форма

<input type="text" name="ssName" value="<?php if($ssAct=='send' && $ssName!='') { echo "$ssName"; } ?>">
<input type="hidden" name="ssAct" value="send">

В поле "Представление" будет отображаться эхо, если оно было отправлено и не было пустым.

Ответ 7

попробуйте атрибут autocomplete, возможно, он будет работать на некоторых браузерах...

<input type="text" autocomplete="on" />

Вы также можете использовать автозаполнение для form.

Ответ 8

Есть некоторые основные проблемы, которые необходимо проверить, чтобы получить данные после обновления или любого обработчика событий:

1) Имейте в виду подпись. он должен содержать атрибут method = "post" следующим образом:

    <form method="post"/>

иначе использование $_POST ['messenger'] не будет работать.

Значение по умолчанию атрибута метода в форме - get.

    <form>  equals to  <form method="get">

2) Многие программисты смешивают между атрибутами id и имя. Имейте в виду использование правильного атрибута. Ассоциативный массив $_POST использует имя для получения данных из него. Вот почему следующий пример не будет корректно работать:

    <input type="text" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "" )?/>"

Чтобы он работал правильно, вы должны добавить атрибут name= "data" следующим образом:

    <input type="text" name="data" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "" )?/>"

Удачи.

Ответ 9

Вы также можете обойтись без сеанса, как показано ниже:

<input type="text" name="Fname" value="<?php if(isset($_POST['Fname'])){ echo $_POST['Fname']; } ?>" /><br/>

Это сохранит введенные данные внутри поля ввода!