2017-09-19 8 views
1

他の人は同じフィールドを何度も複製することを意味する "動的フィールド"の定義を使用しますが、それは私が "動的フィールド"を定義する方法ではありません。私はカテゴリと商品を1つのテーブルで管理するスクリプトを用意しています。次に、そのテーブルを使用して別のページにテキストフィールドを含むフォームを表示します。だから私の質問は、どのように動的テーブルを保存するように、次のテーブルとその2番目のテーブルに挿入するためのPHPを作成するのですか?フィールドはいつでも追加または削除することができ、新しいテーブルと挿入ステートメントは柔軟に対応できる必要があります。 ALTでALTNAMEは、フォームフィールドの名前をされて終わると、「猫」を持つもの:猫/ PRODテーブルに関するユニークなフィールドが動的に追加されるフォームからmysqlデータベースにデータを保存するにはどうすればよいですか?

id label  altname  parent sort 
1 cat2   cat   0  4 
2 subcat1  cat   1  5 
3 cat1   cat   0  1 
4 subcat2  cat   1  9 
5 product 1a product_1a 3  2 
6 product 2a product_2a 2  6 
7 product 2b product_2b 2  7 
8 product 3a product_3a 4  10 
9 product 3b product_3b 4  11 
10 new product new_product 3  3 

情報:ここでは

は、第一テーブル内のレコード(categories_products)の一例です名前は決してフィールドにならず、カテゴリとサブカテゴリのタイトルです。以下に生成されるフォームの例を示します。私はもう一つの余分なフィールド(会社)を追加する必要があります私は保存する必要があります。

<form class='' id='form-id'> 
    Company: <input type="text" name="company" value=""> 
    <ul class='a'> 
     <li class="b"> 
      <p><strong>cat1</strong></p> 
      <ul class='a'> 
       <li class="c"><p>product 1a: <input type="text" name="product_1a" ></p></li> 
       <li class="c"><p>new product: <input type="text" name="new_product" ></p></li> 
      </ul> 
     </li> 

     <li class="b"> 
      <p><strong>cat2</strong></p> 
      <ul class='a'> 
       <li class="b"><p><strong>subcat1</strong></p> 
        <ul class='a'> 
         <li class="c"><p>product 2a: <input type="text" name="product_2a" ></p></li> 
         <li class="c"><p>product 2b: <input type="text" name="product_2b" ></p></li> 
        </ul> 
       </li> 
       <li class="b"> 
        <p><strong>subcat2</strong></p> 
         <ul class='a'> 
          <li class="c"><p>product 3a: <input type="text" name="product_3a" ></p></li> 
          <li class="c"><p>product 3b: <input type="text" name="product_3b" ></p></li> 
         </ul> 
       </li></ul> 
     </li> 
    </ul> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

これは、異なる企業が異なる価格設定をするという点です。価格はフォームフィールドに入力されるものです。そして、フォームを生成するすべてのカテゴリと製品を持つというポイントは、すべての企業がすべて同じカテゴリと製品を取得するためです。その後、後の管理者は新製品を考え、新製品を追加して追加するので、新製品は新しい形の保存の一部にする必要があります。

この時点で、私は会社の価格の記録を保存するためにどのテーブル構造を使用するか分かりません。私は、テーブルコラムを作成して破壊するのは賢明ではないと聞いています。だから、もっと良い方法は何ですか?すべてのフォームフィールド値を単一のテーブル列に保存する必要がありますか?しかしどのように?これはどのように動的になり、新しいフォームフィールドが作成されたときに過去の行についてこの列のデータに何が起こりますか?

私はこの新しいテーブルを開始しましたが、これは終了し、次に行うべきことや動的フォームのデータを格納する方法がわかりません。

table name: product_pricing 
id 
company 
price 

、次はカップルのレコードの例かもしれないが、私は実際にこれを実現する方法を知ることはできません。

id company price 
1  abc  {product_1a:0.01,product_2a:0.01,product_2b:0.01,product_3a:0.01,product_3b:0.01,new_product:0.01} 
2  xyz  {product_1a:0.02,product_2a:0.02,product_2b:0.02,product_3a:0.02,product_3b:0.02,new_product:0.02} 

のか、製品名が変更される場合がありますので、これは良くなります?

id company price 
1  abc  {5:0.01,6:0.01,7:0.01,8:0.01,9:0.01,10:0.01} 
2  xyz  {5:0.02,6:0.02,7:0.02,8:0.02,9:0.02,10:0.02} 

私は私が取得し、後でこの列のデータを解析する方法を心配することができますが、私は保存/ PHPを介してデータを保存するつもりですか、この第一のハードルを通過した取得する必要がありますと:IDの代わりで保存mysqlコード。明らかに、価格を編集するためのレコードの編集ページがあるので、更新はデータを適切に再保存する必要があります。これは私が心配していることです。最初のテーブルに何が行われていても(製品の追加と削除)、データは常に正しい位置に保持されます。

+0

の念だそれらを更新するために、テーブル内のリンクIDになることができますか?企業名をID(会社のテーブル)にリンクするもの、カスタム価格(ID、企業ID、製品ID、価格) –

+0

を持つ製品に企業をリンクするものがあるため、製品と価格は別々の行に表示されます?上記の例では、abc companyには6レコード、xyz companyには6レコードがありますか? – leoarce

+0

これは、すべてのフィールドが角カッコで同じ名前を持つ必要があることを意味しますか?名前= "価格[]" – leoarce

答えて

1

これを分けてください。あなたが持っている: -

  • カテゴリー
  • 製品
  • 会社

カテゴリは多くのカテゴリと多くの製品を含めることができ、製品が多くの企業に接続することができ、各企業が独自のを持つことができます製品あたりの価格、正しい?

もしそうなら、私がお勧めしたいことはある: -

カテゴリー表

カテゴリID、カテゴリ名、カテゴリーAltキー名、親カテゴリ、注文

製品表

製品ID、製品名、製品名、カテゴリID、注文

会社表

会社ID、会社名

会社製品リンク表

リンクID、会社ID、プロダクトID、製品価格

この時点で、すべてが分離されているので、動的な列は必要ありません。あなたが唯一のリンクテーブル内のこれらの企業のためのリンクを挿入して、あなたはあなたが唯一の特定の企業は/持っているために価格を持ちたい製品を追加するとしましょう、その後、フォームのためのあなたのSQLは次のようになります -

SELECT 
    cplt.link_id, 
    pt.product_name, 
    pt.product_alt_name, 
    cplt.product_price 
FROM 
    company_product_link_table cplt 
INNER JOIN 
    product_table pt 
ON 
    pt.product_id = cplt.product_id 
WHERE 
    cplt.company_id = PUT COMPANY ID HERE 

名価格のためのあなたの入力フィールドの後、ちょうどそれがなぜ2つのテーブルを使用し

UPDATE 
    company_product_link_table 
SET 
    product_price = PRODUCT PRICE 
WHERE 
    link_id = NAME OF FIELD 
+0

私はそれを正確にはしませんでしたが、私は仕事を完了するのに十分な情報を得ました。ありがとう。 – leoarce

関連する問題