使用while循环将MySQL结果分成Div

时间:2013-06-22 15:06:59

标签: php javascript jquery mysql

刚开始使用PHP来支持我。

结果我正在努力实现:

我有一张YouTube网址和MetaData的表格。 试图建立这个:

<div class="slide">
    <iframe></iframe>
    <iframe></iframe>
</div>
<div class="slide">
    <iframe></iframe>
    <iframe></iframe>
</div>

每张幻灯片两个视频,然后我将使用Deck.js对结果进行分页。

我怀疑我的方式完全是错误的,而不是在programmin g逻辑上经历过的;

while($data = mysql_fetch_array($result)) {
    for ($counter = 1; $counter<=2; $counter++) {
        echo "<div class=\"slide\">";

        echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
        echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";

        /* If Video 1, increment counter for 2nd video */
        if ($counter == 1) {
            $counter++;
        }
        /* If Video 2, close div and reset counter */
        else if ($counter == 2) {
            echo "</div>";
            $counter = 1;
        }
        /* If error break out */
        else {
            echo "</div>";
            break;
        }
    }
}

基本上尝试嵌套循环来跟踪每个div有多少视频,并在div有两个时开始一个新视频。

我尝试了几种不同的方式,这是最新的方式。结果:

<div class="slide">
    <iframe></iframe>
<div class="slide>
    <iframe></iframe>

现在点击空白墙,不知道下一步该尝试什么。愿意使用/学习任何方法来完成结果,只是不知道在这一点上去哪里。

干杯。

5 个答案:

答案 0 :(得分:0)

将<{1}} 放在<div>循环之前(仍位于for循环内)和while 之后 </div>循环

答案 1 :(得分:0)

while循环中,您只检索一行,但随后您将使用嵌套循环对其进行两次迭代。取消内部循环,只需使用触发器变量来跟踪左右。我想这会做你想要的:

$left=true;  // track whether we're emitting HTML for left or right video

while($data = mysql_fetch_array($result)) {
  if ($left) {
    echo "<div class=\"slide\">";
    echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
  }
  echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
  if (!$left) {
    echo "</div>";
  }
  $left = !$left; // invert $left to indicate we're emitting the right iFrame
}

// end of loop. If we had an odd number of
// videos, tidy up the HTML
if (!$left) {
    echo "</div>";
}    

答案 2 :(得分:0)

您可以使用%运算符(模数)一起删除第二个循环。这个想法是a%b === 0然后数字a被b整除。使用它,您可以轻松检查偶数或奇数或每第N行。

$k = 1;
echo "<div class=\"slide\">";

while($data = mysql_fetch_array($result)) { // you should really change to mysqli or PDO

    if($k % 3 === 0){
        echo "</div>";
        echo "<div class=\"slide\">";
    }

        echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";
        echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";

    $k++;
}
echo "</div>";

答案 3 :(得分:0)

PHPFiddle

<?php
  $x = 10;
  $counter = 0;
  while($x > 0)
  {
      if($counter != 0 && $counter % 2 == 0)
      {
          echo "ENDOFSLIDE</br>";
      } 
     if($counter == 0 || $counter % 2 == 0)
     {
       echo "SLIDE</br>";
     }
      echo "iframe => $x </br>";


      $x--;
      $counter++;
  }
  echo "ENDOFSLIDE";
?>

答案 4 :(得分:0)

它不起作用,因为for循环位于SQL数据的fetch循环中。 for循环的第二次迭代没有新的SQL行。更好的解决方案是捕获标识两个视频(标题)的公共列,并在该值发生变化时生成新的div。尝试这样的东西,它将适用于具有相同标题的任意数量的SQL行。如果SQL查询没有返回任何行,并且仅使用一个URL处理标题的可能性,这也将给出正确的结果 - 如果你只是翻转并最终得到错误标题的URL,这可能会变得很难看。当然,与当前解决方案一样,您的SQL查询必须是ORDER BY VIDEO_TITLE,因此行是相邻的。我没有运行它,但应该关闭。

$lastTitle = "";
$n = 0;         //count SQL rows processed
while($data = mysql_fetch_array($result)) {
    // See if the title changed from last
    if( $data['VIDEO_TITLE'] != $lastTitle ) {
        // if we processed any rows, must end the current div before starting a new one
        if( $n > 0 )        
          echo "</div>";

        echo "<div class=\"slide\">";
        echo "<h3>" . $data['VIDEO_TITLE'] . "</h3>";       
        //save the title as last title      
        $lastTitle = $data['VIDEO_TITLE'];  
    }

    $n++;   //count the SQL row
     echo "<iframe width=\"560\" height=\"315\" src=\"" . $data['VIDEO_URL'] . "\" frameborder=\"0\" allowfullscreen></iframe>";
}   
if( $n > 0 )
    echo "</div>";