0

我正在使用 php 从文本框中获取所有值,在循环中我正在获取值。

在循环内我也有插入语句和计数。

流程是:我将从下拉列表中选择值,当我从下拉列表中选择数字时,将创建相应数量的文本框。

例如:- 我从下拉列表中选择了数字 3。所以它将创建3个文本框。

现在我将在这 3 个文本框中输入数据并单击提交。当我单击提交时,只有最后一个文本框的值被插入到数据库中。

即当我选择 3 并将数据输入到 3 文本框时,它仅插入第三个文本框值 3 次,而不是插入第一个、第二个和第三个值。

我该如何解决它..?

这是我用过的代码..

php:

<?php
  mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
  mysql_select_db("theaterdb") or die(mysql_error());
  for ($i=0; $i < $_POST["range"] ; $i++)
  {
    $query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname]','$_POST[language]') ") or die(mysql_error());
  }
?>

range 是我在下拉列表中选择的值。

javascript代码:

for(i = 0; i < param; i += 1) {
       target.innerHTML +='</br>';
       target.innerHTML +='New Movie '+i+'  ';
       target.innerHTML += '<input type="text" name="Fname">';
}

这是动态生成文本框

4

5 回答 5

1

尝试

<?php
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
mysql_select_db("theaterdb") or die(mysql_error());
for ($i=0; $i <= count($_POST["Fname"]); $i++)
{
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname][$i]','$_POST[language][$i]') ") or die(mysql_error());
}
?>
于 2013-08-30T09:50:17.927 回答
1

您正在使用 $_POST["Fname"] 进行插入。因此,您应该在 for 语句中使用 count($_POST["Fname"])

于 2013-08-30T09:52:22.057 回答
1

问题是您正在创建与先前创建的名称相同的新输入,php 的 $_POST[] 继续输入名称以获取 arround 这您将需要创建具有唯一名称的输入,例如

for(i = 0; i < param; i += 1) {

       target.innerHTML +='</br>';
       target.innerHTML +='New Movie '+i+'  ';
       target.innerHTML += '<input type="text" name="Fname_' + i + '">';
}

<?php
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
mysql_select_db("theaterdb") or die(mysql_error());
for ($i=0; $i < $_POST["range"] ; $i++)
{
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('" . $_POST['Fname_' . $i] . "','" . $_POST['language'] . "') ") or die(mysql_error());
}
?>

但是,这只会分叉添加一次输入,或者您将再次创建具有相同名称的输入,为了解决这个问题,我建议将总计数存储在一个名为 count<input type="hidden" value="0" name="count" />的隐藏输入中,并将名称基于该计数

var count = $('input[name=count]');

for(i = 0+count; i < param+count; i += 1) {

       target.innerHTML +='</br>';
       target.innerHTML +='New Movie '+i+'  ';
       target.innerHTML += '<input type="text" name="Fname">';
}

<?php
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
mysql_select_db("theaterdb") or die(mysql_error());
for ($i=0; $i < $_POST["range"] ; $i++)
{
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('" . $_POST['Fname_' . $i] . "','" . $_POST['language'] . "') ") or die(mysql_error());
}
?>

我没有测试过这段代码,所以你可能需要稍微修改一下才能让它工作,但这个概念就在那里

于 2013-08-30T09:58:19.190 回答
1

将您的代码更改为:

for(i = 0; i < param; i += 1) {
  target.innerHTML +='</br>';
  target.innerHTML +='New Movie '+i+'  ';
  target.innerHTML += '<input type="text" name="Fname[]">';
}

php 自动将 Fname[] 转换为 array() ,因此您可以通过以下方式遍历电影名称:

<?php
  mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
  mysql_select_db("theaterdb") or die(mysql_error());
  for ($i=0; $i < $_POST["range"] ; $i++) {
    $query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('{$_POST[Fname][i]}','{$_POST[language]}') ") or die(mysql_error());
  }
?>
于 2013-08-30T10:03:01.507 回答
1

当您将表单发布到服务器时,表单中的所有输入都将以其名称属性发送到服务器。在您的情况下,您已将输入名称指定为“Fname”。因此,只有一个名为“Fname”的输入被发送到服务器。所以你只得到一个帖子输入,即 $_SERVER["Fname"]。

只需将您的javascript代码更改为

for(i = 0; i < param; i += 1) {

       target.innerHTML +='</br>';
       target.innerHTML +='New Movie '+i+'  ';
       target.innerHTML += '<input type="text" name="Fname[]">';
}

使用 Fname[] 而不是 Fname。现在您正在发布 Fname 数组。所以你会在 $_SERVER["Fname"] 中得到数组。在这里,您将收到数组中的所有 Fname 输入字段。因此,将您的 php 代码更改为

<?php
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error());
mysql_select_db("theaterdb") or die(mysql_error());
for ($i=0; $i < $_POST["range"] ; $i++)
{
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname][$i]','$_POST[language]') ") or die(mysql_error());
}
?>

这将解决您的问题。

于 2013-08-30T10:09:08.257 回答