2017-07-27 3 views
0

Ich habe eine Indexseite, auf der alle in der Datenbank hochgeladenen Bilder angezeigt werden. Wenn Sie auf ein bestimmtes Bild klicken, werden Sie zu einer Seite weitergeleitet, die alle Informationen zu diesem Bild enthält. Jetzt versuche ich, eine Vor/Zurück-Schaltfläche auf dieser Informationsseite hinzuzufügen, die Sie zum vorherigen/nächsten Bild in der Datenbank sendet. Wie Sie zuerst sehen können, nehme ich den Pfad des Bildes von der URL, dann suche ich basierend auf dem Pfad die ID und versuche dann den Pfad des vorherigen/nächsten Bildes mit der ID des aktuellen Bildes zu erhalten. Meine nächste Bildschaltfläche funktioniert, aber meine vorherige Schaltfläche gibt immer den Pfad des ersten Bildes in meiner Datenbank zurück. Wenn ich auf "Next-> Next-> Next" klicke, werden alle meine Bilder in der richtigen Reihenfolge angezeigt. Wenn ich jedoch auf ein Bild klicke, wird das erste Bild angezeigt. Irgendwelche Ideen warum?Warum gibt meine Abfrage immer den Pfad des ersten Bildes in meiner Tabelle zurück?

<?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

Haben Sie sehen überprüft, welchen Wert in der „Zurück“ Taste gespeichert ist, so dass Sie wissen, ob es den richtigen Wert ist das Hinzufügen oder nicht? Es könnte auch sinnvoller sein, den Pfad und Dateinamen in der Tabelle zu speichern und dann nur die ID des vorherigen und nächsten als Werte in diesen Bildern zu speichern. Es könnte auch sinnvoller sein, all dies mit AJAX zu tun, anstatt die Seite jedes Mal neu zu laden. – Difster

+0

Ich bin mir nicht ganz sicher, was meinst du mit "Wert wird in der" vorherigen "Taste gespeichert. Die vorherige Schaltfläche schickt mich auf die gleiche Seite, aber mit einem anderen Pfad in der URL, von dem ich abziehe, welches Bild ich anzeigen soll. Das Problem ist, dass die Abfrage sql5 immer den Pfad des Bildes mit der ID 1 zurückgibt. –

+0

Das liegt daran, dass Sie die Seite aktualisieren und neu beginnen. – Difster

Antwort

0

Das erste Ergebnis für SELECT * FROM image WHERE id < $currentId LIMIT 1 wird immer in der db das erste Element sein. Das ist Dein Problem. Versuchen Sie folgendes:

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

+0

Funktioniert wie ein Charme! Obwohl es trotzdem funktioniert, muss ich etwas Ähnliches über die "nächste" Anfrage haben? Auch warum genau funktioniert mein sql nicht? –

+0

Ja, es wäre am besten, ASC für die nächste zu sortieren. MySQL liefert die Ergebniszeilen basierend auf der Reihenfolge, in der die Einträge vorgenommen wurden. Oft ist das in Ordnung, aber sortiere sie doch. – RockwoodON

+0

** Auch warum genau funktioniert mein sql nicht? ** Es ist, als würde man fragen "Gib mir eine Nummer weniger als 100" - ich könnte mit der ersten Zahl antworten, die mir in den Sinn kam - nicht wirklich, was du wolltest, wenn du "99" erwartest. Wenn Sie die DESC-Anweisung eingeben, bedeutet dies "von allen Zahlen kleiner als 100, sortieren Sie sie in absteigender Reihenfolge, und geben Sie mir dann die oberste". – RockwoodON

Verwandte Themen