Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

43_HTML_FormPersister: новый взгляд на построение форм (Дмитрий Котеров, оценка: 3)
Goto page Previous  1, 2, 3, 4, 5
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sun Nov 26, 2006 10:58 pm ()
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Хранение конфигурации сайта (конфиг-файлов).»,
расположенную в форуме Разное :: PHP (26 Ноября 2006, 22:58).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sat Dec 16, 2006 3:21 pm (спустя 19 дней 16 часов 23 минуты)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Идея: низкоуровневый framework на основе Конструктора»,
расположенную в форуме Конструктор (16 Декабря 2006, 15:21).
Back to top
View user's profile Send private message Send e-mail
Гость
Guest





Карма: 387
   поощрить/наказать


PostPosted: Fri Jan 12, 2007 12:59 am (спустя 26 дней 9 часов 37 минут; написано за 13 секунд)
   Post subject: Дает ли библиотека возможность отметить какие поля формы были заполненны с обшикой ?
Reply with quote

Дает ли библиотека возможность отметить какие поля формы были заполнены с обшикай?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Fri Jan 12, 2007 9:41 am (спустя 8 часов 42 минуты; написано за 42 секунды)
   Post subject:
Reply with quote

Нет, это не ее задача.
Но то, что Вы хотите, умеет dklab.ru/lib/HTML_MetaForm/ (и он может работать в паре с FormPersister-ом).
Back to top
View user's profile Send private message Send e-mail
Роман К. Беликин
Guest





Карма: 387
   поощрить/наказать


PostPosted: Thu Jan 25, 2007 10:13 am (спустя 13 дней 31 минуту; написано за 6 минут 52 секунды)
   Post subject:
Reply with quote

Вот такой код:
Code (php): скопировать код в буфер обмена
$_GET['vtt']='off'; //на самом деле тут выбирается значение из базы (1/0) и преобразуется в "on"/"off"
?><input type="checkbox" name="vtt"><?
корректно отрабатывал в версии HTMLPersister-а 1.99, флаг был не отмечен
В версии 1.108 (последняя?) флаг всегда включен в не зависимости от содержимого $_GET.
Методом научного тыка решил пока-что проблему так:
    в файле FormPersister.php заменил строчку 361: return (bool)@strval($value) === (bool)$attrValue;
    на ее старое значение 328: return @strval($value) === $attrValue; (из версии 1.99)

