【问题标题】:loop through x number of datalist dropdown in php循环通过 php 中的 x 个 datalist 下拉列表
【发布时间】:2023-03-03 10:32:01
【问题描述】:

我有一个 php 页面,其中包含从 sqlite 数据库文件 (comics.db) 填充的 3 个数据列表下拉列表。

我正在尝试使用 for 循环(我需要三个下拉菜单)来保存代码,但是当我单击“提交查询”时,表单操作“page.php”不会产生用户选择的三个输入,即字符 [ 1]、字符[2]和字符[3]。

我试过这条线的各种组合:

echo '<input list="characters" name="character[$x]">';

但我不断得到一个空白 page.php。我假设 _POST 变量没有存储 index.php 页面的三个输入?

我已经坚持了几天了,我尝试了会话变量,但除了使用 name=character1、2、3 等重复代码块三次之外,找不到其他有效的答案。 . 肯定有一个有效的循环/数组吗?

请帮忙!

我的 index.php 页面:

<html>
<body>

<?php
class MyDB extends SQLite3 {
    function __construct() {
        $this->open('comics.db');
    }
}
for ($x = 1;$x < 4;$x++) {
    $db = new MyDB();
    $sql = <<<EOF
      select character_name from characters group by character_name order by character_name asc;
EOF;
    $ret = $db->query($sql);
    echo '<form action="page.php" method="post">';
    echo '<label for="character">Character: </label>';
    echo '<input list="characters" name="character[$x]">';
    echo '<datalist id="characters">';
    while ($row = $ret->fetchArray(SQLITE3_ASSOC)) {
        unset($name);
        $name = $row['character_name'];
        echo '<option value=""></option>';
        echo '<option value="' . $name . '">' . $name . '</option>';
    }
    echo "</datalist>";
    $db->close();
}
echo '<input type="submit" name="submit" />';
echo '</form>';
?>

</body>
</html>

我的页面.php:

<html>
<body>

<?php

for($x = 1; $x < 4; $x++) {
  if(isset($_POST['character[$x]'])) {
    $character = $_POST['character[$x]'];
    echo "$character";
    }
  }
?>

</body>
</html>

【问题讨论】:

    标签: php arrays sqlite variables


    【解决方案1】:

    非常感谢您的帮助!

    我将 index.php 中的行修改为:

    echo '<input list="characters" name="character[]">';
    

    并将我的 page.php 更改为以下内容:

    <html>
    <body>
    
    <?php
    
    for ($x = 0; $x < count($_POST['character']); $x++)
    {
       echo $_POST['character'][$x];
    }
    
    ?>
    
    </body>
    </html>
    

    这给出了预期的结果。 下面的代码 sn -p 也给出了想要的结果

    foreach ($_POST['NAME'] as $value)
    {
        echo $value;
    }
    

    @DinoCoderSaurus - 非常感谢您提供的信息丰富的答案并为我指明了正确的方向!

    【讨论】:

    • 道歉 - 又打错了.... $_POST['NAME'] 应该是 $_POST['character'] 上面...
    【解决方案2】:

    page.php 会生成一个空白页面,因为 if(isset($_POST['character[$x]']))永远不会为真

    为其中一个输入元素选择“检查元素”以查看它们都说:

    <input list="characters" name="character[$x]">
    

    这里的字面意思是“$x”:

    echo '<input list="characters" name="character[$x]">';
    

    那是因为string is enclosed in single quotes,“$x”没有得到扩展。

    这个$_POST['character'] 将是一个列表,其中一个元素的键是“$x”; "$x" 是文字,与循环中的 $x 无关。如果您想查看任何结果,请将 $_POST['character[$x]'] 的出现次数更改为 $_POST['character']['$x']

    这可能不是您想要的结果。一个更简单的解决方案是让浏览器来做!如果你的输入元素是这样构建的

    echo '<input list="characters" name="character[]">';
    

    浏览器将发送$_POST['character'] 数组,您可以在page.php 中进行迭代。当然,您必须对 page.php 进行更改才能正确地遍历 $_POST['character'] 以显示所需的结果。

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多