2017-07-27 9 views
0

データベースにアップロードされたすべての画像が表示されるインデックスページがあります。特定のイメージをクリックすると、そのイメージに関するすべての情報を含むページに送られます。今、私はその情報ページにPrevious/Nextボタンを追加して、データベースのPrevious/Next画像にあなたを送ります。あなたが最初に見ることができるように、私はURLからイメージのパスを取って、パスに基づいてIDを取得し、現在のイメージのIDを使用して前/次のイメージのパスを取得しようとします。私の次の画像ボタンは機能しますが、前のボタンは常にデータベースの最初の画像のパスを返します。だからnext-> next-> nextをクリックすると、すべての画像が正しい順序で実行されますが、前の画像をクリックすると最初の画像に送られます。なぜどんなアイデア?なぜ私のクエリはいつも私のテーブルの最初の画像のパスを返していますか?

<?php 

    $realImagePath = $_GET['image']; 
    $sql = "SELECT * FROM image WHERE path='$realImagePath'"; 
    $result = mysqli_query($conn, $sql); 
    $getResult = mysqli_fetch_assoc($result); 

    $currentId = $getResult['id']; 

    $sql4 = "SELECT * FROM image WHERE id > $currentId LIMIT 1"; 
    $result4 = mysqli_query($conn, $sql4); 
    $getResult4 = mysqli_fetch_assoc($result4); 
    $nextImagePath = $getResult4['path']; 

    $sql5 = "SELECT * FROM image WHERE id < $currentId LIMIT 1"; 
    $result5 = mysqli_query($conn, $sql5); 
    $getResult5 = mysqli_fetch_assoc($result5); 
    $previousImagePath = $getResult5['path']; 

    echo "<div class='imageContainer'>" 
        ."<h1>".$getResult['name'].'</h1>' 
        .'<img class="uploadedRealImg" src="uploads/'.$realImagePath .'" alt="Random image" />'."<br><br>" 
        ."<a href='imageInfo.php?image=".$previousImagePath."'>Previous</a>" 
        ."<a href='imageInfo.php?image=".$nextImagePath."'>Next</a><br>" 
        .$getResult['description']."<br><br>" 
        .$getResult['date']."<br><br>" 
        .$getResult['author']."<br><br></div>"; 
?> 
+0

あなたはそれが正しい値を追加するか、いないかどうかを知るように「前」ボタンで保存されているどの値を確認するためにチェックしましたか? また、パスとファイル名をテーブルに格納して、前後の値のidをそれらのイメージに格納するほうが意味があります。また、毎回ページをリフレッシュするのではなく、AJAXでこれをすべて行うのが理にかなっています。 – Difster

+0

"値は"前の "ボタンに保存されていることはどういう意味ですか?前のボタンは私を同じページに送りますが、私は表示するはずの画像を差し引くURLの異なるパスを使用します。問題は、sql5クエリが常にID 1の画像のパスを返すことです。 –

+0

これは、ページを更新してからやり直すためです。 – Difster

答えて

0

SELECT * FROM image WHERE id < $currentId LIMIT 1の最初の結果は、常にdbの最初の要素になります。これがあなたの問題です。これを試してみてください:

SELECT * FROM image WHERE id < $currentId ORDER BY id DESC LIMIT 1

+0

魅力的な作品です!それにもかかわらず、私は '次の'クエリについてこれに似たものを持っている必要がありますか?なぜ私のSQLはうまくいきませんか? –

+0

はい、ASCで並べ替えるのが最善です。 MySQLは、エントリが作成された順序に基づいて結果の行を出力します。多くの場合、これは問題ありませんが、確実に並べ替えてください。 – RockwoodON

+0

**私のSQLがうまく動作しないのはなぜですか? **「私に100未満の数字を教えてください」と尋ねるようなものです - 最初の数字で答えることができます - あなたが "99"を期待していれば本当にあなたが望むものではありません。 DESC順に並べることで、「100未満のすべての数字を降順でソートしてから、トップにします」という意味です。 – RockwoodON

関連する問題