Страницы

Поиск по вопросам

Показаны сообщения с ярлыком forms. Показать все сообщения
Показаны сообщения с ярлыком forms. Показать все сообщения

четверг, 19 марта 2020 г.

Сохранение данных формы при уходе с сайта

#jquery #forms #ajax


Итак имеется форма заказа на сайте с большим количеством полей (уже оптимизированных
и все равно количество достаточно большое).
Задача: Когда пользователю наскучило заполнять данные, он нажимает на вкладке крестик
или закрывает браузер - сохранить все его введенные данные формы куда либо (в сессию
по средствам PHP, и похоже что это единственный доступный вариант).
Цель: После прошествия некоторого времени пользователь возвращается на сайт, открывает
форму, а у него уже форма почти заполнена теми данными которые он в прошлый раз не
дозаполнил, тем самым ускоряя весь процесс заказа продукции.
Особенности: Форма работает по средствам JQuery и отправляется на сервер AJAX запросом,
ну и соответственно заказ тем самым совершается. Браузер не кэширует такие формы, и
после перезагрузки страницы снова приходится заполнять.    


Ответы

Ответ 1



Не все браузеры поддерживают, или корректно работают с событием закрытия страницы. Но даже если вам пойдет реализовать данную "фичу" для некоторых браузеров, то на мой взгляд сделать это можно так: - сериализация формы в строку - записать массив в cookie на большой срок Тем самым когда пользователь вернутся на страницу можно восстановить данные из cookie. При использовании jquery используйте serialize(); Реализация представленная пользователем @knes, поможет обойтись Вам без события закрытия страницы.

Ответ 2



Используйте COOKIES с "бесконечным" временем хранения. Других надежных способов ДО авторизации сохранять форму нет. Сохранение при потере фокуса с любого поля. $("input").blur(function(){/*Saving to cookies*/});

суббота, 1 февраля 2020 г.

Автоматическое заполнение формы в Django Template

#python #forms #шаблоны #django


Добрый день.
Есть форма пользовательского профиля.
При выводе на экран ее надо заполнить данными текущего пользователя.
Как это можно сделать?
class Profile(models.Model):
    user = models.OneToOneField(User)
    img = models.ImageField(upload_to='user_pic/', blank=True, verbose_name='аватар')
    phone = models.IntegerField(max_length=10, verbose_name=u'контактный телефон')

class ProfileForm(forms.Form):
    first_name = forms.CharField(label=u'Имя', max_length=30, required=True)
    last_name = forms.CharField(label=u'Фамилия', max_length=30, required=True)
    password = forms.CharField(label=u'Пароль', widget=forms.PasswordInput, min_length=4,
required=True)
    email = forms.EmailField(label=u'E-mail', required=True)
    phone = forms.CharField(label=u'Контактный телефон', max_length=10, required=True)
    img = forms.ImageField(label=u'Ваш автар или логотип', required=False)

@render_to('profile.html')
def edit_profile(request):
    form = LoginForm()

 {{ form_profile.as_p }}

Хочется заполнять форму автоматически (руками в шаблоне чтобы особо ничего не расписывать). 
Спасибо!    


Ответы

Ответ 1



На сколько я понял, Вам необходмо воспользоваться наследованием форм от моделей документация. Используя правильное наследование формы от модели, вы сможете автоматически заполнять форму данными из уже существуещего обьекта: form = ProfileForm(instance=user)

Ответ 2



Например можно передать в форму словарь data = {'first_name': 'Ivan', 'last_name': 'Ivanov', 'email': 'a@b.ru'} form = ProfileForm(data) Попробуйте еще user = Profile.objects.get(user=self) form = ProfileForm(user) могу сильно ошибаться, т.к. не помню уже как можно узнать свой профайл

среда, 22 января 2020 г.

Как очистить $_POST, $_GET? Реализация функции отсечения случайной множественной отправки формы.

#forms #post #php #get



