Обработка множества чекбоксов

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Есть порядка 40-ка чекбоксов, которые могут быть произвольно выбраны или нет.
Как правильно обработать их все? Для каждого из них в базе есть свое поле, куда нужно записать 1 (если чекбокс выбран) или 0 (если не выбран).

Нагуглил пару тем по типу Для просмотра ссылки Войди или Зарегистрируйся, но я не врубаюсь, как записать данные в базу?
 
PHP:
<?php
/**
 * Значения в массиве должны совпадать с названиями полей в таблице БД
 */
$fields = array ('table_field_a', 'table_field_b', 'table_field_c', /* ... */ 'table_field_n');

$sql = '';

if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Выполнять только для запросов типа POST

    $sql_set = array ( ); // Сюда будем кидать значения полей БД
    $settings = array ( ); // Тут будут значения, взятые из формы
    
    if (!empty ($_POST['settings'])) { // Если отмечен хотя-бы 1 чекбокс, формировать массив значений
        $settings = $_POST['settings'];
    }
    
    // обрабатываем каждое поле
    foreach ($fields as $field) {
        if (empty ($settings[$field])) { // Если чекбокс с указанным идентификатором не выбран - пишем 0
            $sql_set[] = 't.' . $field . ' = 0';
        } else { // если выбран - 1
            $sql_set[] = 't.' . $field . ' = 1';
        }
    }
    
    // Формируем запрос
    $sql = sprintf ('UPDATE `my_table` AS t SET %s WHERE ...', implode (', ', $sql_set));
}
?>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Test</title>
    </head>
    <body>
        <form action="/index.php" method="post">
            <p><input name="settings[table_field_a]" type="checkbox" value="1" /> Значение A</p>
            <p><input name="settings[table_field_b]" type="checkbox" value="1" /> Значение B</p>
            <p><input name="settings[table_field_c]" type="checkbox" value="1" /> Значение C</p>
            ...
            <p><input name="settings[table_field_n]" type="checkbox" value="1" /> Значение N</p>
            
            <p><input name="submit" type="submit" value="Применить" /></p>
        </form>
        
        <?=$sql ? '<p>SQL: '. $sql . '</p>' : '';?>
    </body>
</html>

В данном примере имена тегов чекбоксов должны быть формата settings[<поле_в_БД>], а также, все эти поля должны быть прописаны в массиве $fields.
 
я делал к примеру так,


PHP:
<input name="checkbox[]" type="checkbox" value="значение">
 
 
 
и обрабатывал
 
$m_enjoy = ($_POST['checkbox']);
 
for ($i=0; $i<count($m_enjoy); $i++){
$m_enjoy_last .= iconv("UTF-8", "windows-1251", $m_enjoy[$i])."<br> ";
}
 
Назад
Сверху