Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Blätterfunktion mit MySQL
Antwort
 
Themen-Optionen
Alt 15.03.2005, 04:22   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard [PHP] Blätterfunktion mit MySQL

Blätterfunktion mit MySQL


Aufgrund der Tatsache, dass Jann Hendrik zwei Tutorials zum Erstellen von Gästebüchern geschrieben hat, diese aber nur Grundlagen abdecken, habe ich mal eine kleine MySQL-basierte Blätterfunktion gebaut.

Ich erhebe mit diesem Codeschnipsel nicht den Anspruch etwas Effektives oder Unverbesserliches geschaffen zu haben


Zuerst erstellen wir natürlich eine Verbindung zur Datenbank:
PHP-Code:
<?php
 
     
// Einbinden der Konfigurationsdatei 
     
include_once 'config.inc.php';
        
     
// Erstellen der Verbindung zur MySQL-Datenbank  
     
if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
          die( 
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
     }

     if( !
mysql_select_db$_config['database'], $connection ) ) {
          die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                 MySQL-Error: <br />' 
mysql_error() );
     } 

?>
Die Datei "config.inc.php" sieht sinngemäß so aus:
PHP-Code:
<?php

   $_config 
= array();
   
   
$_config['host']     = 'localhost';
   
$_config['database'] = 'scriptarchiv';
   
$_config['user']     = 'root';
   
$_config['password'] = '';

?>
Nun machen wir einige Deklarationen und Initialisierungen
PHP-Code:
<?php

     
// Angabe der anzuzeigenden Datensätze pro Seite
     
$proSeite 3;
     
     
// Deklaration und Initialisierung der Variablen $start. 
     // Sie wird für die Erstellung der Blätterfunktion benötigt
     
$start 0;

?>
Danach beschaffen wir uns die Information wie viele Datensätze uns überhaupt zur Verfügung stehen. In diesem Tutorial verwenden wir diese Zahl nicht wirklich. Sie kann aber z.B. in der später vorgestellten Methode "blaettern" nützlich sein.

PHP-Code:
<?php

     
// Herausfinden, wie viele Datensätze existieren
     
$sql 'SELECT 
                      COUNT(_id) AS anzahl
                FROM
                      archiv_news'
;
                  
     
$res mysql_query($sql) or die( 'Error[SELECT|News]: <br />
                                                      <pre>' 
$sql '</pre>
                                                      <br />
                                                      MySQL-Error: ' 
mysql_error() );
                                       
     
$news mysql_fetch_object($res);
     
$anzahlNews $news->anzahl;

?>
In diesem Tutorial verwenden wir die Variable "$anzahlNews" nur zur Überprüfung des übergebenen Parameters.

Wir erstellen uns eine SQL-Anweisung, welche je nach URL-Parameter ergänz wird. Dabei habe ich mir mal ein feines Konstrukt ausgedacht
Die SQL-Anweisung kann selbstverständlich auch mit einer WHERE-Bedigung ergänzt werden, um z.B. nur Datensätze mit einer bestimmten Gruppe etc. anzuzeigen.
PHP-Code:
<?php

     
// SQL-Anweisung, welche je nach Übergabeparameter erweitert wird    
     
$sql 'SELECT 
                       _id,
                       _titel
                FROM 
                       archiv_news
                LIMIT'
;

?>
Nun das oben angesprochene Konstrukt, um die SQL-Anweisung zu vervollständigen.
Erklärung folgt direkt nach dem Schnipsel.
PHP-Code:
<?php

     
// Vervollständigung der SQL-Anweisung je nach $_GET['start']                  
     
$sql .= ( isset($_GET['start']) 
                  AND
                  
is_numeric($_GET['start'])
                  AND
                  
$_GET['start'] > 0
                  
AND
                  
$_GET['start'] <= $anzahlNews )
            ? 
sprintf' %d, %d'$start $_GET['start'], $proSeite 
            : 
sprintf' %d, %d'0$proSeite ); 

?>
So. Was passiert denn da?
Ich nutze den ternären Operator in einer etwas ausführlicheren Form.

Die bool'sche Bedingung überprüft, ob der übergebene Parameter überhaupt für die SQL-Anweisung geeignet ist. Ist dies der Fall so wird das "LIMIT" mit dem dekrementierten URL-Parameter und der Variable "$proSeite" ergänzt, ansonsten wird einfach explizit angegeben, dass die ersten "$proSeite" Datensätze ausgelesen werden sollen.

Warum wird dort dekrementiert?
Weil wir ein "LIMIT 0, 3" brauchen, um die ersten drei Datensätze auszulesen. Da der Parameter aber minimal 1 ist (der Übersichtlichkeit halber) müssen wir den Wert um eins verringern