В заголовке, просьба, ключевики не править: именно по ним ищут эту функцию 99% людей.
Часто отвечал, что для контроля отправки надо прописывать айдишник сабмита. И вот
что я имел ввиду(решение готовое. Можно брать и юзать):

Проверка:
function accidently_submit_check(){
    if(!isset($_POST['submit_id'])){
        //unknown submission attempt or no post data
        return false;
    }
    if(!isset($_SESSION['submit_id'][$_POST['submit_id']])){
        //unknown submission attempt
        return false;
    }
    if($_SESSION['submit_id'][$_POST['submit_id']]){
        //form was already submitted
        return false;
    }
    return true;
}

В функции обработки формы, если все нормально:
$_SESSION['submit_id'][$_POST['submit_id']] = true;

В функции генерации формы:
$form['SUBMIT_ID']['value'] = md5(microtime(true).$_SESSION['user']['id']);
$_SESSION['submit_id'][$form['SUBMIT_ID']['value']] = false;

printf('',$form['SUBMIT_ID']['value']);

Внимание, вопрос: что я упустил?
Все работает, но мало ли.    


Ответы

Ответ 1



Ну, содержание первой части заголовка вопроса не совсем соответствует самому вопросу. Очистка $_GET, $_POST производится через header('Location: {referer}'); А то что у вас - немного другое. Вот ещё вариант:


пятница, 10 января 2020 г.

Как отключить в chrome автоподстановку в input с типов password

#html #вёрстка #frontend #forms


Есть HTML форма на бутстрапе. В ней есть 2 тега input, у первого type="email"   у
второго type="password". Если  инпуту с типом password задать еще не пустой атрибут
name, то в гугл хром после загрузки страницы у обоих инпутов становиться фон желтым
и инпуту с типом email присваивается значение "admin", а в инпут с типом password заполняется
какой то пароль. 
Как от этого избавиться ?  autocomplate = "off" не помагает. 
    


Ответы

Ответ 1



У меня работают следующие способы вместе: autocomplete="false" у формы value='****' у инпутов, а в onload стирать (у какого-то браузера была логика не переписывать заполненные поля). setTimeout со стиранием значений через доли секунды после загрузки.

Ответ 2



В общем помогло следующее: ставим в input с типом password атрибут readonly и прописываем в него onfocus="this.removeAttribute('readonly'); Правда после этого он принимает цвет неактивного элемента, поэтому ему нужно задать стили которые сделают ему нормальный фон, например: #auth_form input { background-color: #FFFFFF !important; } Правда такой подход не гарантирует, что с выходом новой версии какого либо браузера в нем это не перестанет работать (ровно как и все остальные).

Ответ 3



Мне помогло это:
autocomplete="off" не помог, обертка с "display: none;" тоже не помогла.

пятница, 7 июня 2019 г.

Сохранение данных формы при уходе с сайта

Итак имеется форма заказа на сайте с большим количеством полей (уже оптимизированных и все равно количество достаточно большое). Задача: Когда пользователю наскучило заполнять данные, он нажимает на вкладке крестик или закрывает браузер - сохранить все его введенные данные формы куда либо (в сессию по средствам PHP, и похоже что это единственный доступный вариант). Цель: После прошествия некоторого времени пользователь возвращается на сайт, открывает форму, а у него уже форма почти заполнена теми данными которые он в прошлый раз не дозаполнил, тем самым ускоряя весь процесс заказа продукции. Особенности: Форма работает по средствам JQuery и отправляется на сервер AJAX запросом, ну и соответственно заказ тем самым совершается. Браузер не кэширует такие формы, и после перезагрузки страницы снова приходится заполнять.


Ответ

Не все браузеры поддерживают, или корректно работают с событием закрытия страницы. Но даже если вам пойдет реализовать данную "фичу" для некоторых браузеров, то на мой взгляд сделать это можно так: - сериализация формы в строку - записать массив в cookie на большой срок Тем самым когда пользователь вернутся на страницу можно восстановить данные из cookie. При использовании jquery используйте serialize(); Реализация представленная пользователем @knes, поможет обойтись Вам без события закрытия страницы.