0

次のようなアプリケーションがあります。

ここに画像の説明を入力

ご覧のとおり、各行には、グループ ヘッダー (入力のみの行) または成分フォーム (小さな入力、次に選択、次に別の大きな入力がある行) のいずれかが含まれます。

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. グループ見出しの入力フィールドに、成分テキスト フィールドの 1 つと同じ名前の値を持たせ、グループ見出しであるという非表示の値を一緒に送信しますか?

  2. 名前の値が異なる別の入力フィールドとして送信しますか?

私の質問は、現在のコードでこれを行うにはどうすればよいですか、これらの効率的なソリューションのいずれかですか、それともさらに優れたソリューションがありますか?

助けてくれてありがとう!詳細が必要な場合は、お問い合わせください。

4

1 に答える 1

1

のような空の見出し<input type="hidden" name="groupheading[]" value="product" />と のような開いた見出しを使用できます<input type="text" name="groupheading[]" value="" />。最初のものは製品範囲内にある必要があります。

このようにして、今と同じようにループを続けることができます。$_POST['groupheading'][$key] は、グループ見出しまたはフレーズ「product」のいずれかを返します。したがって、スクリプトでは次のようになります。

if($_POST['groupheading'][$key] == "product") {
  // insert product
} else {
  // insert group heading
}

私は今朝か昨日の答えであなたを助けたと思います..必要な効果を得るためにあなたが使用している方法はまだ少し奇妙です. それははるかに簡単に達成できます。

于 2013-03-27T23:47:41.517 に答える