MySql - Ausgabe pro Seite auf Max Zahl begrenzen, aber wie?

Divo1984

Erfahrenes Mitglied
Hallo,

ich mal wieder, bin noch ziemlich neu in dem Bereich daher bitte ich um Nachsicht:-)

Ich habe jetzt folgenden Code:

PHP:
<?php include("header.php");?>


<?php if(!isset($_SESSION['uname'])){

    echo"Dieser Bereich ist nur für eingeloggte Mitglieder sichtbar!";
    }else{
    
    if(isset($do)=="") $do="list";?>
    
    
<?php 
    

    if($do=="list"){
        
        $sql = "SELECT * FROM beats ORDER BY id";
        $abfrage = mysqli_query($verbindung, $sql);
        echo"Überschrift<br><br>";
        
            while($beats = mysqli_fetch_assoc($abfrage)){
            
            echo"<font color='#b8860b'>{$beats['id']}</font>"; 
            echo"<font color='#b8860b'>{$beats['uname']}</font>";
            echo"<font color='#b8860b'>{$beats['bname']}</font>";
            echo"<br>";

            
        }
            echo"<br>";
            echo"<br>";
            echo"<br>";
            echo"Hier der Link zum Upload!";
    
    }
    
    
}?>


<?php include("footer.php");?>

Jetzt ist meine Frage:

Wie kann ich die Ausgabe auf eine maximale Zahl z. B. 25 pro Seite begrenzen und eine dynamische Linkleiste erzeugen die je nach Anzahl der vorhandenen Daten in der Datenbank ausgibt wieviele Seiten vorhanden sind?

Kann mir da jemand weiterhelfen?
 
Zuletzt bearbeitet:
Am besten suchst du dir ein Tutorial. Ich hab grad keine Lust einen grossartigen Code hier zu erstellen.
Bei der DB-Abfrage kannst du mit LIMIT den Bereich engrenzen.

Hier habe ich mal vor langem ein Coder allgemeiner Natur erstellt. ev. kannst du damit etwas anfangen
http://wiki.yaslaw.info/wikka/PhpJumpNavigator
Und hier ist das Script als Beispiel
http://yaslaw.info/example/navigator.php

PS: Du kannst meine Klasse Navigator übenrehmen und mit der DB-Resultaten füttern
 
Für die Begrenzun kann man den LIMIT-Befehl verwenden.
Und für die Anzahl aller Datensätze kannst du folgenden Befehl verwenden:
SQL:
SELECT COUNT(*) FROM your_table


Sehe gerade, yaslaw hat schon geantwortet. Naja zu langsam.
 
So ich habe das mit der Begrenzung jetzt hinbekommen, das war ja noch leicht!