Мне такое решение совсем не нравиться, тем более, что я сам не знаю, что делаю :(
Это баг, или я неправильно использую библиотеку?
Зарание спасибо!
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Thu Jan 25, 2007 11:13 pm (спустя 13 часов 24 секунды; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

Роман К. Беликин wrote:
В версии 1.108 (последняя?) флаг всегда включен в не зависимости от содержимого $_GET.
Не может такого быть.

Просто $_GET['vtt']='off' - это неправильно. В элементе checkbox может либо прийти value, либо - ничего не прийти. Если атрибут value не задан, то считается, что он равен "on" (именно так работают все браузеры).

Используйте $_GET['vtt'] = true или false (0/1).
Back to top
View user's profile Send private message Send e-mail
Роман К. Беликин
Guest





Карма: 387
   поощрить/наказать


PostPosted: Fri Jan 26, 2007 2:03 am (спустя 2 часа 49 минут; написано за 20 секунд)
   Post subject:
Reply with quote

И действительно. Спасибо! :)
Back to top
Magz
Guest





Карма: 387
   поощрить/наказать


PostPosted: Mon May 28, 2007 12:15 pm (спустя 4 месяца 2 дня 10 часов 12 минут; написано за 2 минуты 48 секунд)
   Post subject: Заполнение по умолчанию или из POST
Reply with quote

Добрый день. Есть форма, которая ссылается сама на себя. После submit запускается свой обработчик ошибок. Если ошибки найдены, то они выводятся и поля у формы сохраняют свои значения. Это супер. А вот если ошибок не найдено, то и поля у формы должны принять значения по умолчанию.
Как пример - добавление объявлений на доску объявлений. Пока есть ошибки в форме добавления "тянем" введенные значения, когда ошибок нет - форма должна быть девственно чистой, ибо добавленно объявление видно на доске, а для ввода следующего нужна "чистая" форма.
Как решить эту проблему?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Mon May 28, 2007 12:23 pm (спустя 8 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Способ 1: $_POST = array();
Способ 2: делайте самопереадресацию после приема формы, заодно от повторного POST-а обезопаситесь: dklab.ru/chicken/nablas/17.html
Back to top
View user's profile Send private message Send e-mail
Magz
Guest





Карма: 387
   поощрить/наказать


PostPosted: Mon May 28, 2007 1:52 pm (спустя 1 час 28 минут; написано за 1 минуту 36 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Способ 1: $_POST = array();
Способ 2: делайте самопереадресацию после приема формы, заодно от повторного POST-а обезопаситесь: dklab.ru/chicken/nablas/17.html
Дмитрий, спасибо. Очень понравился второй способ, жаль не задумывался об этом раньше!
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Tue May 29, 2007 2:12 am (спустя 12 часов 20 минут; написано за 1 минуту 21 секунду)
   Post subject:
Reply with quote

К нему еще есть добавка: записывать в сессию сообщение об успехе (типа "Данные успешно сохранены!"), а после редиректа - доставать их из сессии, показывать на странице сверху, а затем - сессию очищать (естественно, очищать только то, что касается этих сообщений). Тогда вообще замечательно и логично получается.
Back to top
View user's profile Send private message Send e-mail
Дмитрий А.
Заглянувший



Joined: 23 Apr 2007
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Mon Jun 04, 2007 7:26 pm (спустя 6 дней 17 часов 14 минут; написано за 6 минут 11 секунд)
   Post subject: Проблема с большими формами
Reply with quote

Добрый день.
Помогите пожалуйста решить одну проблему с большими формами.
Есть форма, в которой 2000 полей <input type="text"> (таблица 25*80).
Когда генерируемая страница превышает ~250 кб вывод прекращается — скрипт выводит пустую страницу.
Никто не сталкивался с подобной проблемой?
Back to top
View user's profile Send private message
Дмитрий А.
Заглянувший



Joined: 23 Apr 2007
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Mon Jun 04, 2007 7:37 pm (спустя 11 минут; написано за 55 секунд)
   Post subject: Проблема с большими формами
Reply with quote

Виноват, проблема была в количестве памяти на процесс.
Увеличил до 16 мб — все стало нормально работать.
Вопрос закрыт.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Tue Jun 05, 2007 1:16 am (спустя 5 часов 38 минут; написано за 42 секунды)
   Post subject:
Reply with quote

Слушайте, ну не скармливайте же столь огромную форму FormPersister-у... Ее и не каждый человек проглотит, а тут - регулярные выражения.
Back to top
View user's profile Send private message Send e-mail
iRabbit
Заглянувший



Joined: 24 Jan 2008
Posts: 3
Карма: 0
   поощрить/наказать

Location: Новосибирск

PostPosted: Thu Jan 24, 2008 6:35 pm (спустя 7 месяцев 19 дней 17 часов 19 минут; написано за 11 минут 9 секунд)
   Post subject:
Reply with quote

Итак, столкнулся со следующей проблемой... Есть форма:
Code (html): скопировать код в буфер обмена
<form (december.com/html/4/element/form.html) action="путь" method="post"> (december.com/html/4/element/.html)
        <p> (december.com/html/4/element/p.html)
                <input (december.com/html/4/element/input.html) type="text" name="menus[name]" value="" /> (december.com/html/4/element/.html)
                <small> (december.com/html/4/element/small.html)Поле заполнено неверно.</small>               
        </p>
        <p> (december.com/html/4/element/p.html)
                <select (december.com/html/4/element/select.html) name="menus[items][]" multiple="multiple" size="3"> (december.com/html/4/element/.html)
                        <option (december.com/html/4/element/option.html) value="index"> (december.com/html/4/element/.html)index</option>
                        <option (december.com/html/4/element/option.html) value="news"> (december.com/html/4/element/.html)news</option>                       
                </select>

        </p>
        <p> (december.com/html/4/element/p.html)
                <input (december.com/html/4/element/input.html) type="submit" value="Отправить" /> (december.com/html/4/element/.html)
        </p>
</form>
Если в поле menus[name] ничего не введено, а в поле select не выбрано ни одного пункта, то я получаю следующий массив:

Array
(
    [menus] => Array
        (
            [name] =>
        )

)

Не знаю почему, но уже понял, что не в моём коде дело: при пустом select'е не хватает элемента в массиве menus:

[menus] => Array
        (
            [name] =>
            [items] =>
        )

Я делаю проверку форм с помощью своего валидатора, подстроенного под HTML_FormPersister. Но с полем select возникает проблема...

Дело в том, что если написать
Code (php): скопировать код в буфер обмена
if(!isset (www.php.net/isset)($_POST['menus']['items'])) {
        echo (www.php.net/echo) 'bad';
} else {
        echo (www.php.net/echo) 'good';
}
, то всё работает.

Но я использую для проверки свой класс... Выглядит он примерно так:
Code (php): скопировать код в буфер обмена
$validate->checkForm('menus[items]', array (www.php.net/array)('minCount:1', 'Сообщение об ошибке.'));
Класс разбивает параметр menus[items] на $_POST['menus']['items'], но если пункты не выбраны, то функция класса вообще игнорируется.

Например, для menus[name] запрос вида
Code (php): скопировать код в буфер обмена
$validate->checkForm('menus[name]', array (www.php.net/array)('minLength:3','maxLength:32'));
успешно обрабатывается, а по отношению к полю select, когда в нём ничего не выбрано - ничего не происходит.

Подскажите, пожалуйста, как решить проблемку.
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Thu Jan 22, 2009 8:10 pm (спустя 11 месяцев 29 дней 1 час 35 минут; написано за 52 секунды)
   Post subject:
Reply with quote

К сожалению, ее никак не решить: по стандарту HTML select-элемент с multiple-выбором, в котором не выбрано ни одного пункта, не посылает вообще никаких данных ни в GET-, ни в POST-запросах. Тут FormPersister ни при чем...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Mon Mar 02, 2009 11:54 am (спустя 1 месяц 10 дней 15 часов 43 минуты; написано за 3 минуты 57 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров, помогите разобраться фича это или баг?
Code (php): скопировать код в буфер обмена
<?
....
ob_start (www.php.net/ob_start)(array (www.php.net/array)('HTML_FormPersister', 'ob_formpersisterhandler'));

$_POST['_currencies'] = array (www.php.net/array)(0);
?>
<form method="post">
<input type="checkbox" name="_currencies[]" value="RUB" label="RUB" />
<input type="checkbox" name="_currencies[]" value="EUR" label="EUR" />
<input type="checkbox" name="_currencies[]" value="USD" label="USD" />
<input type="submit">
</form>
Отмечаются все чекбоксы _currencies, если элемент с номером 0 массива $_POST['_currencies'] установлен в нуль, вне зависимости от установок других элементов этого же массива.
Back to top
View user's profile Send private message
Дмитрий Герасимов
Заглянувший



Joined: 04 Oct 2008
Posts: 13
Карма: 6
   поощрить/наказать

Location: Санкт-Петербург

PostPosted: Mon Mar 02, 2009 12:55 pm (спустя 1 час 1 минуту; написано за 6 минут 12 секунд)
   Post subject:
Reply with quote

Да. Это баг, но баг PHP.
Ибо
Code (php): скопировать код в буфер обмена
var_dump (www.php.net/var_dump)(in_array (www.php.net/in_array)(0, array (www.php.net/array)('one', 'two')));
//
 
Это так с пхп версий 5.2.3 и 5.2.5 Другие версии не пробовал и не смотрел.
Навскидку, не разбираясь в коде, предлагаю поменять строку 355 в файле FormPersister.php
Code (php): скопировать код в буфер обмена
return in_array (www.php.net/in_array)($attrValue, $value);
на такую:
Code (php): скопировать код в буфер обмена
return in_array (www.php.net/in_array)($attrValue, $value, true);
Это единственное место в библиотеке (FormPersister.php + SemiParser.php), где используется эта функция (in_array).
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Mon Mar 02, 2009 1:22 pm (спустя 26 минут; написано за 52 секунды)
   Post subject:
Reply with quote

Дмитрий Герасимов
Хе-хе, нельзя так делать, отломается в куче других местах тогда, где в $_POST пишут integer-значения.
Сделал вот так:

            // Unfortunately we MUST use strict mode in in_array()
            // and cast array values to string before checking.
            // This is because in_array(0, array('one')) === true.
            return in_array(strval($attrValue), array_map('strval', $value), true);

version 1.111
Back to top
View user's profile Send private message Send e-mail
Mr.M.I.T.
Заглянувший



Joined: 11 Apr 2008
Posts: 19
Карма: -1
   поощрить/наказать


PostPosted: Sun Mar 29, 2009 3:44 pm (спустя 27 дней 2 часа 21 минуту; написано за 1 минуту 3 секунды)
   Post subject:
Reply with quote

Quote:
FormPersister проводит совершенно определенную политику: "не навреди"
Блин. А там нет никой переключалки по этому поводу? мне бы хотелось чтобы он в одном месте навредил немного полям с уже установленными значениями
Back to top
View user's profile Send private message
Guest






Карма: 387
   поощрить/наказать


PostPosted: Fri Oct 16, 2009 6:13 pm (спустя 6 месяцев 18 дней 2 часа 29 минут; написано за 4 минуты 57 секунд)
   Post subject:
Reply with quote

Здравствуйте.
Code (html): скопировать код в буфер обмена
<textarea (december.com/html/4/element/textarea.html) default="<?=$row?>"></textarea>
В $row произвольный html. FormPersister удаляет из этого произвольного html кавычки и то, что в этих кавычках находится. Например, атрибуты тегов, которые нельзя заменить на спецсимволы. Внимание вопрос: как выводить произвольный html через атрибут default в textarea?

Спасибо.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sat Oct 24, 2009 7:49 pm (спустя 8 дней 1 час 36 минут; написано за 52 секунды)
   Post subject:
Reply with quote

Не помогает ли вот такое?

<textarea default="<?=htmlspecialchars($row)?>"></textarea>

Если не помогает, приведите, пожалуйста, минимальный неработающий пример - т.е. точное содержимое $row, с которым оно не работает. Я попробую воспроизвести.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 387
   поощрить/наказать


PostPosted: Tue Oct 27, 2009 11:29 pm (спустя 3 дня 3 часа 40 минут; написано за 1 минуту 12 секунд)
   Post subject:
Reply with quote

Доброго времени
Использую библиотеку для автозаполнения формы.
Code (php): скопировать код в буфер обмена
ob_start (www.php.net/ob_start)(array (www.php.net/array)('HTML_FormPersister', 'ob_formPersisterHandler'));
$_POST = $data;
но если у меня $data уже прошли через htmlspecialchars ранее, можно ли как то отключить обработку в библиотеке.

Сейчас приходится делать
Code (php): скопировать код в буфер обмена
ob_start (www.php.net/ob_start)(array (www.php.net/array)('HTML_FormPersister', 'ob_formPersisterHandler'));
foreach ($data as $k => $v) {
    $_POST[$k] = html_entity_decode (www.php.net/html_entity_decode)($v, ENT_QUOTES);
}
Спасибо
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Wed Oct 28, 2009 3:22 pm (спустя 15 часов 52 минуты; написано за 11 секунд)
   Post subject:
Reply with quote

version 1.112:
- Bugfix: <input type="checkbox" name="a" value=""> was always checked even if !isset($_POST['a'])
Back to top
View user's profile Send private message Send e-mail
Alex.BiT
Guest





Карма: 387
   поощрить/наказать


PostPosted: Sat Dec 12, 2009 11:29 pm (спустя 1 месяц 15 дней 8 часов 6 минут; написано за 6 минут 40 секунд)
   Post subject:
Reply with quote

Здравствуйте! Сегодня вот заметил такую особенность: когда извлекаю из базы некоторые строки, и загоняю их в массив $_POST, чтобы они автоматом подставились в форму, библиотека убирает из них нужные слеши:

Строка из базы:
Code (any language): скопировать код в буфер обмена
в input подставится:
Code (any language): скопировать код в буфер обмена
Это баг или нормальное поведение?
Back to top
Guest






Карма: 387
   поощрить/наказать


PostPosted: Fri Dec 31, 2010 12:50 pm (спустя 1 год 18 дней 13 часов 21 минуту; написано за 7 минут 11 секунд)
   Post subject:
Reply with quote

Alex.BiT wrote:
Здравствуйте! Сегодня вот заметил такую особенность: когда извлекаю из базы некоторые строки, и загоняю их в массив $_POST, чтобы они автоматом подставились в форму, библиотека убирает из них нужные слеши:

Строка из базы:
Code (any language): скопировать код в буфер обмена
в input подставится:
Code (any language): скопировать код в буфер обмена
Это баг или нормальное поведение?
u menia takaja problema toze. kak ejo ispravit?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Thu Mar 08, 2012 12:50 am (спустя 1 год 2 месяца 7 дней 11 часов 59 минут; написано за 53 секунды)
   Post subject:
Reply with quote

А вы проверьте, включен ли у вас режим magic_quotes_gpc (должен быть выключен).
Проверьте также, действительно ли у вас после извлечения из базы в строках есть слэши (запишите их в файл и посмотрите, например). Мало ли что.
Back to top
View user's profile Send private message Send e-mail
den_rad
Guest





Карма: 387
   поощрить/наказать


PostPosted: Wed May 15, 2013 10:58 pm (спустя 1 год 2 месяца 7 дней 22 часа 8 минут; написано за 50 секунд)
   Post subject:
Reply with quote

Обновил PHP до 5.4.14 и у меня в FormPersister перестали обрабатываться поля textarea, кто-нибудь сталкивался с такой проблеммой?
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2, 3, 4, 5
Page 5 of 5    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

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

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML