2016-01-21 86 views
-1

我正在處理一個簡單的vlog站點項目,我試圖在每個頁面上只顯示20個視頻縮略圖,並且我在索引中編寫了這段代碼以將視頻分割爲多個頁面,然後分頁...問題是它顯示了無限頁面的每頁相同的第一個視頻的縮略圖20次。PHP視頻多個頁面無法正常工作

我真的需要幫助,這代碼

<?php 

    require_once ('db.php') ; 
    require_once ('VideosApi.php') ; 
    $count = mysql_query('SELECT COUNT(id) AS numb FROM videos ORDER BY id'); 
    $array = mysql_fetch_assoc($count); 
    $number = $array['numb']; 
    mysql_free_result($count); 
    $PerPage = 20; 
    $nbPage = ceil(abs($number/$PerPage)); 
    if(isset($_GET['page']) && $_GET['page'] > 0 && $_GET['page'] <= $nbPage && preg_match('#^[0-9]+$#',$_GET['page'])){ $cPage = $_GET['page']; } 
    else{ $cPage = 1; } 

    $Query = mysql_query('SELECT * FROM Videos ORDER BY id LIMIT '.(($cPage-1) * $PerPage).','.$PerPage); 

       $videos = Videos_Get() ; 
      if ($videos == Null) 
      die ('problem'); 

     $vcount = @count ($videos) ; 

      if ($vcount == 0) 
      die('no videos') ; 



     For ($i = 0; $i < $vcount; $i++) 
      { 
     $video = $videos [$i]; 

     if ($video->time > 3600) 
      $duration = gmdate("H:i:s",$video->time); 
     else 
      $duration = gmdate("i:s",$video->time); 




     while($Rows = mysql_fetch_assoc($Query)){ 

      echo ("<div class=\"video\"> 
       <a href=\"video.php?id=$video->id\"><img src=\"$video->img\"></a><span class=\"class-video-name\">$video->name</span> 
       <div class=\"class-video-footer\"> 
       <span class=\"class-video-duration\">$duration</span> 
       </div> 
     </div>") ; } 

     } ?> 

回答

0

的一些技巧之前,我們得到的答案正確:

  1. 不要使用mysql_*。現在這個功能家族已被棄用,並且支持將在未來版本的PHP中被刪除。對於代碼長壽命,請考慮使用MySQLiPDO
  2. 使用is_numeric()檢查字符串是否有數字值。使用preg_match()對於這樣一個簡單的任務非常繁重。
  3. 儘量避免在MySQL查詢中使用SELECT *。很少需要表中的所有內容,因此獲取行的所有字段爲very inefficient(特別是如果您沒有最佳使用索引)。

之前已經說過,我花了一些時間來重新編寫代碼,遵循上面所講的實踐。下面是修改後的代碼,並在其下方的什麼是錯的解釋:


更新db.php如下:

<?php 

$db = new PDO('mysql:dbname=DATABASE_NAME;host=127.0.0.1', 'DATABASE_USER', 'DATABASE_PASSWORD'); 

?> 

現在你的主文件:

<?php 

require_once 'db.php'; 
require_once 'VideosApi.php'; 

$count = $db->query('SELECT COUNT(id) AS total FROM videos')->fetchObject(); 
$number = $count->total; 

$perPage = 20; 
$pages = ceil($number/$perPage); 

$page = (isset($_GET['page'])) ? $_GET['page'] : 1; 
$page = ($page < 1 || $page > $pages || !is_numeric($page)) ? 1 : $page; 

$offset = ($page - 1) * $perPage; 
$query = $db->query('SELECT id, img, name, time FROM videos ORDER BY id LIMIT '.$offset.','.$perPage); 

if($query->rowCount() < 1) 
{ 
    die('No videos'); 
} 

$html = ''; 

while($video = $query->fetchObject()) 
{ 
    $duration = ($video->time > 3600) ? gmdate('H:i:s', $video->time) : gmdate('i:s', $video->time); 

    $html.= '<div class="video">'; 
    $html.= "\n\t".'<a href=\"video.php?id='.$video->id.'">'; 
    $html.= "\n\t\t".'<img src="'.$video->img.'" />'; 
    $html.= "\n\t".'</a>'; 
    $html.= "\n\t".'<span class="class-video-name">'.$video->name.'</span>'; 
    $html.= "\n\t".'<div class="class-video-footer">'; 
    $html.= "\n\t\t".'<span class="class-video-duration">'.$duration.'</span>'; 
    $html.= "\n\t".'</div>'; 
    $html.= "\n".'</div>'; 
} 

echo $html; 

?> 

您的原始代碼的問題有點難以確定,因爲您不提供VideosApi.php的內容,這是我在哪裏假設你定義了Videos_Get()。無論如何,我懷疑正在發生的事情是,Videos_Get()實際上忽略了所有的分頁,但正如我所說,很難診斷,因爲我們看不到所有的代碼!

+0

你的代碼是偉大的..它運作良好,也看起來非常專業 我希望有一天我可以編寫就像你..感謝了很多:d – Alex36

+0

如果上面的幫助的代碼,請考慮upvoting並接受它作爲正確答案。 – BenM

相關問題