次のようなアプリケーションがあります。
ご覧のとおり、各行には、グループ ヘッダー (入力のみの行) または成分フォーム (小さな入力、次に選択、次に別の大きな入力がある行) のいずれかが含まれます。
Javascript を使用して新しいスパンを追加します。次の PHP を使用して、各成分スパンを配列にグループ化し、順序を決定して (各スパンを別の順序に移動できるため)、データベースに挿入します。
foreach($_POST as $key => $value) {
$value = $this->input->post($key);
$ingredientQTY = $this->input->post('ingredientQTY');
$measurements = $this->input->post('measurements');
$ingredientNAME = $this->input->post('ingredientNAME');
$ingredientsROW[] = array($ingredientQTY, $measurements, $ingredientNAME);
for ($i = 0, $count = count($ingredientQTY); $i < $count; $i++) {
$rows[] = array(
'ingredientamount' => $ingredientQTY[$i],
'ingredientType' => $measurements[$i],
'ingredientname' => $ingredientNAME[$i],
'recipe_id' => $recipe_id,
'order' => $i + 1,
'user_id' => $user_id
);
$sql = "INSERT `ingredients` (`ingredientamount`,`ingredientType`,`ingredientname`, `recipe_id`, `order`, `user_id`) VALUES ";
$coma = '';
foreach ($rows as $oneRow) {
$sql .= $coma."('".implode("','",$oneRow)."')";
$coma = ', ';
}
}
$this->db->query($sql);
break;
}
これは、成分の行を挿入するのに驚異的に機能します。しかし、グループの見出しを挿入する方法がわかりません ($i + 1 の順序を維持するには、for ループに配置する必要があります)。
私は2つの解決策を見つけたと思います(他にもあるかもしれませんが、これらはうまくいかないかもしれません):
グループ見出しの入力フィールドに、成分テキスト フィールドの 1 つと同じ名前の値を持たせ、グループ見出しであるという非表示の値を一緒に送信しますか?
名前の値が異なる別の入力フィールドとして送信しますか?
私の質問は、現在のコードでこれを行うにはどうすればよいですか、これらの効率的なソリューションのいずれかですか、それともさらに優れたソリューションがありますか?
助けてくれてありがとう!詳細が必要な場合は、お問い合わせください。