@yaslaw der Code bringt mir grad net viel:-( Und ein Tutorial finde ich auch net:-(

das was ich jetz noch brauche ist eine "Linkleiste" die halt dynamisch reagiert wieviele Einträge in der Datenbank sind!

Sind z. B. <= 25 Einträge drin, brauche ich nur nen Link "1" sollten aber mehr als 25 Einträge in der DB sein brauche ich nen zweiten Link "2", bei mehr als 50 "3" usw...

Wie kann ich das verwirklichen?
 
Wenn du auf LIMIT verzichten willst, dann kannst du meine Klasse so anwenden
PHP:
<?php
//Einbinden der Navigation-Klasse
include_once('navigator.php');

//Settings
define('C_ITEM_PER_PAGE', 25);
define('C_NAV_RANGE', 4);
define('C_GET_NAV_PARAM', 'pageNr');


//$_GET auswerten
$currentPageNr = $_GET[C_GET_NAV_PARAM];
if (!$currentPageNr) $currentPageNr = 0;


//TODO DB-Daten auslesen: Kein LIMIT verwenden, sondern alle Daten auslesen
//Ich simuliere hier mal die Resultate mit $x Einträgen
$rowCount = 30;
for($i = 0; $i < $rowCount; $i++){
    $rows[$i] = "Eintrag #{$i}";
}

//Navigator erstellen
$nav = new Navigator(count($rows), basename(__FILE__), C_ITEM_PER_PAGE, C_NAV_RANGE, C_GET_NAV_PARAM);
$navBar = $nav->jump($currentPageNr);

//Erste anzuzeigende ID auslesen
$firstId = $nav->getFirstItemNrFromPageNr($currentPageNr);

//Dei entsprechenden Zeilen aussuchen
$selectedRows = array_slice($rows, $firstId, C_ITEM_PER_PAGE);

//Datenausgabe
echo $navBar;
echo "<hr />";
echo implode('<br />', $selectedRows);
echo "<hr />";
echo $navBar;

?>

Sorry, hab grad keine Lust eine ganze Anleitung für MySQL-Navigationen zu schreiben.

Nachtrag:
Oder halt einfach googeln nach 'tutorial php mysql page'. Ergibt bei den ersten 4 Treffern bereits 3 Tutorials dazu:
http://www.phpjabbers.com/php--mysql-select-data-and-split-on-pages-php25.html
http://www.php-mysql-tutorial.com/wikis/php-tutorial/paging-using-php.aspx
http://www.designplace.org/scripts.php?page=1&c_id=25
 
Zuletzt bearbeitet:
Das Thema ist zwar ein bisserl veraltet, aber da ich grad eine DB Umsetzung gemacht habe, hier mal mein Code:

PHP:
<?php
//Einbinden der Navigation-Klasse
include_once('class_Navigator.php');
//Datenbank und Config
require 'class_MySql.php';
require 'config.php';
//Settings
define('C_ITEM_PER_PAGE', 1000);
define('C_NAV_RANGE', 12);
define('C_GET_NAV_PARAM', 'pageNr');


//$_GET auswerten
if(isset($_GET[C_GET_NAV_PARAM]))
{
	$currentPageNr = $_GET[C_GET_NAV_PARAM];
}
else 
{
	$currentPageNr = 0;
}

$start = ($currentPageNr == 0) ? 0 : ($currentPageNr) * C_ITEM_PER_PAGE;

$mysql=new MySql;
//Verbindung zur DB
$mysql->con($host, $db, $user, $pw);
//Einträge zählen
$mysql->query("SELECT count(id) anz FROM empfaenger");
$anz = $mysql->fetch_row();
$anz = $anz['anz'];
//entsprechende Einträge mit LIMIT aus der DB holen
$mysql->query("SELECT * FROM empfaenger ORDER BY id ASC LIMIT ".$start.", ".C_ITEM_PER_PAGE."");

while($rows=$mysql->fetch_row())
{	
	//gewählte Daten anzeigen	
	print $rows['id']. " &nbsp;".$rows['username']."<br>";
}
//Navigator erstellen
$nav = new Navigator($anz, basename(__FILE__), C_ITEM_PER_PAGE, C_NAV_RANGE, C_GET_NAV_PARAM);
$navBar = $nav->jump($currentPageNr);

//Navigation einblenden
echo "<hr />";
echo $navBar;

?>

Alles basierend, auf der Class von Yaslaw:)
 
Warum verwendet ihr nicht die entsprechende SQL Funktion?
SQL:
SELECT SQL_CALC_FOUND_ROWS `spalte 1`, `spalte 1`, ...
FROM `Tabelle`
LIMIT 0, 25
SQL:
 SELECT FOUND_ROWS()

Bei COUNT(`id`) müsst ihr aufpassen denn COUNT(`id`) != COUNT(*) ;)
 
Zuletzt bearbeitet von einem Moderator:
Ich verwende count(id) da id mein Primary Key ist und ich somit jede ID zähle! Ist doch ausreichend um zu ermitteln, wieviele Reihen(Einträge) vorhanden sind!

Edit: Ich hätte ebenfalls mysql_NUM_ROWS verwenden können:)
 
Zuletzt bearbeitet:
Zurück