0

私と一緒にPHPを始めたばかりです。

私が達成しようとしている結果:

YouTube の URL とメタデータの表があります。これを構築しようとしています:

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

スライドごとに 2 つのビデオ。それから、Deck.js を使用して結果をページ分割します。

私はこれを完全に間違った方法で行っているのではないかと思います.プログラミングロジックの経験はありません.

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 に 2 つある場合は新しいループを開始しようとしています。

いくつかの方法を試しましたが、これが最新の方法です。結果:

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

次に何を試せばよいかわからないまま、今すぐ空白の壁にぶつかりましょう。結果を達成するためにあらゆる方法を使用/学習したいと考えていますが、現時点ではどこに行けばよいかわかりません。

乾杯。

4

5 に答える 5

0

あなたのwhileループでは、1行だけを取得していますが、ネストされたループで2回繰り返しています。内側のループをなくし、フリップフロップ変数を使用して左右を追跡します。私はこれがあなたが望むことをすると思います:

$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>";
}    
于 2013-06-22T15:26:03.927 に答える
0

エコーをループの前<div> (forループの内側while) とループの後</div> 配置します。for

于 2013-06-22T15:14:50.493 に答える
0

% 演算子 (モジュラス) を使用して、2 番目のループをまとめて削除できます。アイデアは、 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>";
于 2013-06-22T15:27:25.133 に答える
0

for ループが SQL データのフェッチ ループ内にあるため、機能しません。for ループの 2 回目の繰り返しには、新しい SQL 行はありません。より良い解決策は、2 つの動画 (タイトル) を識別する共通の列を取得し、その値が変更されるたびに新しい div を生成することです。同じタイトルの任意の数の SQL 行で機能する、このようなものを試してください。これにより、SQL クエリが行を返さない場合にも適切な結果が得られ、URL が 1 つしかないタイトルの可能性を処理できます。単にフリップフロップして間違ったタイトルの 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>";
于 2013-06-22T15:48:39.693 に答える