【问题标题】:How to pass php variable outside of while loop within same page如何在同一页面内的while循环之外传递php变量
【发布时间】:2017-08-29 12:06:55
【问题描述】:

我遇到了关于在 PHP 循环之外传递 php 变量的小问题。我在同一页面中创建了表格和表单。显示第一个表,并出现表单中的通过编辑链接弹出对话框。单击编辑链接后,我想将动态 ID 传递给对话框。我的页面包含一个 php 表格和表单。

PHP/HTML 表格

<table>
    <th>ID</th>
    <th>Title</th>
    <th>Edit</th>
        <?php
            $query="select * from video order by id desc";
            $result=$con->query("SELECT * FROM video ORDER by id DESC") or die($con->error);
            while($row=$result->fetch_assoc()){
                $id=$row['id'];
                $heading=$row['heading'];
        ?>
    <tr>
        <td>
            <?php echo $id ?>
        </td>
        <td>
            <?php echo $heading ?>
        </td>
        <td>
            <a href="#modal2" id="pop_button">Edit</a>
        </td>
        </tr>
        <?php } ?>
</table>

在这个表之后,我想以这种形式显示数据

对话框中的 PHP 表单

<div class="remodal" data-remodal-id="modal2" role="dialog" aria-labelledby="modal2Title" aria-describedby="modal2Desc">
    <form action="" method="POST" enctype="multipart/form-data">
        <table>
        <tr>
            <th>Video ID</th>
            <td>
                <input type="number" value="<?php echo $id?>" name="id" readonly></input>
            </td>
        </tr>
        <tr>
            <th>Video Title</th>
            <td>
                <input type="text" value="<?php echo $heading?>" name="title"></input>
            </td>
        </tr>
        </table>    
    </form> 
</div>

我知道 while 循环无法连接到弹出对话框表单,所以我的代码只打印第一行的数据。如果我在 while 循环中包含整个代码,我的表结构就会变得一团糟。 在 while 循环之外传递 ID 有什么想法吗?我尝试使用全局变量方法,但它不起作用。也许我无法正确使用全局变量。谢谢

【问题讨论】:

  • 您是否尝试过第二个循环来制作所有弹出窗口?
  • 您是否创建了与您从选择中获得的记录数量一样多的模式?
  • 循环之后,你在循环中赋值的变量,当然只有 last 它们被赋值的值。但是你可以将这些数据放在一个 array 中,这样你就可以在你的 while 循环之后再次循环它。但是您还必须修改用于 HTML 元素的 id,因为 id 在 HTML 文档中必须是唯一的。
  • @FMashiro 是对的,尝试第二个循环。您可以使用第一个循环 array[$id] = $heading 创建一个数组,然后再遍历它。
  • @FMashiro 弹出窗口的第二个循环对我不起作用,因为第一个循环 ID 是主输出。在ID的基础上,它应该显示mysql数据。

标签: php global-variables


【解决方案1】:

在您的 while 循环中,将值存储到这样的数组中:

<?php
            $query="select * from video order by id desc";
            $result=$con->query("SELECT * FROM video ORDER by id DESC") or die($con->error);
            $array = [];            
            while($row=$result->fetch_assoc()){
                $id=$row['id'];
                $heading=$row['heading'];
                $array[$id] = $heading;

        ?>

在你的 html 表格中是这样的:

    <table>
            <tr>
                <th>Video ID</th>
                <th>Video Title</th>
                <?php foreach ($array as $key => $val){ ?>
                <td>
                    <input type="number" value="<?php echo $key?>" name="id" readonly></input>
                </td>
                <td>            
                    <input type="text" value="<?php echo $val?>" name="title"></input>
                </td>           
                <?php } ?>
            </tr>
  </table> 

【讨论】:

  • 感谢您的帮助@Nawin。但是您的代码一次显示所有行。事实上,我只想显示被点击的特定行。我的第一个代码仅显示最近的 mysql 行,我尝试使用您的代码,它显示了 mysql 表中的所有行。如何仅显示单击的特定行。如果单击 id 5,它应该只回显第 5 行的数据。我怎样才能使它成为可能?
猜你喜欢
  • 2012-06-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2019-08-13
  • 2015-05-02
  • 2014-01-17
相关资源
最近更新 更多