Aber da geschieht ja noch etwas.
In diesem Ausdruck hier
PHP-Code:
<?php

   sprintf
' %d, %d'$start $_GET['start'], $proSeite )

?>
wird der Variablen "$start" der Wert des dekrementierten URl-Parameters zugewiesen. Wir werden diesen Wert in der Funktion "blaettern" verwenden.

Vorher schicken wir aber erstmal die SQL-Anweisung an die Datenbank und geben die selektierten Datensätze aus.
PHP-Code:
<?php

     $res 
mysql_query($sql) or die( 'Error[SELECT|News]: <br />
                                                     <pre>' 
$sql '</pre>
                                                     <br />
                                                     MySQL-Error: ' 
mysql_error() );
        
       
     
// Anzeige der selektierten Datensätze
     
echo '<ul>';
     while( 
$news mysql_fetch_object($res) ) {
          
printf'<li>%d. <a href="%s">%s</a></li>'
                    
$news->_id,
                    
$_SERVER['PHP_SELF'] . '?news=' $news->_id,
                    
$news->_titel );                  
     }
     echo 
'</ul>';

?>
Und jetzt kommt die mysteriöse Funktion "blaettern"
Hier kann man sicherlich noch einiges einfügen, umändern und vor allem an die eigenen Bedürfnisse anpassen. Ich stelle hier einfach mal meine simple version vor:
PHP-Code:
<?php


     
// Funktion zur Erzeugung der Verweise
     
function blaettern$start$proSeite$gesamtzahl ) {

          
$vorige   '';
          
$naechste '';
          
          
// "nächste Seite"
          
if( ($start $proSeite) <= $gesamtzahl ) {
               
$naechsteStart $start $proSeite;
               
$link sprintf'%s?start=%d'
                                     
$_SERVER['PHP_SELF'],
                                     
$start $proSeite );
                                
               
$naechste sprintf'&raquo; <a href="%s">Datensätze %d bis %d</a> &raquo;'
                                            
$link,
                                            
$naechsteStart
                                            
$naechsteStart $proSeite );
          }
          
          
// "vorige Seite"
          
if( ($start $proSeite) > ) {
               
$vorigeStart $start $proSeite;
               
$link sprintf'%s?start=%d'
                                     
$_SERVER['PHP_SELF'],
                                     
$start $proSeite );
               
               
$vorige sprintf'&laquo; <a href="%s">Datensätze %d bis %d</a> &laquo;'
                                         
$link,
                                         
$vorigeStart
                                         
$vorigeStart $proSeite -);        
          }
          
          return 
sprintf'%s aktuell: [%d bis %d] %s',
                              
$vorige,
                              
$start,
                              
$start $proSeite 1,
                              
$naechste );  
     } 

     echo 
blaettern( ++$start$proSeite$anzahlNews );

?>

Der Übergabeparameter "$gesamtzahl" wird, wie oben schon angedeutet, nicht verwendet. Man könnte ihn aber z.B. dafür verwenden die Seitenanzahl zu bestimmen
Code:
$seiten = ceil( $gesamtzahl / $proSeite );
und dann damit etwas herumzuspielen

In der Funktion passiert eigentlich nichts Aufregendes. Wie man eventuell merkt hat es mir die Funktion sprintf angetan.
Man muss sich einfach nur mal den Manualeintrag anschauen und man wird die Funktion "blaettern" schnell verstehen.

Da ich bestrebt bin auch Anfänger die Arbeit mit dem Manual "aufzuzwingen" gehe ich jetzt auch nicht weiter auf die Funktion ein.


Um das Tutorial ohne Probleme direkt testen zu können folgt nun ein SQL-Export, den ihr einfach nur per importieren müsst und der komplette Quellcode.

Code:
# 
# Tabellenstruktur für Tabelle `archiv_news`
# 

