Anzeige
Tutorialbeschreibung

PHP - Teil 22 - PHP & MySQL (2)

PHP - Teil 22 - PHP & MySQL (2)

Um die folgenden Beispiele nachvollziehen zu können, solltet ihr eine Datenbank anlegen, in der eine Tabelle mit einigen Beispieldatensätzen liegt. Ruft dazu bei gestartetem lokalem Server http://localhost/phpmyadmin/ auf und öffnet die im vorherigen Tutorial angelegte psd-Datenbank. Klickt diese dazu im linken Fensterbereich an.

Bilder



 
Tragt nun in das Feld Name den Tabellennamen ein. Im aktuellen Fall wird tutorials gewählt. Bei Anzahl der Felder tragt ihr 3 ein und bestätigt das mit OK.

Bilder



 
In dem sich daraufhin öffnenden Fenster werden die Tabellenfelder definiert. Dort könnt ihr die folgenden Einstellungen vornehmen und diese mit Speichern übernehmen. (Achtet hier vor allem auf den gesetzten Haken der der id-Spalte, durch das ein Autoinkrement-Feld definiert wird. Diese Felder werden automatisch mit eindeutigen Zahlenwerten gefüllt).

Bilder



Die SQL-Syntax sieht folgendermaßen aus:

CREATE TABLE  `psd`.`tutorials` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `thema` TEXT NOT NULL ,
 `beschreibung` TEXT NOT NULL ,
 PRIMARY KEY (  `id` )
 ) ENGINE = MYISAM ;

 
Jetzt solltet ihr einige Beispieldatensätze anlegen, um diese später auslesen zu können. Öffnet dazu die Tabelle tutorials und klickt im oberen Fensterbereich auf Einfügen. Tragt nun z. B. in das Feld thema den Namen Joomla! ein. In das Feld beschreibung kann Hier dreht sich alles um Joomla! geschrieben werden. In den zweiten Feldblock kann dann z. B. PHP bei thema und Die neuesten PHP-Tutorials. bei beschreibung angegeben werden. Die id-Felder bleiben leer, da diese als Autoinkrement-Felder markiert wurden und somit automatisch mit Werten gefüllt werden.

Bilder



Mit OK werden die Einstellungen übernommen. Die entsprechende SQL-Syntax sieht folgendermaßen aus:

INSERT INTO  `psd`.`tutorials` (
 `id` ,
 `thema` ,
 `beschreibung`
 )
 VALUES (
 NULL ,  'Joomla!',  'Hier dreht sich alles um Joomla!'
 ), (
 NULL ,  'PHP',  'Die neuesten PHP-Tutorials.'
);

 
Um euch einen Überblick über die bisherige Datenbank zu verschaffen, klickt ihr im linken Fensterbereich unter psd auf tutorials und anschließend im oberen Fensterbereich auf Anzeigen.

Bilder



Hier sind die eingefügten Datensätze zu sehen. Auf diese Datensätze soll nun zugegriffen werden.

Legt euch dafür die Datei include.php an, in der die allgemeinen Zugangsdaten für die Datenbank definiert werden.

<?php
 $server = "localhost";
 $user = "root";
 $passwort = "";
 $datenbank = "psd";
 $verbindung = mysql_connect($server, $user, $passwort) 
or die ("Es konnte keine Verbindung zum Server hergestellt werden");
 mysql_select_db($datenbank) or die ("Die Datenbank existiert nicht");
?>

 
Weiter geht es mit der Definition der Zugriffsdatei. Im folgenden Beispiel wird auf die Datenbank psd zugegriffen. Der Einfachheit halber wird im Moment angenommen, dass sich hierin lediglich die Tabelle tutorials befindet. In dieser Tabelle sind verschiedene Themen aufgelistet. Alle diese Themen sollen im Browser angezeigt werden.

<?php
     include ('include.php');
     $abfrage = "SELECT * FROM tutorials";
     $ergebnis = mysql_query($abfrage);
     while($row = mysql_fetch_object($ergebnis))
     {
       echo $row ->thema;
     }
?>

Über den include()-Befehl wird die bereits bekannte Datei include.php eingebunden. Innerhalb der Variablen $abfrage wird festgelegt, welche Tabelle, in diesem Fall also tutorials, angesprochen werden soll.

Zur Notation: Aus Gründen der besseren Lesbarkeit wird hier auf die Syntax SELECT * FROM zurückgegriffen. In der Praxis sollte diese zugegebenermaßen zeitsparende Syntaxform allerdings vermieden werden. Denn hierdurch werden alle Spalten einer Tabelle angesprochen, auch wenn nicht alle benötigt werden. Die korrekte Syntax für unser Beispiel könnte dann z. B. folgendermaßen aussehen:

