Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
Smooth-Graphics
Threadersteller
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 23.05.2008 00:08
Titel [PHP] Letztes Bild suchen und dann Link nicht mehr anzeigen? |
 |
|
Hey ihr,
folgendes Problem. Aus einer Datenbank werden seitenweise 6 Artikel ausgelesen. Nun soll unten drunter ein Link zur folgenden Seite (mit den nächsten 6 Artikeln) angezeigt werden. Aber eben nur solange, bis auch Daten vorhanden sind.
Ich habe jetzt folgenden Ansatz, nur irgendetwas stimmt nicht, es funktioniert jedenfalls nicht:
Code: |
$row = mysql_fetch_array(...);
$lastArtikel = end($row[ID]);
// Überprüfen ob nicht erste Seite, dann "previous page" Link anzeigen
if($page>'1')
{
echo " <a href=\"#\"><img src=\"imghandler_pageback.png\" alt=\"Eine Seite zurück\" width=\"20\" height=\"20\" /></a> ";
}
// aktuelle Seite anzeigen
echo "Seite $page ";
// Überprüfen ob letzter Artikel angezeigt wird, wenn nicht, "next page" Link anzeigen
if(!ereg($lastArtikel))
{
echo " <a href=\"#\"><img src=\"imghandler_pagenext.png\" alt=\"Eine Seite vorwärts\" width=\"20\" height=\"20\" /></a>";
}
|
Oder habt ihr einen grundsätzlich sinnvolleren Ansatz? Man sollte wohl auch dazu sagen, dass die ID aus der mySQL DB an sich nicht durchgängig ist, da es versch. Bereiche gibt.
|
|
|
|
 |
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 23.05.2008 00:28
Titel
|
 |
|
Du setzt end() nicht korrekt ein, und wenn du das tun würdest dann würdest du trotzdem
nicht den Wert erhalten den du erwartest. end() erwartet als Parameter ein Array, und ist
ID eine Konstante?
Die höchsten Wert der Spalte id könntest du z.b. im Select per MAX erreichen.
Code: | SELECT spalte1, spalte2, MAX(id) as .... |
Das müßtest du dann aber in einem extra Select Statement machen.
In der Regel ermittelt man Werte für eine Pagination in der Art:
Code: | SELECT COUNT(id) as count FROM tabelle |
So erhältst du die Gesamtanzahl der vorhandenn Beiträge.
Diese teilst du durch die Anzahl von zu selektierenden Reihen, also sechs, somit
erhältst du die Anzahl an vorhandenen Seiten...
Zuletzt bearbeitet von m am Fr 23.05.2008 00:41, insgesamt 1-mal bearbeitet
|
|
|
|
 |
Anzeige
|
|
 |
Smooth-Graphics
Threadersteller
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 23.05.2008 01:05
Titel
|
 |
|
Wunderbar, so funktioniert es bestens!
Code: | SELECT COUNT(id) as count FROM tabelle |
Danke m!
|
|
|
|
 |
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 47
Geschlecht:
|
Verfasst Fr 23.05.2008 03:45
Titel
|
 |
|
Dein Script funktioniert. OK, dann könntest du es so lassen.
Aber für's nächste Mal:
Die POSIX-kompatiblen RegExp-Funktionen sind bei weitem langsamer als die Perl-kompatiblen.
Arbeite also besser mit den preg_irgendwas()-Funktionen als mit den ereg_irgendwas()-Funktionen.
und dann gibt es noch Fehler in dem Script:
Du hast die 1 in Quotes gesetzt. Du prüfst hier, ob der Inhalt der Variablen $page kleiner ist als der String 1 und nicht die Zahl 1. Laß die Single-Quotes hier weg.
und:
Hier verwendest du eine nicht definierte Konstante. Nur weil es diese nicht gibt, nimmt PHP einfach mal an, daß du statt dieser Konstante, das Element des assoziativen Arrays $row meinst.
Wenn das error_reporting des Servers strenger eingestellt wird, bekommst du an dieser Stelle eine unschöne Warnung.
Richtig wäre also Folgendes:
EDIT:
Übrigens ist "funktioniert jedenfalls nicht" keine brauchbare Fehlerbeschreibung.
Wenn das nächste Mal ein Problem auftritt, dann beschreib bitte genau, was passiert bzw. was nicht passiert und wenn es eine Fehlermeldung geben sollte, dann poste diese ebenfalls.
Zuletzt bearbeitet von rob am Fr 23.05.2008 03:53, insgesamt 1-mal bearbeitet
|
|
|
|
 |
Smooth-Graphics
Threadersteller
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 23.05.2008 10:10
Titel
|
 |