CREATE TABLE IF NOT EXISTS `archiv_news` (
  `_id` int(5) NOT NULL auto_increment,
  `_titel` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`_id`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;

# 
# Daten für Tabelle `archiv_news`
# 

INSERT INTO `archiv_news` (`_id`, `_titel`) VALUES (1, 'Unterschied zwischen HTML und XHTML'),
(2, 'RSS-Feeds leicht gemacht'),
(3, 'Mozilla Thunderbird vs. MS Outlook'),
(4, 'Testbericht: Notebook "Dell Inspiron 6000"'),
(5, 'Informationen zum Einstein-Jahr'),
(6, 'Wozu braucht man eigentlich XML?'),
(7, 'Internettelefonie auf dem Vormarsch'),
(8, 'Umfrage: Wer wird deutsche Fußballmeister 2005?'),
(9, 'Studium vs. Ausbildung'),
(10, 'Stefan Kuntz neuer Sportmanager des TuS Koblenz');
PHP-Code:
<?php
 
     
// Einbinden der Konfigurationsdatei 
     
include_once 'config.inc.php';
     
     
// Funktion zur Erzeugung der Verweise
     
function blaettern$start$proSeite$gesamtzahl ) {

          
$vorige   '';
          
$naechste '';
          
          
// "nächste Seite"
          
if( ($start $proSeite) <= $gesamtzahl ) {
               
$naechsteStart $start $proSeite;
               
$link sprintf'%s?start=%d'
                                     
$_SERVER['PHP_SELF'],
                                     
$start $proSeite );
                                
               
$naechste sprintf'&raquo; <a href="%s">Datensätze %d bis %d</a> &raquo;'
                                            
$link,
                                            
$naechsteStart
                                            
$naechsteStart $proSeite );
          }
          
          
// "vorige Seite"
          
if( ($start $proSeite) > ) {
               
$vorigeStart $start $proSeite;
               
$link sprintf'%s?start=%d'
                                     
$_SERVER['PHP_SELF'],
                                     
$start $proSeite );
               
               
$vorige sprintf'&laquo; <a href="%s">Datensätze %d bis %d</a> &laquo;'
                                         
$link,
                                         
$vorigeStart
                                         
$vorigeStart $proSeite -);        
          }
          
          return 
sprintf'%s aktuell: [%d bis %d] %s',
                              
$vorige,
                              
$start,
                              
$start $proSeite 1,
                              
$naechste );  
     }     
     
     
     
// Erstellen der Verbindung zur MySQL-Datenbank  
     
if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
          die( 
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
     }

     if( !
mysql_select_db$_config['database'], $connection ) ) {
          die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                 MySQL-Error: <br />' 
mysql_error() );
     } 
  
     
// Angabe der anzuzeigenden Datensätze pro Seite
     
$proSeite 3;
     
     
// Deklaration und Initialisierung der Variablen $start. 
     // Sie wird für die Erstellung der Blätterfunktion benötigt
     
$start 0;
     
     
     
// Herausfinden, wie viele Datensätze existieren
     
$sql 'SELECT 
                      COUNT(_id) AS anzahl
                FROM
                      archiv_news'
;
                  
     
$res mysql_query($sql) or die( 'Error[SELECT|News]: <br />
                                                     <pre>' 
$sql '</pre>
                                                     <br />
                                                     MySQL-Error: ' 
mysql_error() );
                                       
     
$news mysql_fetch_object($res);
     
$anzahlNews $news->anzahl;
     
     
     
// SQL-Anweisung, welche je nach Übergabeparameter erweitert wird    
     
$sql 'SELECT 
                       _id,
                       _titel
                FROM 
                       archiv_news
                LIMIT'
;
         
                  
     
// Vervollständigung der SQL-Anweisung je nach $_GET['start']                  
     
$sql .= ( isset($_GET['start']) 
                  AND
                  
is_numeric($_GET['start'])
                  AND
                  
$_GET['start'] > 0
                  
AND
                  
$_GET['start'] <= $anzahlNews )
             ?   
sprintf' %d, %d'$start $_GET['start'], $proSeite 
             :   
sprintf' %d, %d'0$proSeite );     
        
          
     
$res mysql_query($sql) or die( 'Error[SELECT|News]: <br />
                                                     <pre>' 
$sql '</pre>
                                                     <br />
                                                     MySQL-Error: ' 
mysql_error() );
        
       
     
// Anzeige der selektierten Datensätze
     
echo '<ul>';
     while( 
$news mysql_fetch_object($res) ) {
          
printf'<li>%d. <a href="%s">%s</a></li>'
                   
$news->_id,
                   
$_SERVER['PHP_SELF'] . '?news=' $news->_id,
                   
$news->_titel );                  
     }
     echo 
'</ul>';
        
     
     echo 
blaettern( ++$start$proSeite$anzahlNews );   
              
?>
Ich wünsche Euch viel Spaß beim weiteren Basteln



Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.

Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.
Bei Verbesserungsvorschlägen würde ich mich über eine Nachricht freuen.

Grüße Ben.

Geändert von Jann Hendrik (15.07.2007 um 15:09 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Suche] MySQL Tool ähnlich MySQL Front ex³ Gesuche 5 22.12.2006 18:52
[PHP] Counter mit mysql (kurz und knackig) Jann Hendrik Tutorials 6 13.11.2006 08:45
Connect to mySQL DB la-finest Datenbanken 7 29.06.2006 16:11
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:51 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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