【问题标题】:Presentation issue when displaying dynamic data using PHP inside a Bootstrap Carousel在 Bootstrap Carousel 中使用 PHP 显示动态数据时的演示问题
【发布时间】:2020-04-24 01:34:40
【问题描述】:

我正在为使用 PHP 从数据库显示的网站主页创建动态事件日历。我还使用 Bootstrap 框架(版本 4.4.1)来构建一个轮播,每个轮播项目一次显示 3 个即将发生的事件。

当从数据库中显示多个事件时,我的问题就出现了。检索到的数据是垂直堆叠的,而不是水平堆叠的。但是,如果我在轮播中使用 HTML 对三个“事件”进行硬编码,则这些事件会以水平方式正确格式化。

我尝试了多种方法,但仍在努力寻找解决方案,因此我将不胜感激。

HTML/PHP:

   <!--CAROUSEL TEST --> 
   <!--Events panel-->
    <!-- Grid row-->
    <div class="row">

        <div id="eventsTitle" align="center" class="col-md-12">

              <h1>Events</h1>       

          </div>
    </div>    

<div class="container">
<div class="row">           
<div class="col-md-12">

<div id='carouselExampleControls' class='carousel slide' data-ride='carousel'>
<div class='carousel-inner'>
<div class='carousel-item active'>
  <div class='carousel-caption'>

    <!--Fetch and display events from database -->          
    <?php

    $query = "SELECT * FROM events ORDER BY eventDate LIMIT 3;";

        $result = mysqli_query($conn, $query);

        if (mysqli_num_rows($result) > 0) {

            while ($row = mysqli_fetch_assoc($result)) {

                $event = $row["eventName"];
                $date = $row["eventDate"];
                $time = $row["eventTime"];
                $loc = $row["eventPlace"];  
                $desc = $row["eventDesc"]; 

        echo " 
        <div class='row'>

        <div id='eventCard' align='center' class='col-md-4'>   

              <hr>

              <h1>$event</h1>
              <br>
              <p><i class='far fa-calendar-times'></i> $date
              <br>
              <i class='fas fa-map-marker-alt'></i> $loc
              <br>
              <i class='far fa-clock'></i> $time
              <br>
              <br>
              <a href='events.php'>More Info </a>
              </p>
              <hr>

          </div>

  </div>

      ";

             }
        }

    ?>

</div> <!--end CAROUSEL CAPTION -->


</div>  <!-- end CAROUSEL ACTIVE -->  

    <!-- SECOND CAROUSEL SLIDE --> 
    <div class='carousel-item'>
    <div class='carousel-caption'>

      <div class='row'>

          <div id='eventCard' align='center' class='col-md-4'>     
          </div>

          <div id='eventCard' align='center' class='col-md-4'>   
          </div>

          <div id='eventCard' align='center' class='col-md-4'>      
          </div>

  </div>


  </div>
</div>


  </div> <!--end CAROUSEL INNER -->


  <a class='carousel-control-prev' href='#carouselExampleControls' role='button' data-     slide='prev'>
   <span class='carousel-control-prev-icon' aria-hidden='true'></span>
   <span class='sr-only'>Previous</span>
  </a>
<a class='carousel-control-next' href='#carouselExampleControls' role='button' data-slide='next'>
   <span class='carousel-control-next-icon' aria-hidden='true'></span>
   <span class='sr-only'>Next</span>
  </a>
 </div> <!--end CAROUSEL CONTROLS -->

              <div id="eventButton" align="right" class="col-md-12">   

                <a class='button' href="events.php"><i class="fas fa-chevron-right"></i> MORE EVENTS</a>

            </div>

    </div> <!--end CAROUSEL COLS -->  
</div> <!--end CAROUSEL ROWS -->
</div> <!--end CAROUSEL CONTAINER-->




<!-- // end CAROUSEL TEST -->  

CSS:

#eventCard  {

padding: 3em;

}

/*TEST CAROUSEL */

body{
background-color: #fff;
}
.carousel{
margin-top: 0px;
}
.carousel-inner{
height: 350px;
}
.carousel-caption{
color: #242424;
top: 50%;
}

事件数据的 HTML 硬编码所需结果的图像示例:

使用 PHP 从数据库中检索数据时的结果图像示例:

