#php #mysql #arrays
Вопрос:
Ввод HTML
<input type="checkbox" value="1" name="que[10][1]">
<input type="checkbox" value="2" name="que[10][2]">
<input type="checkbox" value="3" name="que[10][3]">
...
<input type="checkbox" value="40" name="que[10][40]">
PHP отправить
$submit = $_POST["que"];
У меня есть следующий массив, который я хочу сохранить в своей базе данных :
Array
(
[10] => Array
(
[0] => 26
[1] => 27
[2] => 28
[3] => 29
[4] => 30
[5] => 31
)
)
Как я могу преобразовать в вывод инструкции insert, как показано ниже :
INSERT INTO `tb_answers` (`question_id`, `answer`) VALUES(10,26),(10,27),(10,28),(10,29),(10,30);
Вот мой код :
$submit = $_POST['que'];
$all_values = [];
$sql_submit_form = "INSERT INTO `tb_answers` (`question_id`, `answer`) VALUES";
foreach ($submit as $question_id => $choise) {
$row_values = [];
foreach ($choise as $choise_data => $s_value) {
$row_values[] = "'" . $question_id . "'"; // question_id
$row_values[] = "'" . $s_value . "'"; // answer
}
$all_values[] = '(' . implode(',', $row_values) . ')';
}
$sql_submit_form .= implode(',', $all_values);
echo $sql_submit_form;
Выход :
INSERT INTO `tb_answers` (`question_id`, `answer`) VALUES('10','27','10','28','10','29','10','30','10','31','10','32')
Комментарии:
1. Что вы пробовали до сих пор? Где ты застрял?
2. Какой у вас вопрос по поводу данного кода? Похоже, вы неправильно строите запрос. Кроме того, имейте в виду, что данный способ построения запроса широко открыт для SQL-инъекций
Ответ №1:
Вам нужно только очистить то, что у вас уже есть. Также нет необходимости вводить необработанные данные в ваш SQL-код, что только усложняет обслуживание кода (помимо небезопасности).:
$params = $clauses = [];
foreach ($submit as $question_id => $choices) {
foreach ($choices as $choice_id) {
$clauses[] = '(?, ?)';
$params[] = $question_id;
$params[] = $choice_id;
}
}
$sql = 'INSERT INTO `tb_answers` (`question_id`, `answer`) VALUES ' . implode(', ', $clauses);
Затем перейдите $params
к подготовленному заявлению, и все будет готово.
Комментарии:
1. Огромное спасибо. Я попробовал этот код, вот вывод : $sql=ВСТАВИТЬ В
tb_answers
(question_id
,answer
) ЗНАЧЕНИЯ (10, 29), (10, 30), (10, 31)
Ответ №2:
Как уже упоминалось, вы неправильно строите свой SQL — запрос. SQL-инъекция-это вещь, вам нужно использовать заполнители»?», если вы планируете использовать это в производственных средах. Ваш желаемый результат может быть сгенерирован таким образом:
$row_values = [];
foreach ($submit as $question_id => $choise) {
foreach ($choise as $choise_data => $s_value) {
$row_values[] = "(". $question_id .",".$s_value . ")";
}
}
$sql_submit_form .= implode(',', $row_values);