# данные формы сканирования для этого переданного значения режима 1
42
НАСТРОЙКА ВАШЕЙ ВИКИ
мой% пар; # -v- изменить заголовок и содержимое формы
если ( $ режим ) {
$par{title} = "Добавить комментарий на $page";
$текст = ""; $режим = "добавить";
} еще {
$par{title} = "Редактировать $страницу";
$режим = "редактировать"
}
Нам также необходимо передать информацию о режиме в модуль сохранения. Это вопрос
вставка дополнительного скрытого типа ввода в определение формы:
<input type="hidden" name="mode" value="$mode">
Информация о режиме здесь передается как ключ «режим» с двумя возможными значениями.
«редактировать» или «добавлять», в отличие от флажка, который возвращал значение, только если он был установлен.
Совет 6, 24: Остерегайтесь «пустых» полей формы
При передаче данных формы убедитесь, что заданы (непустые и легко отлаживаемые) значения
для всех вариантов, или будьте готовы тщательно кодировать отказоустойчивые тесты данных. Интернет
браузеры имеют проверенную неприятную привычку использовать кешированные значения формы, когда
будет отправлена пустая строка, если вы редактируете/добавляете одну и ту же страницу более одного раза.
Модуль сохранения нуждается в следующей модификации раздела, который записывает файл:
мой $mode = ">страниц/$page";
если ($ body {режим} = ~ / добавить /) {
$режим = ">" . $режим; # вместо этого добавить в файл
$_ = "\п
\n\n$_";
# но сначала есть правило
}
open(F, $mode) или die "$page: $!";
напечатать F;
закрыть (Ф);
Это изменяет обычное сохранение на команду добавления к странице. Работает как шарм.
ВЗЛОМ ВАШЕГО ИСТОЧНИКА WIKI
185
Совет 6.25: Разрешения на редактирование или добавление
Реализовав функцию добавления, администратор может легко
примените разрешения только на добавление и полное редактирование, как обсуждалось в главе 9.
Запоминание состояния флажка
Незначительная проблема с предыдущим решением заключается в том, что состояние флажка по умолчанию
всегда одно и то же. Многие пользователи предпочли бы «липкое» состояние, но проблема в том, что
обычная модель веб-доступа асинхронна и не имеет состояния. Следовательно, это не
очевидно, как «запоминать» настройки из одного запроса страницы в другой из
тот же пользователь.