MySQL нәтижелерін Divs-ге бөлу кезінде пайдалану

PHP-мен тек қана менімен бірге басталуы керек.

Нәтижелерім:

Менде YouTube URL және MetaData кестелері бар. Бұны жасамаңыз:

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

Әрбір слайдтағы екі видео, содан кейін Deck.js. арқылы нәтиже арқылы баяу жүремін.

Мен бұл туралы толықтай дұрыс емес жолмен жүремін деп күдіктенемін, бағдарлама логикасындағы тәжірибе емес;

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

        echo "

" . $data['VIDEO_TITLE'] . "

";
        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;
        }
    }
}

Basically trying to nest loops to keep track of how many videos per div and start a new one when a div has two.

I've tried a few different ways, this being the latest. Results in:

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

Hit the blank wall now, not sure what to try next. Willing to use/learn any method to accomplish the results, just not sure where to go at this point.

Cheers.

0
Сіздің сұрағыңыз қандай?
қосылды автор user1864610, көзі
Мен HTML-ді үстіңгі жағынан HTML-ге дейін жасауға тырысамын. Оны орындау жолын іздейтін болсам, PHP сценарийі менің сәтсіздігім.
қосылды автор HandsomeRob, көзі
Мен HTML-ді үстіңгі жағынан HTML-ге дейін жасауға тырысамын. Оны орындау жолын іздейтін болсам, PHP сценарийі менің сәтсіздігім.
қосылды автор HandsomeRob, көзі

10 жауаптар

Put the echo <div> before the for loop (still inside the while loop) and the </div> after the for loop

0
қосылды

Put the echo <div> before the for loop (still inside the while loop) and the </div> after the for loop

0
қосылды

Екінші циклды% operator (модуль) арқылы біріктіруге болады. Идея мынада, бұл% b === 0 болса, онда a саны b біркелкі бөлінеді. Оны пайдаланып, сіз біркелкі немесе тақ немесе әр Nth жолында оңай тексере аласыз.

$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 "

" . $data['VIDEO_TITLE'] . "

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

    $k++;
}
echo "</div>";
0
қосылды
Талғампаз, рахмет.
қосылды автор HandsomeRob, көзі

Екінші циклды% operator (модуль) арқылы біріктіруге болады. Идея мынада, бұл% b === 0 болса, онда a саны b біркелкі бөлінеді. Оны пайдаланып, сіз біркелкі немесе тақ немесе әр Nth жолында оңай тексере аласыз.

$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 "

" . $data['VIDEO_TITLE'] . "

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

    $k++;
}
echo "</div>";
0
қосылды
Талғампаз, рахмет.
қосылды автор HandsomeRob, көзі

PHPFiddle

<?php
  $x = 10;
  $counter = 0;
  while($x > 0)
  {
      if($counter != 0 && $counter % 2 == 0)
      {
          echo "ENDOFSLIDE
"; } if($counter == 0 || $counter % 2 == 0) { echo "SLIDE
"; } echo "iframe => $x
"; $x--; $counter++; } echo "ENDOFSLIDE"; ?>
0
қосылды

PHPFiddle

<?php
  $x = 10;
  $counter = 0;
  while($x > 0)
  {
      if($counter != 0 && $counter % 2 == 0)
      {
          echo "ENDOFSLIDE
"; } if($counter == 0 || $counter % 2 == 0) { echo "SLIDE
"; } echo "iframe => $x
"; $x--; $counter++; } echo "ENDOFSLIDE"; ?>
0
қосылды

Бұл жұмыс істемейді, себебі SQL үшін деректердің циклында fetch циклі ішінде болады. Екінші айнымалының циклінің жаңа 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 "

" . $data['VIDEO_TITLE'] . "

";       
        //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>";
0
қосылды

Бұл жұмыс істемейді, себебі SQL үшін деректердің циклында fetch циклі ішінде болады. Екінші айнымалының циклінің жаңа 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 "

" . $data['VIDEO_TITLE'] . "

";       
        //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>";
0
қосылды

Сіздің while циклында сіз бір ғана жолды шығарасыз, бірақ содан кейін сіз оны қайталанған циклмен екі рет қайталаңыз. Ішкі циклды өткізбеңіз және солға және оңға қадағалау үшін flip-flop айнымалы мәнін қолданыңыз. Менің ойымша, бұл сізге қажет:

$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 "

" . $data['VIDEO_TITLE'] . "

";
  }
  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>";
}    
0
қосылды

Сіздің while циклында сіз бір ғана жолды шығарасыз, бірақ содан кейін сіз оны қайталанған циклмен екі рет қайталаңыз. Ішкі циклды өткізбеңіз және солға және оңға қадағалау үшін flip-flop айнымалы мәнін қолданыңыз. Менің ойымша, бұл сізге қажет:

$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 "

" . $data['VIDEO_TITLE'] . "

";
  }
  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>";
}    
0
қосылды