Я получаю некоторые данные из формы в виде массивов. Каждое значение $_POST
представляет собой массив:
//Example snippet from my code; I have some more data/arrays $department_name = ($_POST[department_name]); $participant_name = ($_POST[participant_name]); $activity = ($_POST[activity]); $location = ($_POST[location]);
Теперь я знаю, что я мог бы использовать цикл foreach для цикла над каждым из этих массивов и вставлять значения один за другим в мою базу данных:
foreach($department_name as $department) { $query = "INSERT INTO location_info (`department`) VALUES ('{$department}')"; $result = mysqli_query($connection, $query); }
Это похоже на много кода для всех моих 35 переменных POST, а также много работы для сервера. Что еще более важно, как я собираюсь «выровнять» каждую часть данных? Из-за цикла он создавал бы новую строку внутри базы данных каждую итерацию и оставлял пустые поля для всех остальных столбцов.
Поэтому я обыскал, как я мог сразу перебрать несколько массивов и нашел это решение:
<?php $ZZ = array('a', 'b', 'c', 'd'); $KK = array('1', '2', '3', '4'); foreach($ZZ as $index => $value) { echo $ZZ[$index] . $KK[$index]; echo "<br/>"; } ?>
Но я действительно не понимаю, как это работает и как я могу применить это к моему коду?
В принципе, в качестве примера у меня есть несколько массивов вроде:
$department_name = array("A", "B", "C"); $participant_name = array(1, 2, 3);
И мне нужно вставить их в мою базу данных следующим образом:
INSERT INTO location_info (`department`, `participant`) VALUES ('A', 1); INSERT INTO location_info (`department`, `participant`) VALUES ('B', 2); INSERT INTO location_info (`department`, `participant`) VALUES ('C', 3);
Поэтому я думаю, что мне нужно использовать цикл foreach и цикл по всем массивам сразу, чтобы вставлять данные по строкам, но я не вижу, как я могу применить код, который я нашел выше, к моему коду?
После некоторых полезных комментариев я переключился на PDO и сделал некоторый прогресс.
Мой текущий код выглядит следующим образом.
Подключение:
<?php try { $dsn = 'mysql:host=localhost;dbname=assessment'; $db = new PDO($dsn, 'xxx', 'xxx'); } catch (Exception $e) { $error = $e->getMessage(); } ?>
Далее я имею:
try { $sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries`, `non_rec_injuries_timeframe`, `competitor`, `cost_per_pair`, `usage_rate`, `leakage`, `cost_of_productivity`, `non_rec_impact`, `non_rec_sprain`, `non_rec_puncture`, `non_rec_dermatitis`, `non_rec_infection`, `non_rec_burns`, `non_rec_cuts`, `rec_impact`, `rec_sprain`, `rec_puncture`, `rec_dermatitis`, `rec_infection`, `rec_burns`, `rec_cuts`, `condition`, `general_id`) VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries_timeframe, :competitor, :cost_per_pair, :usage_rate, :leakage, :cost_of_productivity,:non_rec_impact, :non_rec_sprain, :non_rec_puncture, :non_rec_dermatitis, :non_rec_infection, :non_rec_burns, :non_rec_cuts, :rec_impact, :rec_sprain, :rec_puncture, :rec_dermatitis, :rec_infection, :rec_burns, :rec_cuts, :condition, :general_id)"; $stmt = $db->prepare($sql); for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { $loc_info = array(':department' => $_POST["department_name"][$i], ':participant' => $_POST["participant_name"][$i], ':activity' => $_POST["activity"][$i], ':location' => $_POST["location"][$i], ':rec_injuries' => $_POST["injuries"][$i], ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i], ':non_rec_injuries' => $_POST["non_rec_injuries"][$i], ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i], ':competitor' => $_POST["competitor"][$i], ':cost_per_pair' => $_POST["cost_per_pair"][$i], ':usage_rate' => $_POST["usage_rate"][$i], ':leakage' => $_POST["leakage"][$i], ':cost_of_productivity' => $_POST["cost_of_productivity"][$i], ':non_rec_impact' => $_POST["non_rec_impact"][$i], ':non_rec_sprain' => $_POST["non_rec_sprain"][$i], ':non_rec_puncture' => $_POST["non_rec_puncture"][$i], ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i], ':non_rec_infection' => $_POST["non_rec_infection"][$i], ':non_rec_burns' => $_POST["non_rec_burns"][$i], ':non_rec_cuts' => $_POST["non_rec_cuts"][$i], ':rec_impact' => $_POST["impact"][$i], ':rec_sprain' => $_POST["sprain"][$i], ':rec_puncture' => $_POST["puncture"][$i], ':rec_dermatitis' => $_POST["dermatitis"][$i], ':rec_infection' => $_POST["infection"][$i], ':rec_burns' => $_POST["burns"][$i], ':rec_cuts' => $_POST["cuts"][$i], ':condition' => $_POST["condition"][$i], ':general_id' => $_POST["id"][$i] ); $stmt->execute($loc_info); } } catch (Exception $e) { $error = $e->getMessage(); }
Но это все еще не работает.
Мысли? Могу ли я помещать массив внутри массива?
Хорошо после нескольких проб и ошибок и некоторой помощи от @ Rizier123, вот ответ:
html на странице формы
Для большей ясности я пытался выяснить, как добавить несколько массивов данных в мой db. Итак, на странице динамической формы у меня есть входы, похожие на:
<p>Location: <input type='text' name='location[]' > </p>
Обработка формы и ввод данных в БД
Во-первых, я переключился с mysqli на PDO, затем я побежал со следующим кодом:
try { $sql = "INSERT INTO location_info (`department`, `participant`, `activity`, `location`, `rec_injuries`, `rec_injuries_timeframe`, `non_rec_injuries`, `non_rec_injuries_timeframe`, `competitor`, `cost_per_pair`, `usage_rate`, `leakage`, `cost_of_productivity`, `non_rec_impact`, `non_rec_sprain`, `non_rec_puncture`, `non_rec_dermatitis`, `non_rec_infection`, `non_rec_burns`, `non_rec_cuts`, `rec_impact`, `rec_sprain`, `rec_puncture`, `rec_dermatitis`, `rec_infection`, `rec_burns`, `rec_cuts`, `condition`, `general_id`) VALUES (:department, :participant, :activity, :location, :rec_injuries, :rec_injuries_timeframe, :non_rec_injuries, :non_rec_injuries_timeframe, :competitor, :cost_per_pair, :usage_rate, :leakage, :cost_of_productivity,:non_rec_impact, :non_rec_sprain, :non_rec_puncture, :non_rec_dermatitis, :non_rec_infection, :non_rec_burns, :non_rec_cuts, :rec_impact, :rec_sprain, :rec_puncture, :rec_dermatitis, :rec_infection, :rec_burns, :rec_cuts, :condition, '{$id}')"; $stmt = $db->prepare($sql); for($i = 0, $l = count($_POST["department_name"]); $i < $l; $i++) { $loc_info = array(':department' => $_POST["department_name"][$i], ':participant' => $_POST["participant_name"][$i], ':activity' => $_POST["activity"][$i], ':location' => $_POST["location"][$i], ':rec_injuries' => $_POST["injuries"][$i], ':rec_injuries_timeframe' => $_POST["injury_time_frame"][$i], ':non_rec_injuries' => $_POST["non_rec_injuries"][$i], ':non_rec_injuries_timeframe' => $_POST["non_rec_injury_timeframe"][$i], ':competitor' => $_POST["competitor"][$i], ':cost_per_pair' => $_POST["cost_per_pair"][$i], ':usage_rate' => $_POST["usage_rate"][$i], ':leakage' => $_POST["leakage"][$i], ':cost_of_productivity' => $_POST["cost_of_productivity"][$i], ':non_rec_impact' => $_POST["non_rec_impact"][$i], ':non_rec_sprain' => $_POST["non_rec_sprain"][$i], ':non_rec_puncture' => $_POST["non_rec_puncture"][$i], ':non_rec_dermatitis' => $_POST["non_rec_dermatitis"][$i], ':non_rec_infection' => $_POST["non_rec_infection"][$i], ':non_rec_burns' => $_POST["non_rec_burns"][$i], ':non_rec_cuts' => $_POST["non_rec_cuts"][$i], ':rec_impact' => $_POST["impact"][$i], ':rec_sprain' => $_POST["sprain"][$i], ':rec_puncture' => $_POST["puncture"][$i], ':rec_dermatitis' => $_POST["dermatitis"][$i], ':rec_infection' => $_POST["infection"][$i], ':rec_burns' => $_POST["burns"][$i], ':rec_cuts' => $_POST["cuts"][$i], ':condition' => $_POST["condition"][$i] ); $stmt->execute($loc_info); }