Seitenweises Anzeigen

Fuma15

Mitglied
Hey Leute

Euch allen erstmal ein frohes neues Jahr auch wenns etwas spät kommt ^^
.
Kommen wir nun zum Wesentlichen.
Ich bin gerade dabei mir eine seitenweise Anzeige zu erstellen, die mir aus einer Datenbank 25 Datensätze anzeigt und wenn es mehr sind dann ein Weiterbutton bzw. Pfeil oder sonst was erscheint womit ich zur nächten Seite mit den weiteren Datensätzen springen kann.
Ich kann mir gut vorstellen, dass ihr mit diesen Topics genervt werdet weils schon viele davon gibt aber ich kann diese Beispiele nur schwer auf mein Quelltext umschreiben und ich würde mein Quelltext gerne so beibehalten wie er ist und dort weitermachen wo ich gerade bin tja...zur Zeit bin ich irgendwie festgefahren und weiß nicht weiter...ich hoffe ihr könnt mir bei meinem Problem helfen.

hier mein PHP-Code:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Video-Datenbank</title>
		<link rel="stylesheet" type="text/css" href="../css/styles.css">
		<script type="text/javascript" src="../javascript/dbshow.js"></script>
	</head>
	<body>
		<div id="formSearch">
			<form action="<?php $PHP_SELF ?>" method="post">
				<label>Suche nach:</label>&nbsp;<input type="Text" name="suchanfrage" size="24" maxlength="60">&nbsp;
				<label>Suchkriterium:</label>&nbsp;<select name='suchkrit'>
        										<option value='titel'>Titel</option>
							        			<option value='typ'>Typ</option>
							        			<option value='genre'>Genre</option>
								       			<option value='sonstiges'>Bemerkungen</option>
											</select>&nbsp;
				<label>Sortieren nach:</label>&nbsp;<select name='sort'>
							        			<option value='titel'>Titel</option>
							        			<option value='typ'>Typ</option>
							        			<option value='genre'>Genre</option>
											</select>&nbsp;<input type="Submit" name="suche" value="Suche">
			</form>
		</div>
		
		<div id="tabShow">
			<table>
				<?php
					$host=localhost;
					$user=root;
					$pwd="";
					$db=videodb;
					
					$mysqli=new mysqli($host, $user, $pwd, $db);
					
					if(mysqli_connect_errno()){
						printf("Verbindung zur Datenbank fehlgeschlagen:\n %s\n", mysqli_connect_error());
					}else{
						$query="select * from filme";
						
						if(!mysqli_real_query($mysqli,$query)){
							printf("Fehler bei Abfrage:\n %s\n", mysqli_error($mysqli));
						}else{
							$result=mysqli_store_result($mysqli);
							if(mysqli_num_rows($result)==0){
								echo 	"<tr>
											<td colspan='5'>Es wurden keine Filme gefunden.</td>
										</tr>";
							}else{
								
								$rows=1;
								$lines=1;
								
								while($row=mysqli_fetch_row($result)){
									if($rows==1){
										echo 	"<tr>";	
									}
									if($rows<6){
										echo "<td>
												<span>
													<img src=\"".$row[5]."\" onMouseover=\"sleep('l".$lines."r".$rows."', false);\" onMouseout=\"sleep('l".$lines."r".$rows."', true);\">
													<span class=\"bereich\" style=\"display:none;\" id=\"l".$lines."r".$rows."\">
														<div class=\"beschreibung\">
															Nr: ".$row[0]."<br>
															Titel: ".$row[1]."<br>
															Typ: ".$row[2]."<br>
															Genre: ".$row[3]."<br>
															Bemerkungen: ".$row[4]."<br>
														</div>
													</span>
												</span>
												</td>";
												$rows++;
										if($rows==6){
											echo "</tr>";
											$rows=1;
											$lines++;
										}
									}
									if($rows==6 && $lines==6){
										//TODO
									}
								}
								echo "</tr>";
								mysqli_free_result($result);
								mysqli_close($mysqli);	
							}
						}
					}
				?>	
			</table>
		</div>
	</body>
</html>

Falls die CSS-Styles bzw. JavaScript-Funktionen notwenidg sind gebe ich sie per Anfrage noch dazu.

MFG Fuma15
 
Hi!
Um das zu realisieren benötigst du:
  • Limit: Anzahl der Einträge pro Seite
  • Offset: Anzahl der Einträge, die ausgelassen werden
  • Aktuelle Seite
Offset berechnen:
PHP:
$offset = ($seite - 1) * $limit;
Danach fügst du eine LIMT-Angabe deinem SQL-Statement hinzu.
PHP:
$sql = "SELECT * FROM   table LIMIT $offset, $limit";

Mfg
 
