Ive は、ユーザーが Jquery を介してフォーム要素を追加できるようにする動的フォーム スクリプトの作業を開始しました。このフォーム要素は、次に PHP スクリプトに送信されます。
これを達成する方法についていくつかのフィードバックがありました。現時点では、次のものがあります。
ユーザーがフォーム要素を追加すると、要素は次の名前配列で追加されます。
<textarea name="element[text][123]">
<input type="text" name="element[input][456]" />
送信されたフォーム要素のタイプを知る必要があるため、配列の最初のレベルが要素のタイプで、配列の 2 番目の要素が一意の ID である「element[][]」という多次元配列を使用しています。そして値。
var_dump() を送信すると、PHP の出力が次のように出力されます。
array
text => array
123 => string 'The textarea value'
input => array
456 => string 'The input field value'
現在、スクリプトの PHP 側に取り組んでおり、これを行うためのより良い方法があるかどうか疑問に思っています。
何かご意見は?
アップデート
配列のキー名が一意ではないため、これを行う方法を変更する必要があります。ユーザーが 2 つのテキストエリアを追加した場合
<textarea name="element[text][123]">
<textarea name="element[text][456]">
ユーザーがフォーム要素を追加すると、要素をドラッグできるため、要素の作成後に配置を変更できます。これにより、ユーザーは要素を追加してから、表示したい場所に移動できます。
PHP はこの順序付けを適切に処理し、フォームが送信された順序で配列を受け入れますが、上記のように、キー名が同じである場合、順序が崩れます。
PHP側で私が知る必要がある
- フォームフィールドのタイプ
- フォームフィールドの値
- フォーム フィールドの一意の ID (単なるタイムスタンプ)
名前を次のように割り当てて、コールが言及したことを行う必要があるかもしれないと思います。
element[text_123]
次に、「_」でキー名を展開して、タイプと識別子を決定できます。
アップデート
ジャックが投稿したスクリプトを少し修正しました
$vars = $_POST['element'];
foreach ($vars as $id => $vals)
{
// $vars[id] outputs the ID number
// $vars[vals] is the array containing the type and value
echo "This fields ID is $id. ";
foreach($vals as $key => $value)
{
echo "Type was: $key and the value was: $value <br />";
}
}
この出力の簡単なテスト
This fields ID is 1338261825063. Type was: heading and the value was: xzczxczxczxczxczxc
This fields ID is 1338261822312. Type was: heading and the value was: asdasdasdasdad
これにより、識別子とそれが属する配列、型と値がわかりますが、データが送信された順序もわかります。
そこから、データをマークアップでラップし、追加の操作を実行してから、データをデータベースに挿入できます。