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;

}
}

?>

但问题是数据没有正确存储在数据库中......

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

帮我 ........

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

您正在尝试提交 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 回答
0

只是会建议做一个print_r($_REQUEST)并检查你在请求中得到的所有数据。Plus 还希望您检查 firebug / chrome 检查工具,以检查您是否将元素正确添加到浏览器。因为查看代码,它似乎没有正确运行。这里缺少的一件事是 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 回答