An der stelle des TODO soll dieser Sprung reingemacht werden ich weiß nur nicht ganz wie ich das realisieren soll.

Ist die Variable $seite schon irgendwo initialisiert?
Es geht mir ja darum die einträge nicht wegzulassen sondern auf einer 2. bis n. Seite fortzuführen
 
Hi,

PHP:
<?php
$seite = $_GET['seite'];
?>

Dann musst du die Seite mit bla.php?seite=1 aufrufen. Dabei wird auch nichts weggelassen, sondern halt nur das angezeigt, was halt auf der Seite stehen soll ;)


Lg
 
Ich habe so gut wie möglich versucht eure Tipps umzusetzen allerdings wurde ich etwas falsch verstanden.

Es wird mir zwar auf der ersten Seite nur 25 Elemente angezeigt allerdings werden die anderen nicht mehr angezeigt weil es keine Rester mehr gibt.

Aber das ist nicht das was ich wollte
Hier mein Quelltext:

PHP:
<?php
				
					if(!isset($_GET[seite])){
						$_GET[seite]=1;
					}
					$host=localhost;
					$user=root;
					$pwd="";
					$db=videodb;
					$seite=$_GET[seite];
					$limit=25;
					$offset=($seite-1)*$limit;
					
					echo $offset;
					
					$mysqli=new mysqli($host, $user, $pwd, $db);
					
					if(mysqli_connect_errno()){
						printf("Verbindung zur Datenbank fehlgeschlagen:\n %s\n", mysqli_connect_error());
					}else{
						$query="select * from filme limit $offset, $limit";
						
						if(!mysqli_real_query($mysqli,$query)){
							printf("Fehler bei Abfrage:\n %s\n", mysqli_error($mysqli));
						}else{
							$result=mysqli_store_result($mysqli);
							if(mysqli_num_rows($result)==0){
								echo 	"<tr>
											<td colspan='5'>Es wurden keine Filme gefunden.</td>
										</tr>";
							}else{
								
								$rows=1;
								$lines=1;
								
								while($row=mysqli_fetch_row($result)){
									if($rows==1){
										echo 	"<tr>";	
									}
									if($rows<6){
										echo "<td>
												<span>
													<img src=\"".$row[5]."\" onMouseover=\"sleep('l".$lines."r".$rows."', false);\" onMouseout=\"sleep('l".$lines."r".$rows."', true);\">
													<span class=\"bereich\" style=\"display:none;\" id=\"l".$lines."r".$rows."\">
														<div class=\"beschreibung\">
															Nr: ".$row[0]."<br>
															Titel: ".$row[1]."<br>
															Typ: ".$row[2]."<br>
															Genre: ".$row[3]."<br>
															Bemerkungen: ".$row[4]."<br>
														</div>
													</span>
												</span>
												</td>";
												$rows++;
										if($rows==6){
											echo "</tr>";
											$rows=1;
											$lines++;
										}
										if($lines==6){
											$lines=1;
										}
										if($offset>0){
											echo "<tr>";
												echo "<td colspan='2'></td>";
												echo "<td colspan='2'><a href='eintrag.php?m2=$n'><center><img src='left.gif' alt= 'zur?ck' border='0'></center></a></td>";
												echo "<td colspan='2'><a href='eintrag.php?m=$n'><center><img src='right.gif' alt= 'weiter' border='0'></center></a></td>";
											echo "</tr>";
										}
									}
								}
								echo "</tr>";
								mysqli_free_result($result);
								mysqli_close($mysqli);	
							}
						}
					}
				?>

Ich möchte:
- nur 25 Einträge auf einer Seite
- wenn es mehr als 25 Einträge sind sollen der link für "vor" und "zurück" eingeblendet werden
- auf der 2. Seiten soll es dann mit dem 26. Element weitergehen

Danke für eure Hilfe

MFG

Fuma15
 
PHP:
<?php
if($offset>0){ 
            echo "<tr>"; 
            echo "<td colspan='2'></td>"; 
            echo "<td colspan='2'><a href='eintrag.php?m2=$n'><center><img src='left.gif' alt= 'zur?ck' border='0'></center></a></td>"; 
            echo "<td colspan='2'><a href='eintrag.php?m=$n'><center><img src='right.gif' alt= 'weiter' border='0'></center></a></td>"; 
            echo "</tr>";
}
?>

Wenn du das so machst bekommst du ja auch nur die "Vor"- und "Zurück"-Links angezeigt wenn du auf Seite 2 oder höher bist (offset = Seite -1). Ob es mehr als 25 Einträge sind würde ich eher mit mysqli_num_rows() prüfen. Außerdem kommst du wenn du auf die Links klickst auf die Seite eintrag.php?m2=bla obwohl du auf die Seite eintrag.php?seite=bla müsstest (damit die Variable $seite nen Wert zugewiesen bekommt).

