@Xane

Как организовать HTML код формы (Form) с динамическим добавлением «параметров» с Chechbox для PHP?

Вариант 1 (тут всё просто, параметры идут как массив, но проблема с Chechbox если они не с галочкой)

<form method="POST">
    <!-- Данные записи -->
    <input type="hidden" name="id" value="{$id}">
    <input name="name">
    <input name="title">
    <textarea name="text"></textarea>
    <!-- Параметры записи (существующие) (цикл)  -->
    <input name="param_value_{$param_id}" value="{$value1}">
    <input name="param_show_{$param_id}" type="checkbox">
    <!-- Новые параметры -->
    <input name="new_param_value[]" value="">
    <input name="new_param_show[]" value="" type="checkbox">
    <button>Кнопка добавляющая ещё параметр (через JS)</button>
    </form>


Вариант 2 (Тут JS добавляет новый параметр с измененным именем )

<form method="POST">
     <!-- Данные записи -->
    <input type="hidden" name="id" value="{$id}">
    <input name="name">
    <input name="title">
    <textarea name="text"></textarea>
    <!-- Параметры записи (существующие) (цикл)  -->
    <input name="param_value_{$param_id}" value="{$value1}">
    <input name="param_show_{$param_id}" type="checkbox">
    <!-- Новые параметры (Шаблон для JS)  -->
    <div id="template" style="display:none">
    <input name="new_param_value_#?#" value="">
    <input name="new_param_show_#?#" type="checkbox">
    </div>
    <!-- Новые параметры -->
    <div id="param">
    </div>
    <button>Кнопка добавляющая ещё параметр (через JS)</button>
    </form>


В общем тут проблема т.к. в обоих вариантах у меня косяк, в первом и так всё ясно (пустые чекбоксы не попадают в массив), а вот во втором проблема т.к. существующие параметры имеют ИД а новые надо как то именовать что бы сервер их находил

Всё это надо делать (добавление и редактирование ЗАПИСИ и её ПАРАМЕТРОВ через один запрос POST)

Суть вопроса, может есть какой либо другой вариант? (хотелось бы оставить чекбоксы)
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@allexp
web-developer
<form method="POST">
    <!-- Данные записи -->
    <input type="hidden" name="id" value="{$id}">
    <input name="name">
    <input name="title">
    <textarea name="text"></textarea>
    <!-- Параметры записи (существующие) (цикл)  -->
    <input  type="checkbox" name="params[{$param_id}]" value="{$value1}" checked="checked">
    <!-- Новые параметры -->
    <input name="new_params[]" value="param_value" type="checkbox">
    <button>Кнопка добавляющая ещё параметр (через JS)</button>
    </form>


$params = array();
foreach ($_POST['params'] as $param_id => $value) {
    $params[$param_id] = $value;
}
// найти существующие параметры
$old_params  = SELECT * FROM params WHERE ...
foreach ($old_params as $param) {
    // удалить снятые 
    if (!array_key_exists($param['id'], $params)) {
        // DELETE FROM params WHERE id = param['id']
    }
}

// добавить новые
foreach ($_POST['new_params'] as $param_key => $value) {
    // INSERT params SET value = $value, ...
}


А лучше вобще избавиться от $param_id. И просто очищать параметры записи при сохранении, и добавляя только отмеченные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы