繁体   English   中英

当单击按钮时,while循环仅显示数据库中的最后一行[以显示模式对话框]

[英]while loop shows only the last row in database when click at button[to display modal dialog]

我在模式对话框中遇到问题。 当用户单击“文件”时,将出现模式对话框,并显示从数据库获取的数据。

<?php echo '<table>'; ?>
              <tr>
                <th>
                Name
              </th>
              <th>
                File
              </th>
            </tr>

$query = "SELECT * FROM table";
              $result = mysqli_query($conn, $query);

              if (mysqli_num_rows($result) != 0) {
                while($row = mysqli_fetch_array($result)) {
                  $stu_file=$row['file_upload'];
                  $ins_file=$row['files_uploads'];
                  $name = $row['name'];
                  echo "<tr>";
                  echo "<td>" .$name. "</td>";
                  echo "<td><a href='#' data-toggle='modal' data-target='#myModal'>File</a></td>";//code this

                  echo "</tr>";
                }
             }else{
                echo "No data has been done yet!!";
             }
             ?>
              <!-- Modal -->
        <div class="modal fade" id="myModal" role="dialog">
          <div class="modal-dialog">

            <!-- Modal content-->
            <div class="modal-content">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">Student File</h4>
              </div>
              <div class="modal-body">
                 <?php echo"<pre>".$stu_file."</pre>"?>
              </div>
              <div class="modal-header">
                <h4 class="modal-title">Instructor File</h4>
              </div>
              <div class="modal-body">
                 <?php echo"<pre>".$ins_file."</pre>"?>
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
              </div>
            </div>

          </div>
        </div>
        <!-- End Modal-->

如上面的代码所示,当我单击文件时,将显示模式对话框,但$ stu_file将仅显示数据库的最后一行。 当我在while循环内移动模式对话框时,它仅显示数据库的第一行。 请帮助解决此问题。

循环的每次迭代都会覆盖变量$stu_file$ins_file 这样,当您到达循环的结尾并打印模式对话框时,这些变量的值就等于循环中的最后一行。 此外,您只有一个模式对话,因此您的方法在这里不起作用。

取而代之的是,将来自数据库的数据作为JSON对象打印在<script>标记中,并使用javascript填充必要信息的方式对话框,可能会更容易。

例如,您可以使用以下方式打印出JSON ...

$data = [];
while($row = mysqli_fetch_array($result)) {
    $data[] = $row;
}
echo "<script> var myData = " . json_encode($data) . "; </script>";

现在,您还可以使用data-id属性填充链接,以对应数据库中给定的id或PK ,例如echo "<a href='#' data-toggle='modal' data-target='#myModal' data-id='{$row['id']}'>File</a>" ,这样您就可以在模态的.on('show.bs.modal')回调中使用它来加载JSON数组中的适当数据。

有关如何使用模式回调的信息,请参阅引导文档 应该是...

$('#myModal').on('show.bs.modal', function (event) {
  var button = $(event.relatedTarget) // Button that triggered the modal
  var dataId = button.data('id') // Extract info from data-* attributes
  // Now you can get the data form your JSON object
  var info = myData[dataId]; // or however you set it up
  var modal = $(this);
  modal.find('.modal-title').text('New message to ' + info);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM