加载更多的MySQL结果与按钮

问题描述:

我做图片分享网站,用户可以注册并上传自己的照片或那些他们已经在互联网上找到。文件路径被上传到MySQL数据库。然后,我使用MySQL查询将所有图像路径拉出,并使用一个while循环将图像放到页面上。随着更多图片上传,页面加载所需的时间越长。我想添加一个加载更多按钮5个图像后,当按下加载另外5个图像。我似乎无法找到任何地方的教程。加载更多的MySQL结果与按钮

的表称为图像和列名是路径。

<?php 
$sql = mysql_query("SELECT * FROM `images` ORDER BY `id` DESC"); 
while($row = mysql_fetch_array($sql)){ 
    $path = $row['path']; 
?> 
    <img src="<?php echo $path; ?>" alt="" /> 
<?php 
} 
?> 

这是我用来获取文件路径的入门。这不是我遇到的问题。问题是,页面上的图片太多,加载速度非常慢。所以这就是为什么我要一次加载5个。如果你认为在用户滚动时加载会更好,请帮助我知道如何做到这一点。

如果你想只有5使用Select Top 5,如果你想在他们滚动,你可以使用Ajax来上传新文件。希望你能找到方法来分享它。

你需要的是分页。我开始告诉你谷歌它,但在我做了自己后,我发现有太多不好的建议,这是不值得的。

首先你要使用连接到MySQL数据库的更现代的方法来定。在PHP中不推荐使用mysql_*函数,它们被认为是安全风险。我更喜欢PDO,它为您提供了许多不同数据库的一致性界面。另一个选项是MySQLi,如果您习惯了mysql_*函数,那么它会更容易一些。

从那里只是限制查询,然后让脚本知道返回哪组值。这就是我如何做到这一点(注意我没有测试此所以有可能是错误!您还需要决定如何处理输出和错误)

// Database connection stuff goes here 

$start = $_GET['start']; 
$per_page = 10; // or config value of your choice 

// first find out how many you have 
try { 
    $res = $dbh->prepare("SELECT COUNT(*) FROM `images`"); 
    $res->execute(); 
} 
catch(PDOException $e) { 
    // do something with errors! 
} 

list($count) = $res->fetch(PDO::FETCH_NUM); 

$end = $start + $per_page; 
if($count < $end) { 
    $end = $count; 
} 

// next and previous values. Just create links and these 
// become the "start" parameter 
$next = $end + 1; 
$prev = $start - $per_page; 
if($prev < 0) { 
    $prev = 0 
} 


// now get the results 
try { 
    $res = $dbh->prepare("SELECT * FROM `images` 
     ORDER BY `id` DESC LIMIT $start, $end"); 
    $res->execute(); 

    while($image = $res->fetch(PDO::FETCH_ASSOC)) { 
     // store or output the results 
    } 
} 
catch(PDOException $e) { 
    // do something with errors! 
} 

自动做滚动你的时候可以使用jQuery检查滚动事件,然后打电话给你的后端代码自动加载更多的结果(通过设置$上一页和$下一个值到调用)

+0

我得到的错误的代码。未定义的变量和函数 – 2013-03-07 16:36:49

+0

本示例使用您必须设置的PDO。它不会开箱即用。 – Cfreak 2013-03-07 18:34:03

+0

我将如何设置PDO?我对PHP稍微陌生,并且不认识很多代码。 – 2013-03-08 12:56:53