#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
поможет. Я могу решить проблему, но это не вопрос. 😉