2012-02-13 12 views
1

タイトルの漠然としたことをお詫びしますが、私はこれを単語に入れるのが難しいと感じています。PHP HTMLフォーム配列 - ユーザーが新しいエントリを追加する方法を教える方法

私はkey:valueのペアを含んでおり、データベースから読み込まれ、入力として値として配置され、再度読み込まれます(編集、削除、または追加される可能性があります)。サーバー側では、自分のデータを掘り起こすためにユーザーが何をしたのかを把握する必要があります。

例:

<input type='text' name='keyID[]' value='1'/> 
<input type='text' name='key[]' value='someKey'/> 
<input type='text' name='value[]' value='someValue'/> 

<input type='text' name='keyID[]' value='2'/> 
<input type='text' name='key[]' value='someOtherKey'/> 
<input type='text' name='value[]' value='someOtherValue'/> 

<input type='text' name='keyID[]' value='3'/> 
<input type='text' name='key[]' value='yetAnotherKey'/> 
<input type='text' name='value[]' value='yetAnotherValue'/> 

<input type='text' name='key[]' value='aCompletelyNewKey'/> 
<input type='text' name='value[]' value='aCompletelyNewValue'/> 

フォームが送信されると、私は元のデータを削除し、(私の新しいデータとして他の配列のn番目の値をgeting)キーを通じてforeachループを行い、これを追加データベースに転送します。

これは、更新されたデータベース設計で困ってしまうまでうまくいった - 今は何が提出されていないか(ページ上で削除されたか)、まだそこにあるのか)、新しいもの(keyID[]はありません)。

私は削除して更新するかを把握するために現在保存されている keyID[]秒のリストに対して array_diff()を使用してきたが、どのように私は(新しい入力に対して keyID[]は存在しないとき追加されているかを把握う

key[]value[]の両方があります)。

また、アレイの値が送信される順序を保証することはできませんので、keyID[]配列の末尾まで数えて、余分な値をチェックすると正しい値が得られるとは思いません毎回。

アイデア?

+1

を、あなたは '鍵IDが[]'とにかく、ちょうどそれにブランク値を与える '値を=「」'含める必要があります。この方法でループすると、その値をチェックできます。それが空であれば、新しいk/vペアが追加されていることが分かります。 –

+0

常識がもう一度勝つ:)ありがとう、本当に私は問題を解決しました。単純な解決策は最高です:) – jammypeach

答えて

2

アイデアはこのように、少し最後のブロックを変更することです:

... 
<input type='hidden' name='keyID[]' value='NEW'/> 
<input type='text' name='key[]' value='aCompletelyNewKey'/> 
<input type='text' name='value[]' value='aCompletelyNewValue'/> 

この方法で、すべての3つの配列は同じ数の要素を持っています。さらに、新しいものかどうかを知ることは今や些細なことです。

+0

これは、どのような方法を採用しても意味をなさないものです。 – AlexC

+0

これはうまくいった:) – jammypeach

1

私はあなたが少し複雑すぎるかもしれないと思う。フィールドの名前にIDを渡すことができるので、IDを直接識別することができます。通常、これはデータベースからのレコードID、またはその他の一意の識別子です。 - チェックボックスがオン/オフ「機能を備えた」フラグをオンとさせて頂きますので、これと似たようなあなたは何ができるかです:

<input name="featured[<?php echo $record['id']; ?>]" value="<?php echo $record['value']; ?>"> 

$レコードは[「値」]は常に(いくつかのデータを保持することがあります起こっています送信時に更新/処理される空白の文字列でなければなりません)。

提出する際には、$ _POST ['featured']配列を$ key => $ valueとして繰り返し、レコードの値を$ valueに設定する必要があります。レコードIDは$ key 。更新するレコードが存在しない場合は、INSERT ON DUPLICATE KEY UPDATE sqlコマンドを使用して新しいレコードを作成できます。

私はそれが助けてくれることを願っています!

1

各レコード[]内にkeyIDを配置すると、更新されたデータベースとその方法をデータベースで確認できます。例えば

<input type='text' name='key[1]' value='someKey'/> 
<input type='text' name='value[1]' value='someValue'/> 

<input type='text' name='key[2]' value='someOtherKey'/> 
<input type='text' name='value[2]' value='someOtherValue'/> 

<input type='text' name='key[3]' value='yetAnotherKey'/> 
<input type='text' name='value[3]' value='yetAnotherValue'/> 

<input type='text' name='key[n]' value='aCompletelyNewKey'/> 
<input type='text' name='value[n]' value='aCompletelyNewValue'/> 

[n]は、ジャバスクリプトを通じて生成した場合、自動的にインクリメントする必要があるだろうと。

また、keyIDとkey|valueの名前を逆にして、各配列要素を受け取ってデータベースと比較できるようにすることをお勧めします。しかし、それは(テーブル名など)の接頭辞必要があります:新しい入力の場合

<input type='text' name='tablename[1][key]' value='someKey'/> 
<input type='text' name='tablename[1][value]' value='someValue'/> 
関連する問題