Bilderserie
Holgi
- php
Hallo miteinander,
ich habe mithilfe von PHP-MYSQL eine kleine Bilderserie mit Kategorien erstellt.
Das Hinzufügen von Bildern funktioniert soweit, nur bei der Ausgabe komm ich nicht so ganz mit.
Ich habe 3 Kategorien (Österreich, Deutschland, Sonstige). Nun habe ich für jede Kategorie eine php-site erstellt wo die einzelnen kategorien herausgefiltert werden. Mit Hilfe von einem "zurück" und "weiter"-Button möchte ich, dass der Benutzer die Bilder der jeweiligen Kategorie ansehen kann.
Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener Kategorie sind und manche ID's wieder gelöscht werden.
Ich bin kein PHP-Spezialist, deshalb bitte ich euch um Hilfe!
Danke im Voraus!
Holgi
Moin Holgi,
Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener Kategorie sind und manche ID's wieder gelöscht werden.
Ein Ansatz wäre, sich alle ID's der betreffenden Kategorie in ein
Array zu speicheren. Du könntest dann im Array vorwärts und rückwärts gehen und den entsprechenden Datensatz mittels der ID
aus der DB holen.
Oder, Du lädst gleich alle Informationen in Arrays.
Grüsse
Mike
Hi,
danke für die Antwort.
Ein Ansatz wäre, sich alle ID's der betreffenden Kategorie in ein
Array zu speicheren. Du könntest dann im Array vorwärts und rückwärts gehen und den entsprechenden Datensatz mittels der ID
aus der DB holen.Oder, Du lädst gleich alle Informationen in Arrays.
Wie gesagt bin ich kein Spezialist in PHP. Könntest du mir ungefähr sagen wie man die ID in Arrays speichert bzw. wie man sie rausliest?
danke!
Holgi
Moin Holgi,
Wie gesagt bin ich kein Spezialist in PHP. Könntest du mir ungefähr sagen wie man die ID in Arrays speichert bzw. wie man sie rausliest?
Die Ergebnismenge aus der DB liest du ja mit einer while Schleife.
In dieser Schleife speicherst du die ID's
$x=0;
while (....)
{
$ID[$x]=$id_aus_DB;
$x++;
}
Auslesen kannst du nun mit hoch- und runter zählen der Variable $x
Also Bild 1 = $ID[0] wobei $x=0 nächstes Bild ist $x+1 vorheriges
Bild $x-1 ( Grenzen beachten $x nicht < 0 und $x nicht > max Bilder.
$Hole_ID=$ID[$x];
Und nun ein select mit $Hole_ID
Grüsse
Mike
Hi,
irgendwie komm ich mit der serie doch nicht ganz weiter. ich habe nun nach dem herausfiltern der kategorie bilder mit gemischt id's (1,3,4,8,...). mit einem weiter- und zurück-button würde ich immer gerne zum bild der nächsten id kommen. es soll immer nur eine id angezeigt werden.
weiß jemand wie ich z.B. von id 1 zur nächsten id 3 komme? gibt es da einen befehl?
danke im voraus!
holgi
Moin Holgi,
weiß jemand wie ich z.B. von id 1 zur nächsten id 3 komme? gibt es da einen befehl?
Da müssen wir wohl die Kristallkugel befragen.
Wie hast du es bis jetzt gelöst? Hast du die ID's in einem Array gespeichert?
Grüsse
Mike
Da müssen wir wohl die Kristallkugel befragen.
Wie hast du es bis jetzt gelöst? Hast du die ID's in einem Array gespeichert?
bisher sieht das script so aus:
<?php
include ("../data.inc.php");
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
$zeilen = mysql_num_rows($abfrage);
for ($i=0; $i<$zeilen; $i++)
{
$bi_id = mysql_result($abfrage, $i, "bi_id");
$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file = mysql_result($abfrage, $i, "bi_file");
$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
//echo "$bi_id<p>";
$ids = array($bi_id);
echo $ids[0];
}
?>
weiß nicht was ich mit dem array jetzt anfangen soll. das echo gibt die beiden bisherigen id's 3 1 aus.
Moin Holgi,
for ($i=0; $i<$zeilen; $i++)
{
$bi_id = mysql_result($abfrage, $i, "bi_id");
Für diese Lösung ist die bi_id nicht mehr relevant, diese Zeile kannst du weglassen.
$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file = mysql_result($abfrage, $i, "bi_file");
Hier überschreibst du den Inhalt der Variablen, mit jedem Schleifendurchgang. In den Variablen steht dann nur das Ergebnis des letzten Schleifendurchgangs.
Baue 2 Arrays auf:
$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");
^^^^
$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
Diese Zeile brauchst Du auch nicht, den hier steht ja immer die gleiche (ausgewählte) Kategorie.
Und nun: $x=0;
$beschreibung=$bi_beschreibung[$x]; 1. Bild
$file=$bi_file[$x]; 1. File
$x++:
$beschreibung=$bi_beschreibung[$x]; 2. Bild
$file=$bi_file[$x]; 2. File
$x--;
$beschreibung=$bi_beschreibung[$x]; 1. Bild
$file=$bi_file[$x]; 1. File
Grüsse
Mike
danke für die schnelle antwort mike!
nun schaut das ganze so aus:
<?php
include ("../data.inc.php");
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
$zeilen = mysql_num_rows($abfrage);
for ($i=0; $i<$zeilen; $i++)
{
//$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
//$bi_file = mysql_result($abfrage, $i, "bi_file");
$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");
$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
$x++;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
$x--;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
}
?>
<?php echo "<img src=files/$file><br>$beschreibung<br>"; ?>
da ich ein bisschen begriffstützig bin, frage ich nun nochmal wie das mit dem weiter und zurück innerhalb der datei läuft?
danke nochmals im voraus!
holgi
Moin Holgi,
$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
$x++;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
$x--;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
Das gehört natürlich nicht in die Schleife. Das sind doch nur Beispiele wie du jetzt mit letztes und nächstes Bild navigieren kannst.
da ich ein bisschen begriffstützig bin, frage ich nun nochmal wie das mit dem weiter und zurück innerhalb der datei läuft?
Jetzt bist du wieder dran mit nachdenken. Ich kann die doch nicht den ganzen fertigen Code geben.
Grüsse
Mike
Das gehört natürlich nicht in die Schleife. Das sind doch nur Beispiele wie du jetzt mit letztes und nächstes Bild navigieren kannst.
ich raffs einfach nicht
<?php
include ("../data.inc.php");
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
$zeilen = mysql_num_rows($abfrage);
for ($i=0; $i<$zeilen; $i++)
{
//$bi_id = mysql_result($abfrage, $i, "bi_id");
//$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
//$bi_file = mysql_result($abfrage, $i, "bi_file");
//$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");
}
$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
echo "<img src=files/$file><br>";
$x--;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
echo "<a href=bilder.php?id=$x>zurück</a>";
$x++;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
echo "<a href=bilder.php?id=$x>vor</a>";
?>
wie muss ich die ganze sach verlinken um zum nächsten bzw. zum vorigen bild zu gelangen? bin ich wenigstens ungefähr auf dem richtigen weg?
Moin Holgi,
<?php
include ("../data.inc.php");
$currentPic=$_GET['currentPic'];
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
$zeilen = mysql_num_rows($abfrage);for ($i=0; $i<$zeilen; $i++)
{//$bi_id = mysql_result($abfrage, $i, "bi_id");
//$bi_beschreibung = mysql_result($abfrage, $i, "bi_beschreibung");
//$bi_file = mysql_result($abfrage, $i, "bi_file");
//$bi_kategorie = mysql_result($abfrage, $i, "bi_kategorie");
$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");}
$number_pics = count ($bi_file);
if ( empty ($currentPic) )
$currentPic = 0;
if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
$currentPic = '0';
$last = $number_pics - 1;
$next = $currentPic + 1;
if ($currentPic > 0 )
$back = $currentPic - 1;
else
$currentPic = "0";
if ($currentPic > 0 )
$nav=$back;
else
$nav=$last;
echo "<a href=bilder.php?id=$nav>zurück</a>";
echo "<a href=bilder.php?id=$next>vor</a>";
?>
Ich hoffe dieser Ansatz hilft die weiter.
Grüsse
Mike
muss mal wieder nerven...
den ersten datensatz zeigt es jetzt an, jedoch zeigt er bei vor und zurück << http://www.wohnart-hilpert.at/bilder/bilder.php?id=1 >> an, obwohl die nächste id 3 sein müsste (es gibt keine id 2).
an was kann das liegen?
danke
Holgi
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id asc", $conn);
$zeilen = mysql_num_rows($abfrage);
$currentPic=$_GET['currentPic'];
for ($i=0; $i<$zeilen; $i++)
{
$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");
}
$number_pics = count ($bi_file);
if ( empty ($currentPic) )
$currentPic = 0;
if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
$currentPic = '0';
$last = $number_pics - 1;
$next = $currentPic + 1;
if ($currentPic > 0 )
$back = $currentPic - 1;
else
$currentPic = "0";
if ($currentPic > 0 )
$nav=$back;
else
$nav=$last;
$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
echo "<img src=files/$file height=200>";
echo "<a href=kuechen.php?id=$nav>zurück</a>";
echo "<a href=kuechen.php?id=$next>vor</a>";
?>
muss mal wieder nerven...
den ersten datensatz zeigt es jetzt an, jedoch zeigt er bei vor und zurück << http://www.wohnart-hilpert.at/bilder/kuechen.php?id=1 >> an, obwohl die nächste id 3 sein müsste (es gibt keine id 2).
an was kann das liegen?
danke
Holgi
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id asc", $conn);
$zeilen = mysql_num_rows($abfrage);
$currentPic=$_GET['currentPic'];
for ($i=0; $i<$zeilen; $i++)
{$bi_beschreibung[$i] = mysql_result($abfrage, $i, "bi_beschreibung");
$bi_file[$i] = mysql_result($abfrage, $i, "bi_file");}
$number_pics = count ($bi_file);
if ( empty ($currentPic) )
$currentPic = 0;if ( ($currentPic > $number_pics) || ($currentPic == $number_pics) )
$currentPic = '0';$last = $number_pics - 1;
$next = $currentPic + 1;if ($currentPic > 0 )
$back = $currentPic - 1;
else
$currentPic = "0";if ($currentPic > 0 )
$nav=$back;
else
$nav=$last;$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];echo "<img src=files/$file height=200>";
echo "<a href=kuechen.php?id=$nav>zurück</a>";
echo "<a href=kuechen.php?id=$next>vor</a>";?>
edit: hab den dateinamen editiert...das problem ist immer noch da.
Moin Holgi,
$x=0;
$beschreibung=$bi_beschreibung[$x];
$file=$bi_file[$x];
Jetzt wirst du aber nervig. Du must auch ein bißchen denken.
Du schreibst $x=0; Also ist $x immer 0
Das muss natürlich heisen:
$beschreibung=$bi_beschreibung[$currentPic];
und
$file=$bi_file[current_Pic];
Jetzt bastellst du bitte selbst, like SELF
Grüsse
Mike
Hallo Holgi!
Du willst doch pro Seite ein Bild anzeigen, oder? Und auf jeder Seite soll ein "zurück"- und ein "weiter"-Button vorhanden sein, richtig?
$abfrage = mysql_query("Select * from bilder where bi_kategorie=1 order by bi_id desc", $conn);
Hinweis: Eine SQL-Query endet immer mit einem Semikolon.
BTW: kein "SELECT * ...", siehe hierzu:
dclp-FAQ: 16.14. Warum soll ich nicht SELECT * schreiben?
http://www.dclp-faq.de/q/q-sql-select.html
Vorschlag:
Zähle alle Datensätze mit einer ersten SQL-Abfrage und speichere die Anzahl in eine Variable.
In einer zweiten SQL-Abfrage begrenzt du das Ergebnis mit "LIMIT ?, 1". Wobei "?" die aktuell anzuzeigende Datensatz ist.
Deine SQL-Abfrage sortiert deine Tabelle nach der ID und mit der von mir o.g. geschilderten Abfolge, kannst du einen Datensatz nach dem anderen bzw. eine ID nach der anderen auslesen bzw. ausgeben.
Ob ein "zurück"- oder "weiter"-Button möglich ist, kannst du anhand der aktuellen Position und der Gesamtanzahl der Datensätze ermitteln.
Schau dir die folgende Seite an und abstriehiere deine Problem von dem dort angegebenen Beispiel. Somit wäre dann dein $limit immer 1.
dclp-FAQ: 17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen
http://www.dclp-faq.de/q/q-mysql-seitenweise.html
Hallo Holgi!
- ID INT_autoincrement + PS
- Beschreibung VCHAR
- File VCHAR
- Kategorie INT
Ich habe 3 Kategorien (Österreich, Deutschland, Sonstige). Nun habe ich für jede Kategorie eine php-site
erstellt wo die einzelnen kategorien herausgefiltert werden. Mit Hilfe von einem "zurück" und
"weiter"-Button möchte ich, dass der Benutzer die Bilder der jeweiligen Kategorie ansehen kann.Wie kann ich das am Besten machen, das mit der ID scheint mir ein bisschen unlogisch, da sie verschiedener
Kategorie sind und manche ID's wieder gelöscht werden.
Also... Ein Skript, welchem die Kategorie übergeben wird (die Kategorie-ID):
...
$kategorie = irgendeine_validierungs_funktion($_GET["kategorie"]);
...
SELECT Bilder.Beschreibung,
Bilder.File
FROM Bilder
WHERE Bilder.Kategorie = $kategorie
LIMIT $start, $limit
...
Wie du das Durchblättern hinbekommst, erfährst du hier:
dclp-FAQ: 17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen
http://www.dclp-faq.de/q/q-mysql-seitenweise.html
Ich bin kein PHP-Spezialist, deshalb bitte ich euch um Hilfe!
Das wird noch! Kauf dir am Besten ein Buch für PHP-Anfänger. Ansonsten gibt es noch das PHP-Handbuch online unter http://de.php.net/manual/de/. Für viele Standard-Fragen und -Probleme gibt es noch die dclp-FAQ unter http://www.dclp-faq.de/.
Viel Erfolg!