0

別のアイテムを追加

これら 2 つのフィールドは、データベースに挿入されます。ただし、ユーザーに「別のアイテムを追加」する機能を提供したいと考えています。理想的には、好きなだけアイテムを追加できる必要があります。フォームを送信すると、データが mysql テーブルに挿入されます。

どうすればこれを行うことができますか?データベースに 10 個の余分な列を作成して、追加されるアイテムに対応することは、現実的でも理想的でもありません。

助けてくれてありがとう!

これは、DB にデータを挿入するコードのスニペットです。

if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
                            {
                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();
                                    $stmt->close();
                            }
4

2 に答える 2

1

これはかなり複雑な質問ですが、かなり簡単な解決策がいくつかあります。まず、可変数の項目を処理するために使用するバックエンド PHP スクリプトを変更する必要があります。

たとえば、現在、おそらく次のようなものがあります。

$item_number = $_POST['item_number'];
$item_description = $_POST['item_description'];
add_item_to_db($item_number, $item_description);

項目の配列の処理を処理するには、コードを変更する必要があります。

$item_numbers = $_POST['item_number'];
$item_descriptions = $_POST['item_description'];
// validate that count($item_numbers) == count($item_descriptions)
for ($i = 0; $i < count($item_numbers); $i++) {
    add_item_to_db($item_numbers[$i], $item_descriptions[$i]);
}

上記で実行する必要があるエラー処理はかなりありますが、ここには示されていません。ユーザーが item_descriptions とは異なる数の item_numbers を入力した場合、その処理方法を決定する必要があります。また、いずれかのフィールドが空白の場合があります。エラーになる場合もあれば、そうでない場合もあります。

HTML を変更する必要があります。

<input type="text" name="item_number[]" />
<input type="text" name="item_description[]" />

名前の[]に注意してください。これは、それぞれの値の配列を指定します。

最後に、ユーザーが [別の項目を追加]リンクを押したときに、画面に新しい入力項目のセットを動的に追加する必要があります。これには jQuery を使用することをお勧めします。これを実現するには、次のようにします。

jQuery('<input type="text" name="item_number[]" /><input type="text" name="item_description[]" />').appendTo('#someDiv');

新しい入力要素がフォーム要素内に追加されていることを確認してください。明らかに、書かなければならないコードがたくさん残っています。これは、概念の基本的な例にすぎません。

于 2013-03-13T21:50:25.927 に答える
0

使用するだけです:

name="item[]"

アイテム番号'

name="description[]"

<input type="text" name="item[]" /><input type="text" name="description[]" />

アイテムの説明フィールドとサーバー側で、両方を繰り返します。フロントエンドで、そのノードを何度も複製するスクリプトを作成するだけです。

編集

あなたが示したコードに基づいて、それは以下のコードのようなものでなければなりません:

if(isset($_POST['item']){
for($i = 0; $i < count($_POST['item']); $i++){
$number = $_POST['item'][$i];
$description= $_POST['description'][$i];
if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
                            {
                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();
                                    $stmt->close();
                            }
}

あなたのJavaScriptで以下のようにしてください:

function addRow(){
  document.getELementById('container').el.innerHTML += '<input type="text" name="item[]" /><input type="text" name="description[]" />' ;
}

HTMLコード:

<form name='myform' >

 <div id="container">
 <input type="text" name="item[]" /><input type="text" name="description[]" />     
 </div>
    <p onclick="addRow() ;" >Add another item</p>
</form>

これがお役に立てば幸いです。

アップデート

これを試してください:

if(isset($_POST['item']){

if ($stmt = $mysqli->prepare("INSERT items (number, description) VALUES (?, ?)"))
{
  for($i = 0; $i < count($_POST['item']); $i++){
  $number = $_POST['item'][$i];
  $description= $_POST['description'][$i];

                                    $stmt->bind_param("ss", $number, $description);
                                    $stmt->execute();

  }
  $stmt->close();

 }
于 2013-03-13T21:46:29.400 に答える