Lg
 
Zuletzt bearbeitet:
Habe meinen Quelltext jetzt so gut wie zum Laufen gebracht.
Jetzt habe ich nur noch eine Sache, die ich unbedingt verarbeiten soll.
Ist es möglich die Anzahl der Seiten die durch mein abgesetzten Select-Kommando entstehen abzuprüfen?

Und zwar soll dem Nutzr angezeigt werden, dass er sich auf Seite a von n befindet wie kann ich das realisieren...geht das überhaupt?

hier erstmal einmal mehr mein Quelltext:

PHP:
<?php
				
					if(!isset($_GET[seite])){
						$_GET[seite]=1;
					}
					$host=localhost;
					$user=root;
					$pwd="";
					$db=videodb;
					$seite=$_GET[seite];
					$limit=25;
					$offset=($seite-1)*$limit;
					$anz_lines=0;
					
					$mysqli=new mysqli($host, $user, $pwd, $db);
					
					if(mysqli_connect_errno()){
						printf("Verbindung zur Datenbank fehlgeschlagen:\n %s\n", mysqli_connect_error());
					}else{
						$query="select * from filme limit $offset, $limit";
						
						if(!mysqli_real_query($mysqli,$query)){
							printf("Fehler bei Abfrage:\n %s\n", mysqli_error($mysqli));
						}else{
							$result=mysqli_store_result($mysqli);
							if(mysqli_num_rows($result)==0){
								echo 	"<tr>
											<td colspan='5' style='width:100%;'>Es wurden keine Filme gefunden.</td>
										</tr>";
							}else{
								
								$rows=1;
								$lines=1;
								
								while($row=mysqli_fetch_row($result)){
									if($rows==1){
										echo 	"<tr>";	
									}
									if($rows<6){
										echo "<td>
												<span>
													<a href='./edit.php?nr=$row[0]'><img src=\"".$row[5]."\" onMouseover=\"sleep('l".$lines."r".$rows."', false);\" onMouseout=\"sleep('l".$lines."r".$rows."', true);\"></a>
													<span class=\"bereich\" style=\"display:none;\" id=\"l".$lines."r".$rows."\">
														<div class=\"beschreibung\">
															Nr: ".$row[0]."<br>
															Titel: ".$row[1]."<br>
															Typ: ".$row[2]."<br>
															Genre: ".$row[3]."<br>
															Bemerkungen: ".$row[4]."<br>
														</div>
													</span>
												</span>
												</td>";
												$rows++;
																								
										if($rows==6){
											echo "</tr>";
											$rows=1;
											$lines++;
										}
										
										if($lines==6){
											$anz_lines=6;
											$lines=1;
										}
									}
								}
								echo "</tr>";
								
								echo "<tr>";
									echo "<td colspan='2'></td>";
									if($_GET[seite]>1){
										echo "<td colspan='2'><a href='anzeige.php?seite=".($_GET[seite]-1)."'><center><img src='left.gif' alt= 'zur&uuml;ck' border='0'></center></a></td>";	
									}
									if($anz_lines==6){
										echo "<td colspan='2'><a href='anzeige.php?seite=".($_GET[seite]+1)."'><center><img src='right.gif' alt= 'weiter' border='0'></center></a></td>";		
									}
								echo "</tr>";
								
								mysqli_free_result($result);
								mysqli_close($mysqli);	
							}
						}
					}
				?>

Ich bin für jede Hilfe dankbar die ich bekomme.

MFG Fuma15

PS: PHyro du hast mir sehr geholfen danke sehr. Allerdings ging der Vorschlag mit dem mysqli_num_rows() schief ,da er sowieso nur bis 25 zählt und auf der nächsten Seite neu zählt. Hab aber nen Ausweg gefunden. Danke trotzdem für deine Hilfe ^^
 
Dazu benötigst du die Gesamtanzahl der Datensätze. Dann berechnest du die Seitenanzahl folgendermaßen:
PHP:
$seiten = ceil($gesamtanzahl / $limit);
Eigentlich ganz logisch oder? ;)
 
PS: PHyro du hast mir sehr geholfen danke sehr. Allerdings ging der Vorschlag mit dem mysqli_num_rows() schief ,da er sowieso nur bis 25 zählt und auf der nächsten Seite neu zählt. Hab aber nen Ausweg gefunden. Danke trotzdem für deine Hilfe

Freut mich zu hören :) Da hast du natürlich Recht dass das mit mysqli_num_rows nicht funktioniert, hab ich garnicht dran gedacht :D

Für die Seitenanzahl so würde ich es egnauso machen wie mstup.

Lg
 
Zurück