Размещение большого количества флажков - PullRequest
2 голосов
/ 18 июля 2011

ОБНОВЛЕНИЕ 2:

Следующее дает мне UDPATE table SET db_field1=0, dbfield2=0, dbfield3=0, dbfield4=0 WHERE 1=1 независимо от того, какие опции проверены:

<?php
    if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

        $fields = array('db_field1'=>'cb1', 'dbfield2'=>'cb2', 'dbfield3'=>'cb3', 'dbfield4'=>'cb4');

        $update = '';

        foreach($fields as $dbfield => $field) {
            if ($update) $update.= ',';

            $update.= ' '.$dbfield.'=';

            if (isset($_POST[field])) {
                $update.= 1;
            } else {
                $update.= 0;
            }
        }

        echo 'UDPATE table SET'.$update.' WHERE 1=1';

    }
?>

<html>
    <head>
        <title></title>
    </head>

    <body>
        <form method="post">
            <input type="checkbox" name="cb1" />
            <input type="checkbox" name="cb2" />
            <!-- all the way to 50 -->
            <input type="checkbox" name="cb3" />
            <input type="checkbox" name="cb4" />

            <input type="submit" value="submit" />
        </form>
    </body>
</html>

ОБНОВЛЕНИЕ 1:

<?php
    if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

        if( isset( $_POST["cb"] ) ) {

            $update = "";

            foreach ($_POST['cb'] as $key => $value) {

                if ( $update ) $update.= ', ';

                $update .= $key . " = 1";

            }

            echo "update table1 set " . $update . " where uid = 10";

        }

    }
?>

<html>
    <head>
        <title></title>
    </head>

    <body>
        <form method="post">
            <input type="checkbox" name="cb[col1]" />
            <input type="checkbox" name="cb[col2]" />
            <!-- all the way to 50 -->
            <input type="checkbox" name="cb[col3]" />
            <input type="checkbox" name="cb[col4]" />

            <input type="submit" value="submit" />
        </form>
    </body>
</html>

ОРИГИНАЛЬНЫЙ ВОПРОС:

У меня есть форма PHP с множеством флажков, позволяющих пользователям выбирать, какие опции включать или выключать.

Каков наилучший способ вернуть флажки, чтобы я мог вставить данные в базу данных в виде 0 или 1?

У меня есть следующий код, но это кажется немного чрезмерным, если я использовал этометод для всех 50 флажков:

<?php
    if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
        if( isset( $_POST["cb1"] ) ) {
            // insert 1 in relevant database table cell
            echo 1;         
        } else {
            // insert 0 in relevant database table cell
            echo 0;
        }

        if( isset( $_POST["cb2"] ) ) {
            // insert 1 in relevant database table cell
            echo 1;         
        } else {
            // insert 0 in relevant database table cell
            echo 0;
        }

        // all the way to 50

        if( isset( $_POST["cb49"] ) ) {
            // insert 1 in relevant database table cell
            echo 1;         
        } else {
            // insert 0 in relevant database table cell
            echo 0;
        }

        if( isset( $_POST["cb50"] ) ) {
            // insert 1 in relevant database table cell
            echo 1;         
        } else {
            // insert 0 in relevant database table cell
            echo 0;
        }
    }
?>

<html>
    <head>
        <title></title>
    </head>

    <body>
        <form method="post">
            <input type="checkbox" name="cb1" />
            <input type="checkbox" name="cb2" />
            <!-- all the way to 50 -->
            <input type="checkbox" name="cb49" />
            <input type="checkbox" name="cb50" />

            <input type="submit" value="submit" />
        </form>
    </body>
</html>

Ответы [ 4 ]

2 голосов
/ 18 июля 2011

Определить карту между именем флажка (именем записи массива POST) и именем таблицы mysql;используйте его, чтобы создать свой SQL для вставки значения.

1 голос
/ 18 июля 2011

в HTML выполните следующие действия:

<input type="checkbox" name="checkboxeslist[1]" />
<input type="checkbox" name="checkboxeslist[2]" />
<input type="checkbox" name="checkboxeslist[49]" />
<input type="checkbox" name="checkboxeslist[50]" />

в PHP выполните следующие действия:

<?php
     if (isset($_POST['checkboxeslist'])) {
          //one is at least selected; hence start looping
          foreach ($_POST['checkboxeslist'] as $key => $value) {
               echo $key; //this will print 1,2,49,50 etc... ONLY IF they have been selected
               //do the DB call here
          }
     }
?>

Чтобы также получить невыбранные флажки, выполните следующие действия (только если вы хотитевсе числа от 1 до 50:

<?php
     if (isset($_POST['checkboxeslist'])) {
          //one is at least selected; hence start looping
          for ($i = 1; $i <= 50; $i++) {
               if (isset($_POST['checkboxeslist'][$i])) {
                   echo "1";
               } else {
                   echo "0";
               }
          }
     }
?>
1 голос
/ 18 июля 2011

Создать массив со всеми различными полями:

$fields = array('db_field1'=>'cb1', 'dbfield2'=>'cb2', 'dbfield3'=>'etc', );

$update = '';

foreach($fields as $dbfield => $field) {
    if ($update) $update.= ',';

    $update.= ' '.$dbfield.'=';

    if (isset($_POST[$field])) {
      $update.= 1;
    } else {
      $update.= 0;
    }
}

$query = 'UDPATE table SET'.$update.' WHERE 1=1';

Где db_field - это имя столбца в таблице, а cd - это имена полей html

EDIT

Добавлен лучший пример кода

РЕДАКТИРОВАТЬ 2

Фиксированная переменная записи

0 голосов
/ 18 июля 2011

Для HTML вы также можете просто пройти через эти поля.Где-то есть список столбцов;с моделью MVC вы можете взять их из модели.В противном случае достаточно было бы массива или запроса базы данных о содержимом таблицы.

Для получения имен столбцов из базы данных:

 SELECT name FROM syscolumns 
 WHERE id = (SELECT id FROM sysobjects 
 WHERE name= 'MyTableName') 
 ORDER by colorder

Затем

foreach($columns as $column) {
     echo '<input type="text" name="cb['. $column .']" />' . "\n";
}

для печати столбцов.

...