如何存储多个表单字段的数据?

时间:2012-09-26 06:20:06

标签: php javascript

我有一个表单,用户可以根据需要增加或添加字段数。

字段正在成功添加.....

为此我使用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;

}
}

?>

但问题是数据无法正确存储在数据库中......

它只保存数据库中的第一个字段,但不保存第二个,第三个,第四个等等......

帮帮我........

4 个答案:

答案 0 :(得分:0)

您的查询应该是

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

并在您的视图文件中,它应该是

 <input type = "text" name="Author" />

答案 1 :(得分:0)

只是建议做一个print_r($_REQUEST)并查看你在请求中获得的所有数据。 另外,您还希望检查firebug / chrome检查工具,检查是否正确地将元素添加到浏览器中。因为查看代码,它似乎没有正确运行。 这里缺少的一件事就是ID - Auther,你通过id获取元素本身就失败了。 另外,还尝试使用该修复程序/补丁运行相同的程序,但无法检查输出。 因此,您希望检查您在请求中获得的确切值。如果表单提交只将单个数据传递回服务器,那么获取响应/所需结果总是很麻烦。

答案 2 :(得分: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;

}


?>

答案 3 :(得分: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 + "]";