Topic: Создаем форму с чекбоксом для расширения
Многие программисты, по крайней мере я уже раз 5 встречал эту ошибку в расширениях, при создании формы делают поверку отправленного запроса формы и соответственно проверку включенного чекбокса. Ну, давайте на примере рассмотрим, что ли?
Ну к примеру возьмем расширение Default Avatar. Вот сама форма с чекбоксом:
?>
<div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
<div class="sf-box checkbox">
<span class="fld-input"><input type="checkbox" id="fld<?php echo ++$forum_page['fld_count'] ?>" name="form[default_avatar]" value="1"<?php if ($forum_config['o_default_avatar'] == '1') echo ' checked="checked"' ?> /></span>
<label for="fld<?php echo $forum_page['fld_count'] ?>"><span><?php echo $lang_default_avatar['Default avatar'] ?></span></label>
</div>
</div>
После этого разработчик вешает проверку формы на хук $matches[2]
if (!isset($form['default_avatar']) || $form['default_avatar'] != '1')
$form['default_avatar'] = '0';
Это означает, что если форма не отправлена или же форма отправлена, но не равна 1, то установится 0. Получается, что если у нас в настройках установлен 1, а мы отключаем чекбокс (снимаем галочку) и сохраняем настройки то $form['default_avatar'] будет равен 0, так как не возвращает единицу.
Но сделаем обратное. В настройка установлен 0, то есть чекбокс снят, ставим, сохраняем. Что видим? Форма отправила еденицу, чтобы чекбокс сохранился отмеченным, но так как туда пришла единица, то условие не сработает и в настройках даже не поменяется значение.