0

ユーザーが必要に応じてフィールドの数を増やしたり追加したりできるフォームがあります。

フィールドが正常に追加されています.....

このために私はjavascriptを使用し、コードはここにあります..

<script type="application/javascript">
var counter3 = 0;
function addAuthor() {
    // Get the main Div in which all the other divs will be added
    var mainContainer = document.getElementById('Author');

    // Create a new div for holding text and button input elements
    var newDiv = document.createElement('div');

    // Create a new text input
    var newText = document.createElement('input');
    newText.type = "text";
    //var i = 1;
    newText.name = "Author[]";
    //newText.value = counter3 + 2 + ". ";

    //Counter starts from 2 since we already have one item
    //newText.class = "input.text";
    // Create a new button input
    var newDelButton = document.createElement('input');
    newDelButton.type = "button";
    newDelButton.value = "-";

    // Append new text input to the newDiv
    newDiv.appendChild(newText);
    // Append new button input to the newDiv
    newDiv.appendChild(newDelButton);
    // Append newDiv input to the mainContainer div
    mainContainer.appendChild(newDiv);
    counter3++;
    //i++;

    // Add a handler to button for deleting the newDiv from the mainContainer
    newDelButton.onclick = function() {
        mainContainer.removeChild(newDiv);
        counter3--;
    }
}
</script>

ここにフォームがあります..

<form method="post" action="">
    <input type = "text" name="Author[]" />
    <input type="button" value="+" id="Authorbutton" onclick="addAuthor()" />
    <input type="submit" value="submit" name="submit">
    </form>

私はデータをデータベースに保存するためにphpとmysqlクエリを使用しています..コードコードは..

<?php

if(isset($_POST['submit']))
{
$authors = $_POST['Author'];
foreach($authors as $author) 
{
    $sql=mysql_query("INSERT INTO test (number, type) VALUES ('{$_POST['type']}','{$author}')");

    if (!$sql){
       die('Error: ' . mysql_error());
    }
//endforeach;

}
}

?>

しかし問題は、データがデータベースに正しく保存されないことです...

データベースの最初のフィールドのみを保存しますが、2番目、3番目、4番目などは保存しません...

助けて ........

4

4 に答える 4

0

クエリは次のようになります

$sql=mysql_query("INSERT INTO test (number, type) VALUES ('$_POST['type']','$author')");

ビューファイルでは、次のようになります。

 <input type = "text" name="Author" />
于 2012-09-26T06:23:09.977 に答える
0

print_r($_REQUEST)リクエストでデータとして取得するすべてのものを実行して確認することをお勧めします。さらに、要素をブラウザに正しく追加したかどうかを確認するために、firebug / chrome inspect ツールをチェックインすることもお勧めします。コードを見ると、正しく実行されていないようです。ここに欠けているのは ID - Auther です。ID で要素を取得すると、それ自体は失敗します。さらに、その修正/パッチで同じことを実行しようとしましたが、実行して出力を確認することはできませんでした。そのため、リクエストで取得した正確な値を確認してください。フォームの送信が単一のデータのみをサーバーに返す場合、応答/目的の結果を取得するのは常に困難です。

于 2012-09-26T06:38:13.420 に答える
0

これを試して、

if(isset($_POST['submit']))
{
$authors = $_POST['Author'];
$valuesToInsert =   1;
for($i=0;$i<count($authors);$i++) 
{   $number = $i +1;
    $valuesToInsert .=   "($number,$authors[$i]),";

}
$valuesToInsert =   trim($valuesToInsert,',');
$sql=mysql_query("INSERT INTO test (number, type) VALUES ".$valuesToInsert);    
    if (!$sql){
       die('Error: ' . mysql_error());
    }
//endforeach;

}


?>
于 2012-09-26T06:38:32.200 に答える
0

同じ名前の 2 つの別々の配列を送信しようとしています。毎回作者が追加されると、

$_POST['Author'][1] = 'foo';

それ以外の

$_POST['Author'][1] = 'foo';
$_POST['Author'][2] = 'bar';

これはあなたが期待しているものです。入力にすでにインデックスがあるようにする必要があります。つまり、

<input type = "text" name="Author[1]" />
<input type = "text" name="Author[2]" />

など。 counter3 JS 変数を使用して入力インデックスを段階的に増やし、次のようなことを行うことができます。

newText.name = "Author[" + counter3 + "]";
于 2012-09-26T07:10:28.517 に答える