【问题标题】:Loop inserting only last values循环仅插入最后一个值
【发布时间】:2013-08-30 09:46:24
【问题描述】:

我正在使用 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());
  }
?>

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

javascript代码:

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

这是动态生成文本框

【问题讨论】:

  • $_POST[Fname] 如果不声明常量Fname 会抛出错误。使用引号来访问以给定字符串作为键的值。 $_POST['Fname']$_POST["Fname"]

标签: php javascript jquery html mysql


【解决方案1】:

问题是您正在创建与先前创建的输入名称相同的新输入,php 的 $_POST[] 继续输入名称以解决此问题,您需要创建具有唯一名称的输入 像

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 &lt;input type="hidden" value="0" name="count" /&gt; 的隐藏输入中,并将名称基于该计数

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());
}
?>

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

【讨论】:

    【解决方案2】:

    试试

    <?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());
    }
    ?>
    

    【讨论】:

    • 缺少引号@$_POST[Fname]
    • 我不知道你能做到这一点,如果它比我的解决方案更优雅
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      将您的代码更改为:

      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());
        }
      ?>
      

      【讨论】:

        【解决方案5】:

        当您将表单发布到服务器时,表单中的所有输入都将以其名称属性发送到服务器。 在您的情况下,您已将输入名称指定为“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());
        }
        ?>
        

        这会解决你的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-16
          • 1970-01-01
          • 2018-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          相关资源
          最近更新 更多