【问题标题】:Trouble passing multiple html values through a php loop无法通过 php 循环传递多个 html 值
【发布时间】:2016-11-22 02:18:37
【问题描述】:

我正在处理一项任务,该任务要求我将歌曲标题和歌曲长度发送到另一个 php 文件,然后将值保存到数据库中。索引页面输出所有不同的歌曲标题和歌曲长度,并带有点击按钮。当我单击其中一个按钮时,它会正确发送长度值,但会发送标题循环中的最后一个值。请帮忙!

<form action="insertFavorite.php" method="post">
<div class="container">
    <!-- Top Navigation -->
    <div class="component">
        <table>

            <thead>
            <tr>
                <th><?php echo "Song Name"; ?></th>
                <th><?php echo "Duration"; ?></th>
            </tr>

            <?php foreach($album->song as $songs){
                echo '<tr><td>'.$songs["title"]."</td><td>" .$songs["length"]."</td> <td>".'<input length="30" width="30" type="image" src="add.png" name="length" alt="submit" value="'.$songs["length"].'">'."</td> <td>".'<input type="hidden" name="title" alt="submit" value="'.$songs["title"].'">'.'</td> </tr>';}?>

            </thead>
            <tbody>
            </tbody>

        </table>

    </div><!-- /container -->
    </form>

【问题讨论】:

  • 因为您将拥有 X 个同名的隐藏输入
  • 但名称为“length”的第一个输入也是如此,它会发送被点击的正确变量
  • 因为它的按钮被点击了
  • 那么我将如何发送这两个值,因为每个输入只能有一个值
  • 分隔然后拆分可能

标签: php html xml


【解决方案1】:

虽然可能会有很多歌曲,但您一次只能提交一首。然后你可以通过在循环中添加表单标签来创建很多表单。像这样——

            <?php 
            foreach($album->song as $songs){
                echo '<form action="insertFavorite.php" method="post">';
                echo '<tr><td>'.$songs["title"]."</td><td>" .$songs["length"]."</td> <td>".'<input length="30" width="30" type="image" src="add.png" name="length" alt="submit" value="'.$songs["length"].'">'."</td> <td>".'<input type="hidden" name="title" alt="submit" value="'.$songs["title"].'">'.'</td> </tr>';
                echo '</form>';
            }
        ?>

或者您可以在歌曲旁边添加复选框,以便一次添加多个。

            <?php 
            echo '<form action="insertFavorite.php" method="post">';
            foreach($album->song as $songs){                    
                echo '<tr><td>'.$songs["title"]."</td><td>" .$songs["length"]."</td> <td>".'<input type="checkbox"  name="song_length[]" alt="song length" value="'.$songs["length"].'">'."</td> <td>".'<input type="hidden" name="song_title[]" alt="submit" value="'.$songs["title"].'">'.'</td> </tr>';                    
            }
            echo '<input length="30" width="30" type="image" src="add.png" alt="submit" >';
            echo '</form>';                
        ?> 

这将为您提供一系列歌曲名称及其长度。

【讨论】:

    【解决方案2】:

    我认为您要做的是发送多个字段,但数据库中只收到最后一个字段。 提交多个字段名称相同的字段时,最好使用数组作为名称 在您的代码中,在字段的 name 属性上添加一个数组表示法:

      <input type="hidden" name="title[]" alt="submit" value="'.$songs["title"].'">'.'</td> </tr>';}?>
    

    然后,当您提交此内容时,在您的后端 PHP 脚本中,这将作为一个数组获取。问题是您必须将提交/保存按钮移到循环之外,并且每次提交时都会发送所有数据。

    对此的另一种解决方案是改用 AJAX。当用户单击按钮时,您将使用与按钮相关的字段发送 POST 消息。 例如:假设我们使用普通按钮来代替

    (顺便说一下,为什么不使用 echo 来排除您的 PHP 脚本中的 html 元素

    <tr><td> <?= $songs["title"] ?></td><td> <?=$songs["length"] ?></td> <td> 
        <img length="30" width="30" src="add.png" name="length" alt="SAVE" value="<?=$songs["length"] ?>">
        </td> <td>
        <input type="hidden" name="title" alt="submit" value="<?=$songs["title"] ?>"> </td>
    </tr>
    

    这里我们将图片按钮替换为普通的提交。现在我们可以看到,在同一个TR下,我们将使用JQuery来遍历相关字段

    $(".add").click(function(){
         var title = $(this).closest('tr').find("input[name=title]").val();
    
         //insert your AJAX code here
    });
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多