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

Тема в разделе "Как сделать...", создана пользователем Sunday, 25 май 2013.

  1. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    732
    Симпатии:
    323
    Есть порядка 40-ка чекбоксов, которые могут быть произвольно выбраны или нет.
    Как правильно обработать их все? Для каждого из них в базе есть свое поле, куда нужно записать 1 (если чекбокс выбран) или 0 (если не выбран).

    Нагуглил пару тем по типу такой, но я не врубаюсь, как записать данные в базу?
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    115
    Симпатии:
    486
    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.
     
    Шумадан и Sunday нравится это.
  3. nox78

    nox78 Писатель

    Регистр.:
    5 авг 2012
    Сообщения:
    8
    Симпатии:
    3
    я делал к примеру так,


    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> ";
    }