PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Blätterfunktion


doc36
12.03.2007, 21:53:00
Hallo an alle,

ich hab eine Bildergallerie zum Anzeigen meiner Bilder.

Jedes Bild ist mit eindeutiger ID sowie Titel, Bildname und Speicherort und Text in einer MySQL Datenbank gespeichert.

Wenn man auf ein Bild draufklickt, öffnet sich ein neues Fenster mit dem Bild und der Überschrift und dem Text.

Dabei wird das angeklickte Bild durch die eindeutige ID im URL übergeben (z.B. bilder_detail.php?id=55).

Das klappt alles 100%.

So nun möchte ich ab der Stelle (dem Bild) nach vorne und hinten blättern können und ich bekomme es einfach net hin.

Hier das Script der Detailansicht:


<html>
<head>
<title>
Detailansicht
</title>
<link rel="StyleSheet" type="text/css" href="styles.css" />
</head>
<body>
<?php
$id = $_GET["id"];
include('bilder_include.php');
$result = mysql_query("SELECT * FROM bilder WHERE id = '$_GET[id]'");
$row = mysql_fetch_array($result);
?>
<div align="center">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td><h2><?php echo $row['ueberschrift']; ?></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td><img src="galerie/<?php echo $row['name']; ?>" width="600" /></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td><div><?php echo $row['beschreibung']; ?><h2></td>
</tr>
</table>
</div>
</body>
</html>


Kann mir jemand helfen und sagen wie ich es anpassen bzw. ändern muss.

Die Blätterfunktion soll solche Pfeile haben: << und >>.
Und es soll oben Links und Rechts sein.

Vielen Dank für jede Hilfe.

doc36

Opendix
12.03.2007, 22:25:27
Stichworte für dich:

- LIMIT
- SQL-Injection

mach dich mal bei Google darüber schlauf...

doc36
12.03.2007, 22:38:40
Hi Opendix,

verstehe jetzt aber ehrlich gesagt nicht den Zusammenhang mit meiner Frage zur Blätterfunktion. Stehe jetzt schon ein bischen auf dem Schlauch und google erklärt es mir auch nicht.

Kannst du etwas deutlicher werden? So das auch ein DAU es versteht?

Danke!

doc36

doc36
12.03.2007, 23:23:56
Hallo nochmal,

habs jetzt so gelöst:


<html>
<head>
<title>
Detailansicht
</title>
<link rel="StyleSheet" type="text/css" href="styles.css" />
</head>
<body>
<?php
$id = $_GET["id"];
include('bilder_include.php');
$result = mysql_query("SELECT * FROM bilder WHERE id = '$_GET[id]'");
$row = mysql_fetch_array($result);
?>
<div align="center">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left">
<?php
$zurueck = $id - 1;
echo "<a href=\"$PHP_SELF?id=$zurueck\"><<--</a>";
?>
</td>
<td><h2><?php echo $row['ueberschrift']; ?></td>
<td align="right">
<?php
$weiter = $id + 1;
echo "<a href=\"$PHP_SELF?id=$weiter\">-->></a>";
?>
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="3"><img src="galerie/<?php echo $row['name']; ?>" width="600" /></td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="3"><div><?php echo $row['beschreibung']; ?><h2></td>
</tr>
</table>
</div>
</body>
</html>


Problem ist nur das die schon gelöschten id's in der Datenbank nicht übersprungen werden.
Wie kann man das noch lösen?

doc36

CIX88
13.03.2007, 07:19:12
Bei einer Blätterfunktion bezieht man sich doch nicht auf die ID, sondern auf LIMIT.
Die ID ist hier völlig unwichtig.

Andes
13.03.2007, 07:45:31
Die Suche des Forums hätte dir das gewünschte gezeigt.
Blätterfunktion (http://www.selfphp.de/forum/showpost.php?p=96253&postcount=4)

doc36
13.03.2007, 08:36:20
Hallo,

habe natürlich erst im Forum gesucht und ein paar Dinge ausprobiert. Aber den hab ich noch nicht gesehen gehabt.

Werde ihn gleich ausprobieren. Danke.

doc36

doc36
13.03.2007, 14:29:12
Hi.

Tja wie soll ich mal sagen?
Heute stell ich mich gleub ich zu blöd an. Bekomme es mit dem Script von Andes nicht hin.
Ich bekomme es nicht so eingebaut damit es funktioniert.

Es reagiert als wenn es nicht da wäre.

Habe es wie folgt für mein Script oben angepasst:


if(empty($_GET['id']) || !is_numeric($_GET['id'])) $y = 0;
else $y = $_GET['id'];

$sel = "SELECT SQL_CALC_FOUND_ROWS * FROM bilder ORDER BY bild LIMIT $y, 1";
$result = mysql_query($sel);
$count = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);

$img = '<img src="%s" width="%s" height="%s" alt="%s">';
$row = mysql_fetch_object($result);
$info = getimagesize($row->bild);
printf($img, $row->bild, $info[0], $info[1], $row->titel);

$atag = '<a href="?y=%s">%s</a>';
if($y > 0) printf($atag, $y - 1, 'zurück');
$v = $y + 1;
if($v < $count) printf($atag, $v, 'vor');


Bin für weitere Hilfe natürlcih dankbar.

doc36

Andes
13.03.2007, 14:53:17
Das kann so nicht funktionieren. Du fragst ab ob $_GET['id'] vorhanden ist, wenn nicht ist $y = 0. $y wird immer Null sein, da du $id nicht übergibst. Diese ist auch für eine Blätterfunktion völlig uninteressant. Belasse es so wie es war und passe nur die Spalten-Namen und Tabellen-Name an. Dann wird es auch funktionieren.

Mal kurz zur Erläuterung. In dem Select werden alle Datensätze abgefragt und nach der Spalte `bild` alphabetisch sortiert (ORDER BY bild). Durch LIMIT $y, 1 wird nur ein Datensatz ab Position $y ausgelesen.
Beim ersten Aufruf ist $y immer 0 und der erste Datensatz an Position 0 (MySql fängt bei 0 an zu zählen) ausgelesen. Für den Vor-Link wird immer $y + 1 gerechnet. Bis $y gleich $count ist. Für den Zurück-Link wird immer $y - 1 gerechnet. Bis $y = 0 ist.
SQL_CALC_FOUND_ROWS ermittelt in dem Select die Anzahl aller vorhandenen Datensätze. Das Ergebnis wird in dem zweiten Select ausgelesen.

Wenn du nun auf den Vor-Link klickst wird immer $y + 1 übergeben. Demzufolge ist bei dem ersten Klick $y = 1 und durch LIMIT $y, 1 wird der zweite Datensatz (Position 1) aus der Tabelle gelesen.