$abfrage = "SELECT id, thema FROM tutorials"

 
Es wird angenommen, dass die Tabelle tutorials aus den drei Spalten id, thema und beschreibung besteht. Über SELECT * FROM würden wir die Datensätze aller drei Spalten auslesen. Über die Syntax SELECT id, thema werden nur die tatsächlich benötigten Daten ausgelesen. Ihr solltet die Spaltennamen immer auf diese Weise angeben.

Bilder



Zwar werden alle Datensätze ausgelesen, die Darstellung lässt aber noch zu wünschen übrig. Wie eine gezielte Formatierung der Themenliste erreicht werden kann, zeigt das folgende Beispiel.

<?php
include ('include.php');
$abfrage = "SELECT * FROM tutorials";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo "<b>";
echo $row ->thema;
echo "</b><br />";
}
?>

 
Die grundlegende Syntax ist mit der vorhergehenden identisch. Zusätzlich wurden hier allerdings einige HTML-Elemente integriert. Auf die gleiche Weise könnten auch select-Auswahlfelder oder Hyperlinks realisiert werden. Um dies zu erreichen, müsst ihr lediglich die entsprechenden HTML-Elemente verwenden. Welche Auswirkungen die aufgeführte Syntax hat, zeigt die folgende Abbildung:

Bilder



Trotz des relativ geringen Aufwands wird die Themenliste jetzt in geordneter Weise angezeigt. Dieses einfache Beispiel verdeutlicht das enorme Potenzial von PHP und MySQL. Denn stellt euch vor, dass ihr die Themenliste mit herkömmlichem HTML erstellen und anschließend wieder verändern müsstet. Der Aufwand währe weitaus größer als in PHP. Schließlich müsst ihr hier die Änderungen lediglich innerhalb der while-Schleife einmal vornehmen. (Wobei dann natürlich auch davon ausgegangen wird, dass es mehr als zwei Themen gibt, die ausgelesen werden).


 

Die Abfragen verfeinern

Die bisherigen Beispiele hatten eines gemein: Die Themenliste wurde vollständig ausgegeben. Diese Darstellung wird allerdings in der Praxis häufig nicht benötigt. Vielmehr kommt es dort darauf an, dass Datensätze ganz gezielt ausgewählt werden können. In diesem Abschnitt werden einige der am häufigsten eingesetzten Varianten zur gezielten Selektion von Datensätzen vorgestellt.

Angenommen, die tutorials-Tabelle wird um das Feld anzahl erweitert, in dem die Anzahl der Tutorials hinterlegt wird, die zu jedem Themenkomplex vorhanden sind.

Es ist beispielsweise möglich, dass aus der Themenliste nur die Tutorials angezeigt werden sollen, deren Anzahl größer oder gleich 10 ist.

SELECT thema, anzahl FROM tutorials WHERE anzahl >= 10

Der WHERE-Befehl dient als Bedingung und ist vergleichbar mit einer if-Abfrage. Hinter WHERE wird die Bedingung notiert. In dem Beispiel lautet diese >= 10.

Die Sortierung von Datensätzen erfolgt bei Zeichenketten alfabetisch und bei Zahlen numerisch. Wenn ihr die Themenliste in umgekehrter Reihenfolge ausgeben wollt, müsst ihr folgende Syntax verwenden:

SELECT * FROM tutorials ORDER BY thema DESC

Über ORDER BY wird nach dem angegebenen Feld sortiert. Wird hinter dem Feld, in diesem Beispiel thema, DESC angegeben, erfolgt die Sortierung aufsteigend. Wird auf diesen Parameter verzichtet, folgt die Sortierung dem üblichen Verhalten. Auf die gleiche Weise könnt ihr jetzt auch ganz einfach die Themen nach der Anzahl etc. sortieren lassen.

Oftmals will man nur eine bestimmte Anzahl von Einträgen anzeigen. Dazu wird der LIMIT-Parameter verwendet. Zusätzlich kann durch diesen festgelegt werden, ab welchem Datensatz die Anzeige erfolgen soll.

SELECT thema FROM tutorials LIMIT 5,10

In dem Beispiel werden insgesamt 10 Datensätze angezeigt. Wobei der erste ausgegebene Datensatz der 5. der Datenbank ist. Der erste Parameter des LIMIT-Befehls legt demnach also den ersten anzuzeigenden Datensatz fest. Der zweite Parameter bestimmt die Anzahl der auszugebenden Datensätze. Wird auf den ersten Parameter verzichtet, wird zwar ebenfalls die definierte Anzahl an Datensätzen, jedoch vom ersten Datensatz an, angezeigt.

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von franzg
  • 14.05.2017 - 01:57

Sehr gut! Vielen Dank!

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.10.2016 - 12:58

Danke für das Tutorial.

Portrait von dmtw2107
  • 16.11.2013 - 09:47

verständlich und toll erklärt danke für das tutorial

Portrait von badsnake111
  • 13.04.2013 - 13:48

Danke hat sehr geholfen

x
×
×