【问题讨论】:

    标签: php html css bootstrap-4


    【解决方案1】:

    在您的 PHP 循环中,您在其中添加了 &lt;div class='row'&gt;,因此它将添加 3 次,因此它出现在彼此下方。不妨试试下面的。

    <div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
    <div class="carousel-inner">
        <div class="carousel-item active">
        <!--Fetch and display events from database -->          
    <?php
    
    $query = "SELECT * FROM events ORDER BY eventDate LIMIT 3;";
    
        $result = mysqli_query($conn, $query);
    
        if (mysqli_num_rows($result) > 0) {
    
            while ($row = mysqli_fetch_assoc($result)) {
    
                $event = $row["eventName"];
                $date = $row["eventDate"];
                $time = $row["eventTime"];
                $loc = $row["eventPlace"];  
                $desc = $row["eventDesc"]; 
    
                                echo "<div align='center' class='col-md-4'>   
                                    <hr>
    
                                    <h1>$event</h1>
                                    <br>
                                    <p><i class='far fa-calendar-times'></i> $date
                                    <br>
                                    <i class='fas fa-map-marker-alt'></i> $loc
                                    <br>
                                    <i class='far fa-clock'></i> $time
                                    <br>
                                    <br>
                                    <a href='events.php'>More Info </a>
                                    </p>
                                    <hr>
                                </div>";
             }
        }
    
    ?>
    </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
    

    【讨论】:

    • 谢谢,我已经编辑了我的代码以适应您的答案,但是它仍然产生了类似的结果。我还尝试将
      移到循环之外,但没有成功。
    • 我已经在单独的评论中添加了修改后的源代码
    • 我在上面修改了我的代码。请尝试一下。我将 getbootstrap.com/docs/4.0/components/carousel 用于初始轮播并添加到您的循环中。
    【解决方案2】:

    @PHPology

    修改源代码:

    <div class="container">
    <div class="row">           
    <div class="col-md-12">
    
    <div id='carouselExampleControls' class='carousel slide' data-ride='carousel'>
    <div class='carousel-inner'>
    <div class='carousel-item active'>
      <div class='carousel-caption'>
    
        <div class='row'>
           <div id='eventCard' align='center' class='col-md-4'>
          <!--Fetch and display events from database -->          
        <?php
    
        $query = "SELECT * FROM events ORDER BY eventDate LIMIT 3;";
    
            $result = mysqli_query($conn, $query);
    
            if (mysqli_num_rows($result) > 0) {
    
                while ($row = mysqli_fetch_assoc($result)) {
    
                    $event = $row["eventName"];
                    $date = $row["eventDate"];
                    $time = $row["eventTime"];
                    $loc = $row["eventPlace"];  
                    $desc = $row["eventDesc"]; 
    
        echo " 
    
                  <hr>
    
                  <h1>$event</h1>
                  <br>
                  <p><i class='far fa-calendar-times'></i> $date
                  <br>
                  <i class='fas fa-map-marker-alt'></i> $loc
                  <br>
                  <i class='far fa-clock'></i> $time
                  <br>
                  <br>
                  <a href='events.php'>More Info </a>
                  </p>
                  <hr>
    
       ";
    
                 }
            }
    
        ?>
    
              </div>
    
      </div>
    

    我已经尝试过您建议的方式和我在此评论中发布的方式,但数据仍然垂直堆叠。

    【讨论】:

      【解决方案3】:

      把html代码放到php echo之外。有时这也发生在我身上。出于某种原因,这有效。 试试这样

      CSS 样式

      .carousel-caption .row{
          display: inline-flex;
          width: 200px;
      }
      

      PHP 循环

         <?php 
              $query = "SELECT * FROM events ORDER BY eventDate LIMIT 3;";
              $result = mysqli_query($conn, $query);
              if (mysqli_num_rows($result) > 0) {
                  while ($row = mysqli_fetch_assoc($result)) {
                  $event = $row["eventName"];
                  $date = $row["eventDate"];
                  $time = $row["eventTime"];
                  $loc = $row["eventPlace"];  
                  $desc = $row["eventDesc"]; 
              ?>
                  <div class='row'>
                      <div id='eventCard' align='center'>   
                          <hr>
                          <h1><?php echo $event?></h1>
                          <br>
                          <p>
                              <i class='far fa-calendar-times'></i> <?php echo $date; ?>
                              <br>
                              <i class='fas fa-map-marker-alt'></i> <?php echo $loc; ?>
                              <br>
                              <i class='far fa-clock'></i><?php echo $time; ?>
                              <br>
                              <br>
                              <a href='events.php'>More Info</a>
                          </p>
                          <hr>
                      </div>
                  </div>
           <?php
                  }
              }
          ?>
      

      【讨论】:

      • 很遗憾没有!但我仍在研究解决方案。感谢您的回复。
      • @cmc1993 我已经更新了我上面的答案,你可以在你的代码中添加css样式并删除 class='col-md-4' form eventCard div 并试一试..
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签