Weiter mit id+1 bzw nächste id

crashx

Erfahrenes Mitglied
Ich mal wieder :)

Ihr kennt ja sicherlich langsam meine PHP fähigkeiten und wisst das sie nicht gross sind.
Doch mein Erfindungsreichtum bringt mich immer ein kleines bischen voran.
Mein Problem ist folgendes.

Ich habe eine Galerie gemacht und wen man da auf ein Bild klick öffnet sich ein neues Fenster und zeigt das Bild grösser an.
Das ist alles kein Problem. Da dachte ich mir um in der Galerie besser zu navigieren, machtst du im neuen Fenster folgendes:

weiter | schliessen | zurück

Es ging alles gut mit meinem System bis, ja leider bis ich ein Bild entferne den dann fehlt mir eine `id` und es zeigt nichts an, was nicht schön ist.
Meine Denkweise:
Ich hole mir die tiefste `id` und die höchste `id` und zähle einfach - oder + 1.
Aber wie ich selbst feststellen musste geht das nicht gut :)

Vielleicht könnt Ihr mir ja wieder mal Helfen.

PHP:
$sql = "SELECT *
		FROM `$src`
		ORDER BY `id` DESC
		LIMIT 1
		";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
	{
		$high = $row['id'];
	}
	
$sql = "SELECT *
		FROM `$src`
		ORDER BY `id` ASC
		LIMIT 1
		";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
	{
		$low = $row['id'];
	}
echo '<p>';
if($_GET['id'] == $low)
	{
		echo 'Bild zurück ';
	}
else
	{
		$ids = $id-1;
		echo ' <a href="'.$_SERVER['PHP_SELF'].'?src='.$src.'&id='.$ids.'">Bild zurück</a> ';
	}
echo '<a href="" onClick="JavaScript:self.close()"> schliesen</a> ';
if($_GET['id'] == $high)
	{
		echo ' Bild vor';
	}
else
	{
		$ids = $id+1;
		echo ' <a href="'.$_SERVER['PHP_SELF'].'?src='.$src.'&id='.$ids.'">Bild vor</a>';
	}
 
Welche allgemeine Eigenschaft muss die ID denn haben, damit sie als „nächste ID“ in Betracht kommt?
 
Für "zurück" müsste es einfach die vorhergehende `id` sein und für "weiter" die nächste

Beispiel:

HTML:
<a href="index.php?id=1">zurück</a> <a href="index.php?id=3">weiter</a>

Mein Problem ist, wenn `id` 3 nicht existiert sondern erst wieder `id` 5.
 
Dann überlege mal, welche allgemeine Eigenschaft die nächste ID haben muss. Muss die ID kleiner sein als die aktuelle? Oder muss sie gleich der aktuellen sein? Oder …
 
Wenn ich den link "zurück" betätige, muss die `id` 1 kleiner sein bzw. die vorhergehende `id` in meiner tabelle alls die `id` der aktuellen Seite.

Wenn ich den link "weiter" betätige muss die `id` 1 grösser sein bzw. die nächste `id` in meiner tabelle alls die `id` der aktuellen Seite.

Die Logik verstehe ich schon, nur wie komme ich zur Lösung? Habe da keinen Ansatz.

edit//

Hätte ich in der Tabelle immer diese Struktur der id's wäre es ja kein Problem.

id | bild
1 | bild1.jpg
2 | bild2.jpg
3 | bild3.jpg
4 | bild4.jpg

Aber ich habe, wenn ich ein Bild Lösche folgende Struktur

id | bild
1 | bild1.jpg
2 | bild2.jpg
4 | bild4.jpg
6 | bild6.jpg

weil ich aus der tabelle den Eintrag mit der id 3 und 5 entfernt habe
 
Zuletzt bearbeitet:
Wenn ich den link "zurück" betätige, muss die `id` 1 kleiner sein bzw. die vorhergehende `id` in meiner tabelle alls die `id` der aktuellen Seite.

Wenn ich den link "weiter" betätige muss die `id` 1 grösser sein bzw. die nächste `id` in meiner tabelle alls die `id` der aktuellen Seite.
Da du nicht sicher sein kannst, dass es einen Datensatz mit der direkt nachfolgenden ID gibt, kannst du dies auch nicht als Bedingung nehmen sondern musst diese etwas lockern. Es würde also reichen nicht die direkt nachfolgende ID sondern einfach nur die nächst größere ID auszuwählen.
Du hast die Lösung schon fast genannt, muss aber noch jeweils ein Zeichen aus den beiden obigen Sätzen streichen.
 
Ich Kenne das Prinzip, aber ich komme nicht ganz nach, wie das zu lösen ist.

etwa in die Richtung?

PHP:
$sql = "SELECT * FROM `tabelle` WHERE `id` = > $id"; // für die nächst grössere?
 
Wieso springt id gleich auf 1 und nicht einfach auf die nächst kleinere?

PHP:
$sql = "SELECT * FROM `test` WHERE `id` < '".$_GET['id']."' LIMIT 1";

Hier das mal das ganze:

PHP:
<?PHP
$sql = "SELECT * FROM `test` WHERE `id` = '".$_GET['id']."' LIMIT 1";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
	{
		echo '<img src="'.$row['url'].$row['pic'].'" border="0">';
	}


//Tiefste ID bzw. zurück
$sql = "SELECT * FROM `test` ORDER BY `id` ASC LIMIT 1";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
	{
		$low = $row['id'];
	}
if($_GET['id'] == $low)
	{
		echo 'zurück | ';
	}
else
	{
		$sql = "SELECT * FROM `test` WHERE `id` < '".$_GET['id']."' LIMIT 1";
		$result = mysql_query($sql);
		while($row = mysql_fetch_array($result))
			{
				echo '<a href="'.$_SERVER['PHP_SELF'].'?id='.$row['id'].'">zurück</a> | ';
			}
	}
//Höchste ID bzw. weiter
$sql = "SELECT * FROM `test` ORDER BY `id` DESC LIMIT 1";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
	{
		$high = $row['id'];
	}
if($_GET['id'] == $high)
	{
		echo 'weiter';
	}
else
	{
		$sql = "SELECT * FROM `test` WHERE `id` >  '".$_GET['id']."' LIMIT 1";
		$result = mysql_query($sql);
		while($row = mysql_fetch_array($result))
			{
				echo '<a href="'.$_SERVER['PHP_SELF'].'?id='.$row['id'].'">weiter</a>';
			}
	}
?>
 
Zuletzt bearbeitet:
Zurück