【问题标题】:PHP 3 dropdown menu populated 3times by a foreach loopPHP 3 下拉菜单由 foreach 循环填充 3 次
【发布时间】:2018-02-06 17:41:21
【问题描述】:

我来自德国,我的英语并不完美,但我会尽力解释我遇到的问题。

我有一个 html 表,我在 foreach 循环中创建了每个 tablerow 和他的 tabledata。我在表中有两个下拉菜单,每个下拉菜单都填充了另一个 foreach 循环。我的问题是:我尝试在提交表单后回显下拉菜单中的所有值,我只能正确显示产品编号和产品名称,但下拉菜单中的值未正确显示。

代码如下:

foreach ($produktdaten['products'] as $output){
echo '<tr>';
        echo '<td><input type="hidden" name="opproduktnummer" value="' . $output['id'] . '">' . $output['id'] . '</td>';
        echo '<td><input type="hidden" name="opproduktname" value="' . $output['name'] . '">' . $output['name'] . '</td>';
        echo '<td><select name="opproduktccp">';
        foreach ($op_options['ccp'] as $opccp) {
          echo '<option>'.$opccp.'</option>';
        }
        echo '</select></td>';
        echo '<td><select name="opproduktlevel">';
          foreach ($levelarray["mlevels"] as $key){
            echo "<option>" . $key . "</option>";
          }
        echo '</select></td>';
        echo '<td><input type="submit" name="save_data" class="btn btn-outline-primary" value="Speichern"></td>';
        echo '</tr>';
        }
            if( isset( $_POST['save_data'] ) ){
      echo $keys;
      echo "<br>";
      echo $values;
}

在我的第一个数组 $produktdaten['products'] 中,我有三个具有不同值的产品。我只需要 produktid 和他的名字。这就是我选择 $output['id'] 和 $output['name'] 的原因。这是有效的。 THIS IS THE TABLE right now

每个下拉菜单都正确显示了每行的选项。 正如我所说,当我提交表单时,我需要获取用户选择的每个选项。但我得到的结果只有每行下拉菜单中的最后一个选项。 THIS IS an EXAMPLE WHEN WE CHOOSE something

当我提交我得到这个-> enter image description here

我需要用户在下拉菜单中选择的每个 productid 和他的名字的正确值。请帮助我,因为我现在尝试不同的方法超过两周。我是 PHP 新手(使用它 3 个月)。 我希望这里有人可以帮助我,因为我从这个论坛学到了很多东西。来自德国的 Greez。

【问题讨论】:

  • 你能告诉我们数组的结构吗?使用var_dump()print_r()
  • Array ( [1] => digiempire_advanced [2] => digiempire_pro [3] => digiempire_basic ) 这是来自 print_r($op_options['ccp']);另一个 $produktdaten['products'] 太长,无法评论。感谢您的快速答复

标签: php html


【解决方案1】:

您将获得最新的值,因为您使用的每个选择都具有相同的名称。

即。你有三个“opproduktccp”和三个“opproduktlevel”,所以表单发送的最新值会“覆盖”之前的值。

如果您想要单独的每个值,您必须:
A) 以不同的方式命名选择,即“opproduktlevel1”、“opproduktlevel2”等。

B)使它们成为一个数组,即。 “opproduktlevel[]”,或者最好将它们编号为“opproduktlevel[1]”等

B) 如果您有不同数量的可能产品(例如,您不知道是 2 个还是 4 个),您想要的解决方案就是您想要的解决方案。

然后,您可以使用 B 获取数组并循环遍历每个数组。 或者更好的是,如果你对它们进行了编号,你可以通过 opproduktlevel 进行 foreach 并获取键值并将其用作 opproduktccp 的键,反之亦然。

因此,假设您的 $output['id'] 是唯一的,您的代码可能类似于:

        foreach ($produktdaten['products'] as $output){
    echo '<tr>';
            echo '<td><input type="hidden" name="opproduktnummer" value="' . $output['id'] . '">' . $output['id'] . '</td>';
            echo '<td><input type="hidden" name="opproduktname" value="' . $output['name'] . '">' . $output['name'] . '</td>';
            echo '<td><select name="opproduktccp['.$output['id'].']">';
            foreach ($op_options['ccp'] as $opccp) {
              echo '<option>'.$opccp.'</option>';
            }
            echo '</select></td>';
            echo '<td><select name="opproduktlevel['.$output['id'].']">';
              foreach ($levelarray["mlevels"] as $key){
                echo "<option>" . $key . "</option>";
              }
        echo '</select></td>';
        echo '<td><input type="submit" name="save_data" class="btn btn-outline-primary" value="Speichern"></td>';
        echo '</tr>';
        }
            if( isset( $_POST['save_data'] ) ){
      echo $keys;
      echo "<br>";
      echo $values;
}

提交表单后,您应该有两个包含用户选择的数组,您可以循环访问。

【讨论】:

  • 非常感谢您的快速响应。我现在将尝试您的解决方案。我用你的代码替换我的代码,我得到了两个数组。我现在将尝试对这两个进行 var_dump,然后我将循环遍历...我给出我的反馈
  • 嗨,你能给我举个例子,现在如何通过数组进行 foreach。
  • 我不再需要它了。对不起这个问题。如果主题解决了,可以关闭这个帖子。再次感谢您的帮助!
猜你喜欢
  • 2013-10-06
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多