0

ユーザーがサインアップして自分の写真やインターネットで見つけた写真をアップロードできる画像共有 Web サイトを作成しています。ファイル パスが MySQL データベースにアップロードされます。次に、MySQL クエリを使用してすべての画像パスを引き出し、while ループを使用して画像をページに配置します。アップロードされる画像が多いほど、ページの読み込みに時間がかかります。5 つの画像の後に、さらに 5 つの画像を読み込むボタンを追加したいと考えています。このためのチュートリアルがどこにも見つからないようです。

テーブルは images と呼ばれ、列名は path です。

<?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を好みます。別のオプションはMySQLimysql_*です。これは、関数に慣れている場合は少し簡単です

そこからは、クエリを制限して、スクリプトに返す値のグループを知らせるだけです。これが私のやり方です(これをテストしていないので、おそらくバグがあることに注意してください!出力とエラーの処理方法も決定する必要があります)

// 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 に答える