Запись неопределенного количества данных формы в MySQL

#php #mysql #forms

#php #mysql #формы

Вопрос:

Сейчас я некоторое время пытаюсь обдумать следующее:

У меня есть форма, которая отправляет определенное пользователем количество значений в PHP-скрипт, и мне нужно записать их в базу данных MySQL.

Сама форма работает нормально и print_r() показывает мои значения следующим образом:

 [items] => Array
            (
                [1] => Array
                    (
                        [option] => 3
                        [check_1] => 1
                    )

                [2] => Array
                    (
                        [option] => 2
                        [check_1] => 1
                    )

                [17] => Array
                    (
                        [check_1] => 1
                        [check_3] => 1
                    )

            )
  

Для каждого элемента будет одно значение параметра и до десяти флажков. Теперь мне нужно было бы получить что-то вроде этого, чтобы записать каждый элемент в БД:

 INSERT INTO table (item_id, option, check_1, check_2,...) 
VALUES ('$ItemID', '$OptionValue', '$Check_1_Value', '$Check_2_Value',...)
  

Моя самая большая проблема — считывать идентификаторы элементов (в данном случае 1,2 и 17) и переводить их в переменные.

Комментарии:

1. Вы пропустили [option] => ? из этого третьего события или это поле может отсутствовать в этом массиве?

2. Покажите нам, что вы пытались сделать до сих пор, это даст нам с чего начать и сообщит нам, какой API базы данных вы используете

3. Небольшое отступление — если количество значений определяется пользователем, как это будет работать с вашей таблицей — в ней должно быть заданное количество столбцов. Вы уверены, что ваша база данных нормализована должным образом? Очевидно, я не знаю логики, лежащей в основе данных, но, возможно, эти значения были бы лучше в отдельных строках во вторичной таблице, а не в разных столбцах в основной таблице?

4. @RiggsFolly: опция может отсутствовать

5. @ADyson Не в сторону, очень верный момент. И это значительно упростило бы хранение информации

Ответ №1:

Справка по PHP: foreach.

 foreach ( $items as $key => $values )
{
    // $key => 17 <= this the values you were looking for
    // $values => { [check_1] => 1, [check_3] => 1 }
    [...]
}
  

Массив инициализации:

 $items = array(
    1 => array(
        "option" => 3,
        "check_1" => 1,
    ),
    2 => array(
        "option" => 2,
        "check_1" => 1,
    ),
    17 => array(
        "check_1" => 1,
        "check_3" => 1,
    ),
) ;
  

Разбор массива:

 foreach( $items as $k1 => $a1 )
{ // should be escape for safety mysql_real_escape() or ...
    $dbCols = "item_id"; 
    $dbValues = $k1;
    foreach( $a1 as $k2 => $v2 )
    {
        $dbCols .= ",$k2"; 
        $dbValues .= ",$v2";
    }
    echo "INSERT INTO `table` ( $dbCols ) VALUES ( $dbValues );n";
}
  

Результат:

 INSERT INTO `table` ( item_id,option,check_1 ) VALUES ( 1,3,1 );
INSERT INTO `table` ( item_id,option,check_1 ) VALUES ( 2,2,1 );
INSERT INTO `table` ( item_id,check_1,check_3 ) VALUES ( 17,1,1 );
  

Комментарии:

1. Вам действительно следует добавить некоторое объяснение того, почему это должно работать — в его текущем виде он не дает никаких объяснений, которые могли бы помочь остальной части сообщества понять, что вы сделали для решения / ответа на вопрос. Это особенно важно для вопросов, на которые уже есть ответы.

2. @ishmaelMakitla Моя самая большая проблема — считывать идентификаторы элементов (в данном случае 1,2 и 17) и переводить их в переменные => проблема в том, чтобы получить значения идентификаторов в переменные … не так ли? foreach поможет. Я могу решить проблему, но это не вопрос. 😉