0

我正在制作一个图像共享网站,用户可以在其中注册并上传他们自己的图片或他们在互联网上找到的图片。文件路径被上传到 MySQL 数据库。然后我使用 MySQL 查询将所有图像路径拉出,并使用 while 循环将图像放到页面上。随着更多图像被上传,页面加载所需的时间越长。我想在 5 张图片后添加一个加载更多按钮,按下该按钮会加载另外 5 张图片。我似乎在任何地方都找不到这方面的教程。

该表称为图像,列名称为路径。

<?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 个。如果您认为在用户滚动时加载会更好,请帮助我知道如何做到这一点。

4

2 回答 2

1

你想要的是分页。我开始告诉你用谷歌搜索它,但在我自己做了之后,我发现有很多不好的建议,不值得。

首先,您想使用更现代的方法连接到 mysql 数据库。这些mysql_*函数在 PHP 中已被弃用,它们被认为存在安全风险。我更喜欢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 检查滚动事件,然后调用后端代码以自动加载更多结果(通过将 $prev 和 $next 值设置到调用中)

于 2013-03-05T22:33:15.687 回答
0

如果您只想要 5 个,请使用Select Top 5,如果您想在滚动时上传新文件,您可以使用 Ajax。希望你能找到方法并分享它。

于 2013-03-05T22:30:49.707 回答