WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Seitenausgabe zurück|1 2 3|weiter » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Seitenausgabe zurück|1 2 3|weiter
von Omega2k
hast auch wieder recht...
aber das alles jetzt auf die Schnelle zu erklären ist glaub ich mal nicht möglich...

Grundsätzlich muss man eben beim Generieren nur darauf achten, dass es 2 Möglichkeiten gibt:

$seiten_gesamt<=$link_anzahl oder nicht...

D.h. wenn die Gesamtzahl aller Seiten maximal so groß ist wie die Seitenverweise, die angezeigt werden sollen, macht das << und >> (oder "zurück" und "weiter") sowie der Sprung zur letzten oder ersten Seite keinen Sinn... also fällt es da weg.

Andernfalls (wenn $seiten_gesamt>$link_anzahl) muss nur die aktuelle Seite überprüft werden...

D.h. man errechnet die Spanne von wo bis wo die Links gehen sollen ...|2|3|4|... also von 2 bis einschließlich 4. und falls der Startwert (hier 2) eben größer als 1 ist, macht es schon Sinn an Anfang einfach das <<|1|... anzuhängen... das gleiche gilt für das Ende.
Also wenn das Ende der Spanne (hier 4) kleiner als die "gesamte Seitenanzahl-1" ist (z.B. wenn wir hier 10 Seiten hätten, kommt an das Ende einfach ...|10|>>

Das mit der Funktion eval("\$link .= \"".$layout['frst_page']."\";"); ist etwas vereinfacht nur das gleiche wie $string="Hallo $username, wie gehts"; --------> da wird ja dann auch $username durch die gerade gesetzte Variable ersetzt... bei EVAL hat es nur den Vorteil, dass man die Strings aus der MySQL oder wie hier (was eigentlich identisch ist) aus einem Array...
von languitar
Is ja schön und gut, aber wenn er deine Funktion jetzt einfach einbindet, hat er auch nichts gelernt.
von Omega2k
Ich glaub mal nicht, dass es NUR um das LIMIT geht, in der DB... das leuchtet glaub schon ein, wie ("...LIMIT $starteintrag,$laenge") funktioniert, oder? Nur beachten, dass $starteintrag = 0 für die 1. Zeile, NICHT 1!

So, jetzt zum Hauptproblem! Das Auflisten der Seiten und der Verweise:
Dafür hab ich mir grad mal schnell eine Funktion geschrieben, die vorab alles definieren lässt...

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60:
function seiten_link($seiten_nummer=1,$seiten_gesamt=1,$pro_seite=5,$link_anzahl=3){
	$SELF=$_SERVER['PHP_SELF']; if($seiten_gesamt==0)$seiten_gesamt=1;
	
	$layout['actv_page'] = '<b>$i</b>';
	$layout['next_page'] = '<a href=\"$SELF?seite=$page_\">&gt;&gt;</a>';
	$layout['prev_page'] = '<a href=\"$SELF?seite=$page_\">&lt;&lt;</a>';
	$layout['frst_page'] = '<a href=\"$SELF?seite=0\">1</a>';
	$layout['last_page'] = '<a href=\"$SELF?seite=$page_\">$seiten_gesamt</a>';
	$layout['page_link'] = '<a href=\"$SELF?seite=$page_\">$i</a>';
	$layout['spac_page'] = '...';
	$layout['spac_link'] = '|';
	$layout['star_link'] = 'Seite $seiten_nummer/$seiten_gesamt [';
	$layout['ende_link'] = ']';

	eval("\$link = \"".$layout['star_link']."\";");
	if ($seiten_gesamt<=$link_anzahl){
		for ($i=1;$i<=$seiten_gesamt;$i++){
			if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
			else { $page_=$i-1;    eval("\$link .= \"".$layout['page_link']."\";"); }
			if($i<$seiten_gesamt)  eval("\$link .= \"".$layout['spac_link']."\";");
		}
		eval("\$link .= \"".$layout['ende_link']."\";");
	}else{
		$anfang=$seiten_nummer-1;
		$ende=$anfang+$link_anzahl-1;
		if ($anfang<1){
			$ende=$ende+1;
			$anfang=1;
		}
		if (($anfang+$link_anzahl-1)>=$seiten_gesamt){
			$anfang=$seiten_gesamt-$link_anzahl+1;
			$ende=$seiten_gesamt;
		}
		if ($anfang>1){
			$page_=$seiten_nummer-2;
			eval("\$link .= \"".$layout['prev_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			eval("\$link .= \"".$layout['frst_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			eval("\$link .= \"".$layout['spac_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
		}
		for ($i=$anfang;$i<=$ende;$i++){
			if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
			else{$page_=($i-1);    eval("\$link .= \"".$layout['page_link']."\";");}
			if($i<$seiten_gesamt)  eval("\$link .= \"".$layout['spac_link']."\";");
		}
		if(($seiten_nummer+$link_anzahl-1)<=$seiten_gesamt){
			eval("\$link .= \"".$layout['spac_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			$page_=($seiten_gesamt-1);
			eval("\$link .= \"".$layout['last_page']."\";");
			eval("\$link .= \"".$layout['spac_link']."\";");
			$page_=$seiten_nummer;
			eval("\$link .= \"".$layout['next_page']."\";");
		}
		eval("\$link .= \"".$layout['ende_link']."\";");
	}
	return $link;
}


Zur Verwendung:

Die Arrays oben kann man frei definieren, lediglich die $variablen MÜSSEN so bleiben, logisch, weil sonst EVAL nicht klappt... Aber alles drumrum - kannste anpassen wie Du willst. Nacher im Programm selbst wird dann diese Kette automatisch mit Folgenden Angaben generiert:

1:
$string = seiten_link($seiten_nummer,$seiten_gesamt,$pro_seite,$link_anzahl);


Wobei:
$seiten_nummer = die aktive Seite ist (also von 1 - letzte Seite, NICHT VON 0 AB)
$seiten_gesamt = Anzahl der Seiten, am Besten mit
1:
ceil($alle_eintraege/$pro_seite)
berechnen, klappt am besten...
$pro_seite = Wieviele Einträge pro Seite angezeigt werden sollen
$link_anzahl = Anzahl der Links (z.B. 3 = [1|2|3|...|8|>>] oder 5 = [1|2|3|4|5|...|8|>>] und natürlich mitten drin auch... [<<|1|...|4|5|6|7|8|...|12|>>] nur als Beispiel...

PS: Ach ja wenn noch genug Einträge reinkommen... (ist nur ein Prototyp) - dann könnt Ihr hier ne DEMO sehen: http://omega2k.dyn.ee:592/guestbook/guestbook.php
von languitar
Guck doch mal in einem MySQL-Handbuch nach der Syntax für LIMIT. Das ist recht selbsterklärend.
von Can
Das Limit soll aber nicht 5 sein, sondern $i, 5 (oder so ähnlich)!
von MajorWindbeutel
Das Limit ist bei mir 5 und im script mein ich hab ich auch alles richtig angepasst
von languitar
dann geht er die Datensätze nicht nach der Seite durch. Das musst du natürlich bei deinem DB-Query mit LIMIT anpassen.
von MajorWindbeutel
Danke an CSS hab ich auch schon gedacht allerdings hat das script bei mir nicht ganz richtig funktioniert. er hat zwar mehrer Seiten erstellt aber überall standen die selben 5 einträgen
von languitar
Du musst doch einfach nur überall noch das stylesheet style="color:white" mitschicken.
von MajorWindbeutel
Wie man sachen normal einfärbt weiß ich doch das hat bei den zahlen aber nicht geklappt
von MajorWindbeutel
Das hab ich probiert das ging nicht mit center hat das in die mitte stellen auch nicht geklapt die standen dan alle untereinander etwas so:

<
1
2
3
>

nur halt in der mitte also versteht meine einfärbungs frage nicht falsch
von Can
Ja, es ist wirklich kaum zu glauben...

Eigentlich sollte ich das ja nicht tun, aber, hier:

<font color="#FFFFFF">Alles hierzwischen ist weiß.</font>
von languitar
bitte wie? Das ist doch ganz normales HTML, wenn du die Zahlen umfärben willst!
von MajorWindbeutel
Ich Hab noch ma ne frage dazu wie bekomme ich die zahlen 123 usw
in dem script weiß alles andere hab ich schon angepasst nur das mit den zahlen klappt nicht
von MajorWindbeutel
Ich Hab noch ma ne frage dazu wie bekomme ich die zahlen 123 usw
in dem script weiß alles andere hab ich schon angepasst nur das mit den zahlen klappt nicht
von Can
Ja klar, aber sollte man es nicht so programmieren, dass es auch bei größeren Gästebüchern schnell ist?

Bei einem normalen Gästebuch macht es sicher kaum was aus, aber nehmen wir mal an, man programmiert einen GB-Service, wo eine Seite mehrere hundert Gästebücher verwaltet, dessen ID als Parameter übergeben wird. Da könnte es dann schon anderst aussehen, wenn es mehrere hundert GBs mit je hundert Einträgen sind

Can
von deden
jo, vielen Dank Leute für die schnellen und guten Antworten, konnte einige gebrauchen mein Script funktioniert jetzt. THX
von MCM
Dies was der länger dafür braucht, ist so gering, dass es nix ausmacht (es sei denn, du hast ein paar tausen einträge). Und was ich geschrieben hab, ist einfach kürzer.


---
cya MCM

[Je mehr Bürger mit Zivilcourage ein Land hat, desto weniger Helden wird es einmal brauchen]
[by Franca Magnani]
von languitar
Can schrieb am 14.05.2003 18:10
Waaahhh...armer Server! Nimm lieber das:

1: 
2: 
3:
$query = "SELECT count(*) FROM `guestbook`";
$result = mysql_query($query,$connection);
$gesamt = mysql_result($result,0);


Hey danke, den kannte ich noch nicht. Hab ich sofort umgebaut!
von Can
....nur mit dem Unterschied, dass bei deiner (eurer) Methode erst der Inhalt aller Zeilen aus der MySQL-Datenbank angefordert werden, damit sie dann einfach nur gezählt werden, und bei mir nur das abgefragt wird, was man wissen möchte; also die Anzahl der Zeilen.
von MCM
Tja, wie ich halt gesagt hab nur mit code.
Zum zählen nehm ich aber was anderes

1:
$seiten = mysql_num_rows(mysql_query("SELECT * FROM gb")):


Ist halt kürzer


---
cya MCM

[Je mehr Bürger mit Zivilcourage ein Land hat, desto weniger Helden wird es einmal brauchen]
[by Franca Magnani]
von MCM
Tja, wie ich halt gesagt hab nur mit code.
Zum zählen nehm ich aber was anderes

1:
$seiten = mysql_num_rows(mysql_query("SELECT * FROM gb")):


Ist halt kürzer


---
cya MCM

[Je mehr Bürger mit Zivilcourage ein Land hat, desto weniger Helden wird es einmal brauchen]
[by Franca Magnani]
von Can
Waaahhh...armer Server! Nimm lieber das:

1: 
2: 
3:
$query = "SELECT count(*) FROM `guestbook`";
$result = mysql_query($query,$connection);
$gesamt = mysql_result($result,0);
von languitar
Hier, $pageentries bei dir = 5:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8:
//Berechnung der Einträge für die aktuelle Seite
$anfang = ($seite - 1) * $pageentries;
$ende = $anfang + $pageentries;
$query = "SELECT * FROM guestbook";
$result = mysql_query($query,$connection);
$gesamt = mysql_num_rows($result);
$seiten = ceil($gesamt / $pageentries);
$eintragnow = $gesamt - $anfang;


Und dann die Seitenanzeige:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24:
//Pfeilnavigation links
if ($seite > 1) {
	echo "<a href="index.php?show=guestbook&seite=" . ($seite-1) . "">&lt;&lt;</a>";
} else {
	echo "&lt;&lt;";
};

//Zahlenleiste
echo "&nbsp;|";
for ($i=1;$i<=$seiten;$i++) {
	if ($i == $seite) {
    	echo "&nbsp;<a href="index.php?show=guestbook&seite=$i"><b>$i</b></a>";
    } else {
    	echo "&nbsp;<a href="index.php?show=guestbook&seite=$i">$i</a>";
    };
};
echo "&nbsp;|";

//Pfeilnavigation rechts
if ($ende < $gesamt) {
	echo "&nbsp;<a href="index.php?show=guestbook&seite=" . ($seite+1) . "">&gt;&gt;</a>";
} else {
	echo "&nbsp;&gt;&gt;";
};

Gruß
Johannes
von Can
Und so in der Art müsste die Query aussehen, damit auch der richtige Bereich angezeigt wird.

1: 
2: 
3: 
4:
$cnt=5; //Die Anzahl der Einträge auf einer Seite
$i=$cnt*($seite-1); //Der erste anzuzeigende Eintrag

$query=mysql_query("SELECT text FROM `blubber` LIMIT $i,$cnt");


Can
von MCM
Anzahl aller beiträge holen, den wert durch 5, dann aufrunden somit hast du die anzahl deiner seiten.

dann ne schleife. wo var2 = 1 und i = 1 ist

solange i <= Seitenanzahl ist schreibe <a href="xy?seite=var2">i</a> i++ , var2 + 5

somit zeigt der dier alle seiten an und verlinkt diese auch ;)
Code hab ich irgendo, find ich aber net. Hoffe du kommst mit dem prinzip klar


---
cya MCM

[Je mehr Bürger mit Zivilcourage ein Land hat, desto weniger Helden wird es einmal brauchen]
[by Franca Magnani]
von deden
Hallo zusammen,

Ich arbeite derzeit an einem neuen Script, eigentlich mit einem Gästebuch vergleichbar (um es mal kurz zu erklären ^^). Jetzt möchte ich gerne die Ergebnisse Seitenweise ausgeben und zwar pro Seite 5. Die Daten werden aus einer MySQL-DB ausgelesen. Die Links Weiter und Zurück sind kein Problem, allerdings möchte ich die einzelnen Seiten noch ausgeben, das ganze sollte so aussehen.

<<zurück | 1 2 3 4 5 6 | weiter>>

Gut wäre es auch noch wenn die aktuelle Seite dann Fett wäre.
Könnte mir vielleicht jemand sagen wie ich so etwas hinbekomme, danke schonmal ;)

Nach oben