|
rob hat geschrieben: | Dein Script funktioniert. OK, dann könntest du es so lassen.
Aber für's nächste Mal:
Die POSIX-kompatiblen RegExp-Funktionen sind bei weitem langsamer als die Perl-kompatiblen.
Arbeite also besser mit den preg_irgendwas()-Funktionen als mit den ereg_irgendwas()-Funktionen.
|
Danke, gut zu wissen! Ich habs zwar jetzt im aktuellen Script gar nicht mehr drin, aber falls ich mal wieder so was brauche...
rob hat geschrieben: |
und dann gibt es noch Fehler in dem Script:
Du hast die 1 in Quotes gesetzt. Du prüfst hier, ob der Inhalt der Variablen $page kleiner ist als der String 1 und nicht die Zahl 1. Laß die Single-Quotes hier weg.
|
Stimmt, ja. Flüchtigkeitsfehler, da war vor längerem noch ein String und ich habs dann auf die 1 abgewandelt.
rob hat geschrieben: |
Hier verwendest du eine nicht definierte Konstante. Nur weil es diese nicht gibt, nimmt PHP einfach mal an, daß du statt dieser Konstante, das Element des assoziativen Arrays $row meinst.
Wenn das error_reporting des Servers strenger eingestellt wird, bekommst du an dieser Stelle eine unschöne Warnung.
Richtig wäre also Folgendes:
|
Sorry, das versteh ich jetzt nicht so ganz. $row[ID] ist ein Array (ausgelesen per mysql_fetch_array(); aus einer DB). Damit brauche ich dann doch keine Hochkommatas?
rob hat geschrieben: |
Übrigens ist "funktioniert jedenfalls nicht" keine brauchbare Fehlerbeschreibung.
Wenn das nächste Mal ein Problem auftritt, dann beschreib bitte genau, was passiert bzw. was nicht passiert und wenn es eine Fehlermeldung geben sollte, dann poste diese ebenfalls. |
Hm... ja
Und nochwas: rob, was wär das Forum nur ohne dich?
|
|
|
|
 |
choise
Dabei seit: 01.02.2007
Ort: Würzburg
Alter: 36
Geschlecht:
|
Verfasst Fr 23.05.2008 10:18
Titel
|
 |
|
Smooth-Graphics hat geschrieben: |
Sorry, das versteh ich jetzt nicht so ganz. $row[ID] ist ein Array (ausgelesen per mysql_fetch_array(); aus einer DB). Damit brauche ich dann doch keine Hochkommatas?
|
doch brauchst du.
falls du nach einem index suchst, musst du natürlich keine klammern setzten, allerdings müsste es dann eine zahl sein.
willst du aber einem wert haben, der einem string zugeordnet ist, musst du klammern einfügen.
das was du machst, ist auf eine konstante zurückgreifen
Code: |
$a['a'] = 'hallo';
echo $a['a']; //hallo
echo $a[0]; //hallo
// Konstante:
define ('TEST', 'a');
echo $a[TEST]; // hallo
|
Zuletzt bearbeitet von choise am Fr 23.05.2008 10:19, insgesamt 1-mal bearbeitet
|
|
|
|
 |
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 47
Geschlecht:
|
Verfasst Fr 23.05.2008 10:25
Titel
|
 |
|
PHP Manual:
Zitat: | Falls Sie eine undefinierte Konstante verwenden, nimmt PHP an, dass Sie den Namen der Konstanten selbst meinen, so als ob Sie sie als einen string (CONSTANT vs "CONSTANT") aufgerufen hätten. Falls das passiert, wird Ihnen ein Fehler vom Typ E_NOTICE ausgegeben. Lesen Sie ebenfalls den entsprechenden Manualabschnitt, der erklärt, warum $foo[bar] falsch ist (zumindest solange Sie nicht zuvor bar mittels define() als Konstante definiert haben). |
und hier lesen: http://www.php-faq.de/q/q-fehler-konstante.html
Dein Zugriff auf's Array dauert so 4 bis 5 mal länger und das eventuell ausgebene E_NOTICE sieht für die User natürlich unschön aus. Außerdem könnte es sogar dein Script daran hindern, korrekt weiterzulaufen. Danach könntest du weder eine Session starten, noch Header zum Client senden, da ja bereits eine Ausgabe erfolgt ist.
|
|
|
|
 |
Smooth-Graphics
Threadersteller
Dabei seit: 22.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 23.05.2008 10:38
Titel
|
 |
|
Achso, okay...
|
|
|
|
 |
|
|
 |
Ähnliche Themen |
javascript - div/bild bei mouseover neben link anzeigen
Bild anzeigen und verstecken sowie ändern mit einem Link
Unteranimatin im Movie -> letztes Bild auf Hauptbühne
Wie springt letztes Bild einer GIFani zu index.htm?
Inhalt Anzeigen Mit Link
grafik hinter link anzeigen...
|
 |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|