2017-07-03 18 views
-2

私はこの質問をどのようにするかわかりません。私が信じる手続き的な質問です。PHPのフォームから複数の入力を処理する方法

<input type="hidden" name="1[]" value="dummy"> 
<input type="radio" name="1[]" value="5"> 
<label> Very Good </label> 
<input type="radio" name="1[]" value="4"> 
<label> Good </label> 
<input type="text" name="1[]" size="20"> 
<br> 
<input type="hidden" name="2[]" value="dummy"> 
<input type="radio" name="2[]" value="5"> 
<label> Very Good </label> 
<input type="radio" name="2[]" value="4"> 
<label> Good </label> 
<input type="text" name="2[]" size="20"> 

$ _POST出力:私は構築し、これとINSERT文から

[1] => Array 
     (
      [0] => Text misc 
     ) 

[2] => Array 
    (
     [0] => 5 
     [1] => 
    ) 

INSERT INTO coached_tracked (coached_id, value, note) 
VALUES ($key, $value[0], $value[1]); 

これは動的に生成されるフォーム入力です。ラジオボタン、テキストフィールドのペア。

ラジオが選択されておらず、テキストフィールドに値がある場合は、最初のインスタンスと同様に、どのように処理できますか。何も選択しないというオプションが必要なので、デフォルト値が必要ではないようです。ダミー値の有無にかかわらず試してみました(可能性のある解決策として隠れたフィールドを提案する例がありました)。

提案。

+0

実際に入力名の末尾に '[]'を置くのは混乱していると思います。それは配列のように考えてください。フォームを送信すると、大括弧の前に同じ名前のフォーム要素がすべて取り込まれ、選択され、チェックされたり、値が含まれていたり(空であっても)、ゼロインデックス付き配列に追加されますサーバーに送信されます。どのようにして今持っているのですか?サーバ側で何が起こっているのかを実際には知ることは実際には不可能です。なぜなら、値のインデックス付き配列がゼロになるだけだからです。 – Mike

+0

また、まったく同じ名前の2つのフォーム要素を持つことはできません(つまり、[]]を使用しない)。私はそれがあなたがやろうとしていることだと思います。 – Mike

+0

同じ名前の配列を使用する理由は、その名前をデータベース挿入のIDキーとして使用するためです。ラジオとテキストのペアは1つのアイテム/ IDを構成します。無線の値とテキストの値は、追跡中のID項目に属する値です。たぶん私のプロセスは不良です。しかし、これは私がこれを行うことができると思った方法でした。しかし、私は問題に直面した。 –

答えて

1

データベースに使用するIDを指定しないでください。自動インクリメントされた列を使用して、データベース自体でそれを判断させます。

まず、論理入力名から始めます。数字だけを使用するとコードが非常に混乱して見えますが、私はあなたが何をしているか全く分かりません。また、すべての可能な数のコミットを反復処理する必要がないように、すべてが同じPHPの$_POST変数に入るようにします。つまり、1つの配列に対して繰り返し処理を行うことができます。

はとても論理的に我々が開始すると、あなたがデータベースにコーチを追加しているとしましょう:

<input name="coach"> 

我々だけではなく、一つで複数のコーチを追加したいとき今、私たちはHTMLの配列名を使用することができ、しかし、HTMLで自動インクリメントするのではなく、それらをハードコードすることをお勧めします。後で簡単にする必要があります。各コーチは特定のプロパティが含まれている場合、

<?php 
for ($i=0;$i<10;$i++) { 
    ?> 
    <input name="coaches[<?=$i?>]"> 
    <?php 
} 

のはnamesalaryを言わせて、note、など、私たちはそのような入力名にプロパティを追加することができます:我々はまたcoachesにそれを複数形

<?php 
for ($i=0;$i<10;$i++) { 
    ?> 
    <input name="coaches[<?=$i?>][name]"> 
    <input name="coaches[<?=$i?>][salary]"> 
    <input name="coaches[<?=$i?>][note]"> 
    <?php 
} 

は、次にPHPで、あなただけの$_POST['coaches']を反復して、あなたが望むどのように各コーチのプロパティを使用します。

if (isset($_POST['coaches'])) { 
    foreach ($_POST['coaches'] as $coach) { 
     $name = $coach['name']; 
     $salary = $coach['salary']; 
     $note = $coach['note']; 

     // Now execute the query: 
     // INSERT INTO coached_tracked (name, salary, note) 
     // VALUES ($name, $salary, $note); 
    } 
} 

注:バインドされたパラメータを持つプリペアドステートメントを使用して、ユーザーが入力したデータをサニタイズして、SQLインジェクション攻撃に対応していないことを確認してください。

+0

提案していただきありがとうございます。 coached_idはアイテムの名前であり、非常に簡単にcoached_nameと呼ばれます。私はデータベースにidを自動的に作成させる。番号は、別の表の完全な説明への参照です。私が理解できないと思うのは、同じデータベース項目に対して2つの入力を処理する方法です。この場合、単一のcoached_id(またはcoached_item_name)のラジオ値とテキストフィールドの値。多分それは質問をより明確にするでしょうか?再度、感謝します。 –

+0

私は自分の答えを編集しました。単にブラウザから取得した値をループするだけです。 – Mike

+0

の構文は何ですか?私はかつてそれを見たことがない。私はあなたがここに示唆しているものを見ていると思う。私はこれを勉強するつもりです。ありがとう。 –

関連する問題