Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

Inhaltsverzeichnis
1 Einleitung
2 Projektablauf für die Buchwebsite
3 Programmgrundlagen
4 Dreamweaver erweitern
5 Eine Site erstellen
6 Grundlegende Dokumenteinstellungen
7 Tabellen in Dreamweaver
8 Bilder im Web
9 Framesets
10 Aktionen
11 Die Zeitleiste
12 CSS in Dreamweaver
13 Ebenen
14 Hyperlinks
15 Vorlagen und Bibliotheken
16 Formulare
17 Quelltext de Luxe
18 Dreamweaver und Flash
19 Office-Daten einfügen
20 Dynamische Websites – eine Einführung
21 Einführung in PHP
22 Lokalen Webserver installieren
23 Dynamische Sites in Dreamweaver einrichten
24 MySQL-Grundlagen
25 Datenbanken mit Dreamweaver anbinden
26 PHP und Dreamweaver
27 Datenbanken abfragen
28 Daten einfügen und dynamische Formulare
29 Datensätze bearbeiten
30 Benutzer authentifizieren und Zugriffsrechte festlegen
31 Fortgeschrittene Techniken
32 Dreamweaver 8 und XML
33 Menüs für dynamische Verhalten
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Dreamweaver 8 von Richard Beer, Susann Gailus
Webseiten entwickeln mit HTML, CSS, XML, PHP und MySQL
Buch: Dreamweaver 8

Dreamweaver 8
mit CD
639 S., 39,90 Euro
Rheinwerk Design
ISBN 978-3-89842-739-5
gp 31 Fortgeschrittene Techniken
  gp 31.1 SQL-Abfragen
    gp 31.1.1 Eigene SQL-Abfragen einbinden
    gp 31.1.2 Abfragen verschachteln
    gp 31.1.3 Eine Volltextsuche
  gp 31.2 Arbeiten mit Sessions
  gp 31.3 Serververhalten
    gp 31.3.1 Eigene Serververhalten schreiben
    gp 31.3.2 Positionierung im Code
    gp 31.3.3 Bedingungen als Serververhalten anlegen
    gp 31.3.4 Serververhalten anderen zur Verfügung stellen
  gp 31.4 MySQL und Flash
    gp 31.4.1 Daten aus MySQL an Flash senden
    gp 31.4.2 Dreamweaver 8 als ActionScript-Editor

31 Fortgeschrittene Techniken

Mit zunehmender Erfahrung werden Sie an die Grenzen von Dreamweaver 8 stoßen und eigene Abfragen oder Skripts einbinden wollen. Dreamweaver 8 unterstützt Sie auch dabei ganz hervorragend.


Rheinwerk Computing

31.1 SQL-Abfragen  downtop


Rheinwerk Computing

31.1.1 Eigene SQL-Abfragen einbinden  downtop

Häufig werden Sie mit PHP mehrere Tabellen gleichzeitig abfragen wollen. Im erweiterten Modus des Datensatzabfragefensters können Sie SQL-Abfragen mit Hilfe von Dreamweaver 8 erstellen oder auch eigene anlegen. In unserem Beispiel sollen die Bestellvorgänge einzelner Kunden angezeigt werden. Unsere Datenbank enthält in einer der Tabellen die Kundendaten und in einer weiteren die Bestellnummern eines jeden Bestellvorganges. In einer dritten Tabelle werden die Bestellnummern dann den Kunden zugeordnet. Die im Schema grau angezeigte Tabelle soll mögliche Detailverknüpfungen darstellen. Diese graue Tabelle ist in unserer Beispieldatenbank allerdings nicht vorhanden.


Abbildung 31.1 Datenbankschema


Im späteren Dokument soll eine Liste ausgegeben werden, in der pro Bestellung eine Zeile mit Kunde und Bestellnummer angezeigt wird. Bestandskunden, die keine Bestellungen getätigt haben, werden nicht angezeigt.

  • Mayer – 2003 – 10010
  • Mayer – 2003 – 10011
  • Mayer – 2003 – 10012
  • Müller – 2003 – 10020
  • Koch – 2003 – 10030
  • Koch – 2003 – 10031
  • Koch – 2003 – 10032
  • Koch – 2003 – 10036

In der Praxis könnte es durchaus eine ähnliche Anforderung geben. Die abzufragenden Tabellen sind dann meistens umfangreicher. Um das Prinzip zu verdeutlichen, reicht unser Beispiel aus, und es verwirrt nicht durch zusätzliche Datenfelder.

Aus der Abbildung 31.2 können Sie die Struktur der Tabellen mit den einzelnen Datenfeldern entnehmen. Die Primärschlüssel der Tabellen werden in den Feldern »kunden_ID«, »bestell_ prod_ID« und »bestell_ID« gesetzt.

Abbildung 31.2 Struktur der Kunden-, Bestellnummern- und Zuordnungstabelle

Abbildung 31.3 Daten der Kunden-tabelle

Abbildung 31.4 Bestellnummerntabelle

In der Zuordnungstabelle befinden sich die Primärschlüssel der beiden anderen Tabellen als Zuordnungskriterium. Datensätze aus Primärschlüsseln anderer Tabellen bezeichnet man auch als Fremdschlüssel.

Abbildung 31.5 Daten der Zuordnungstabelle

Nachfolgend eine kurze Übung, wie Sie eigene SQL-Abfragen in Dreamweaver 8 einbinden können. Wir empfehlen Ihnen, diese Anleitung zu lesen, auch wenn Sie die Schritte nicht nachvollziehen, da einige Grundlagen erläutert werden. Zum Aufbau der Buchwebsite müssen Sie diese nicht nachvollziehen.

Schritt für Schritt: SQL-Abfragen einbinden

1 Datenbankanbindung erstellen

Erstellen Sie zunächst eine Datenbankanbindung für die neue Datenbank. Die benötigte Abfrage muss im erweiterten Modus der Dialogbox Datensatzgruppe erfolgen.

2 Anlegen einer Select-Abfrage

SELECT-Befehle können aus mehr als einer Tabelle Daten ausgeben. Markieren Sie dazu die erste gewünschte Tabelle im Fenster Datenbankelemente und klicken auf SELECT . Die Tabelle wird nun mit einer SELECT-Anweisung ins SQL-Fenster geschrieben.

3 Mehrere Tabellen in einer Abfrage

Wenn Sie anschließend die nächste Tabelle markieren und erneut auf SELECT klicken, wird die Tabelle der bestehenden SELECT-Anweisung hinzugefügt. Fügen Sie so alle vorhandenen Tabellen ein.

4 Datensatz ansprechen

Die Kriterien für unsere Abfrage sind die »kunden_ID« in den Tabellen »kunden« und »bestellungen« und die »bestell_prod_ID« aus den Tabellen »bestellungen«, außerdem die Tabelle »bestellnummern«.

Ein Datensatz einer bestimmten Tabelle wird in SQL wie folgt angesprochen:

Tabelle.Datensatz

Daraus ergibt sich für die Zuordnung der Daten folgende Schreibweise:

Listing 31.1 WHERE-Statement

bestellnummern.bestell_prod_ID = bestellungen. bestell_prod_ID
AND
bestellungen.kunden_ID = kunden.kunden_ID

Um diese Abfrage zu schreiben, wählen Sie einfach der Reihe nach alle abzufragenden Datensätze im Fenster Datenbankelemente aus und klicken nach jeder Auswahl auf WHERE.

Dreamweaver 8 schreibt als Standard für die Verknüpfungen immer die AND-Bedingung. Das ist für unsere Abfrage nicht korrekt. Ändern Sie daher im SQL-Fenster die Abfrage wie in der folgenden Abbildung angeführt.

5 Geänderte Abfrage

Wenn Sie alles korrekt erledigt haben, sieht Ihre fertige Datensatzabfrage jetzt wie in der folgenden Abbildung aus. Die Änderungen haben wir unterstrichen.

6 Ergebnisse prüfen

Die Ergebnisse der Abfrage können Sie durch einen Klick auf Testen überprüfen. Besonders bei komplexen Abfragen empfiehlt es sich, diese Tests vor dem Einbinden der Daten in das Dokument durchzuführen.

7 Datensätze anzeigen

Um alle relevanten Datensätze anzuzeigen, müssen Sie die gewünschten Datensätze wie gewohnt in Ihr Dokument ziehen und einen wiederholten Bereich daraus erstellen.

Hinter den Datensätzen im wiederholten Bereich, haben wir noch einen Zeilenumbruch eingefügt, damit nicht alles in einer Zeile steht, und die einzelnen Felder mit einem Bindestrich getrennt.

8 Ausgabe der Abfrage

In der Live Data-Ansicht sehen Sie die korrekte Ausgabe der Daten. Diese stehen Ihnen für weitere Manipulationen zur Verfügung.


Rheinwerk Computing

31.1.2 Abfragen verschachteln  downtop

In der folgenden Beispielabfrage ist eine andere Darstellung der Daten erwünscht:

  • Hauptpunkt 1
   
  • Unterpunkt 1.1
   
  • Unterpunkt 1.2
   
  • Unterpunkt 1.3
  • Hauptpunkt 2
   
  • Unterpunkt 2.1
   
  • Unterpunkt 2.2
  • Hauptpunkt 3
  • Hauptpunkt 4
   
  • Unterpunkt 4.1
   
  • Unterpunkt 4.2
   
  • Hauptpunkt 5

Diese Datenausgabe kommt beispielsweise als dynamisch generiertes Navigationsmenü in Frage. Mit den nun folgenden Tabellen können Unterpunkte beliebigen Hauptpunkten zugeordnet werden. Wenn Sie möchten, können Sie die Unterpunkte auch mehreren Hauptpunkten zuordnen.

Dynamische Navigation | Für Menüs dynamischer Websites reicht diese Technik meist aus. Wenn Sie weitere Zuordnungsoptionen benötigen, zum Beispiel eine völlig freie Konfigurierbarkeit der Menüs, ist jedoch eine andere, kompliziertere Struktur notwendig.

Die für unser Menü benötigten Abfragen können Sie nicht mehr in der grafischen Ansicht von Dreamweaver 8 erstellen. Um die gewünschte Anzeige zu erreichen, müssen verschachtelte Abfragen geschrieben werden. Diese werden von Dreamweaver 8 leider nicht unterstützt.

In Abbildung 31.6 sehen Sie das Schema der Datenbank. Die Unterpunkte aus den Tabellen »menue_sub« werden in der Tabelle »main_sub« den Hauptpunkten in der Tabelle »menue_main« zugeordnet.

Abbildung 31.6 Datenbankschema

Würde diese Datenbank tatsächlich als Navigation einer dynamischen Website dienen, würden den Tabellen für Haupt- und Unternavigationspunkte weitere Felder mit den IDs der in den Unterseiten anzuzeigenden Datensätze angefügt. In den Abbildungen 31.7 bis 31.9 sehen Sie die Datensatzstruktur der Tabellen.

Abbildung 31.7 Schema der Tabelle menue_main

 

Abbildung 31.8 Schema der Tabelle menue_sub

 

Abbildung 31.9 Schema der Tabelle main_sub

Wir haben die Tabellen mit den in den Abbildungen 31.10 bis 31.12 dargestellten Inhalten gefüllt.

Abbildung 31.10 Inhalte der Tabelle menue_main

 

Abbildung 31.11 Inhalte der Tabelle menue_sub

 

Abbildung 31.12 Inhalte der Tabelle main_sub

In Abbildung 31.13 wird das Prinzip verschachtelter Abfragen schematisch dargestellt.

Abbildung 31.13 Schema einer verschachtelten Abfrage

Wie Sie aus den bisherigen Kapiteln wissen, können die Ergebnisse einer Abfrage als Grundlage für weitere Abfragen verwendet werden. Ein Beispiel dafür ist die Anzeige von Daten in einem Detaildokument nach dem Aufruf aus einem Masterdokument heraus. Dabei wird die ID des anzuzeigenden Datensatzes an das nächste Dokument übergeben.

Abhängige Abfragen | Das gleiche Prinzip funktioniert auch innerhalb eines einzelnen Dokumentes. Abfrage 1 übergibt einen bestimmten Inhalt an Abfrage 2.

Diese liefert nur die Datensätze, die auch mit den aus Abfrage 1 übergebenen Daten übereinstimmen. Der nächste Schritt gleicht dem ersten. Abfrage 2 übergibt die nun gewonnenen Daten an Abfrage 3. Diese gibt wiederum nur die Daten aus, die mit den erhaltenen Daten aus Abfrage 2 übereinstimmen.

Verbindung zur Datenbank | Dieses Prinzip der Verschachtelung können Sie in nahezu beliebiger Tiefe anwenden. Doch zunächst müssen Sie sich wie immer mit der Datenbank verbinden. Wir haben in diesem Beispiel die Verbindung, wie in Listing 31.2 zu sehen, selbst definiert.

Listing 31.2 Datenbankverbindung herstellen

<?
// Verbindung zum Server herstellen
mysql_connect("localhost","root","")
or die  ("Zurzeit keine Verbindung möglich");

// Verbindung zur Datenbank "linkliste" herstellen
mysql_select_db("abfrage")
or die ("Verbindung zur Datenbank zurzeit nicht möglich");
?>

Erste Abfrage | Im folgenden Listing 31.3 sehen Sie eine einfache Abfrage. Die Ausgabe der Daten erfolgt in einer while-Schleife. Bei jedem Schleifendurchlauf wird der Text aus dem Datensatz »main_view« ausgegeben, da wir den Hauptpunkt zur Anzeige bringen wollen.

Listing 31.3 Einfache Abfrage

<?php
$abfrage_main = "SELECT * FROM menue_main";
$ergebnis_main = mysql_query($abfrage_main);
while($row_main = mysql_fetch_object($ergebnis_main))
 {
 echo "$row_main->main_view<br>";
 }
mysql_free_result($ergebnis_main);
?>

Zweite Abfrage | Innerhalb der Schleife von Abfrage 1 (abfrage_ main) wird nun die zweite Abfrage, wie in Listing 31.4 zu sehen, eingefügt. In der WHERE-Bedingung steht als Wert die Variable $row_ main->main_ID.

Bei jedem Durchlauf der ersten Schleife wird dieser Wert auf den aktuellen Datensatzinhalt der ersten Abfrage (abfrage_main) gesetzt, und die zweite Abfrage (abfrage_main_sub) erhält aus der Tabelle »main_sub« alle Inhalte, die mit der Datensatz-ID der ersten Abfrage (abfrage_main) übereinstimmen.

Die Daten der zweiten Abfrage werden in diesem Fall nicht ausgegeben, sondern dienen nur wieder als Grundlage für die dritte Abfrage.

Listing 31.4 Verschachtelte Abfrage

<?php
$abfrage_main = "SELECT * FROM menue_main";
$ergebnis_main = mysql_query($abfrage_main);
while($row_main = mysql_fetch_object($ergebnis_main))
 {
 echo "$row_main->main_view<br>";
 $abfrage_main_sub = "SELECT * FROM main_sub WHERE 
 main_ID=".$row_main->main_ID;
 $ergebnis_main_sub = mysql_query($abfrage_main_sub);
 while($row_main_sub =mysql_fetch_object($ergebnis_main_sub))
 {
 // Platzhalter
 }
 }
mysql_free_result($ergebnis_main);
mysql_free_result($ergebnis_main_sub);
?>

Dritte Abfrage | In Listing 31.4 sehen Sie den Kommentar // Platzhalter. Dieser Platzhalter wird nun mit der dritten Abfrage in Listing 31.5 ersetzt. Diese Abfrage erhält wieder eine Variable aus der Abfrage 2 als Bedingung der WHERE-Anweisung ($row_main_sub->sub_ID).

Da in dieser Abfrage die Tabelle »menue_sub« ausgegeben wird, erhalten Sie als Datenrückgabe alle Datensätze dieser Tabelle, die über die Tabelle »main_sub« einem Hauptpunkt zugeordnet sind. Diese Daten werden auch angezeigt, da es sich um die Untermenüpunkte handelt. Am Ende der Schleifen werden die Daten wieder freigegeben.

Listing 31.5 Mehrfache Verschachtelung

<?php
$abfrage_main = "SELECT * FROM menue_main";
$ergebnis_main = mysql_query($abfrage_main);
while($row_main = mysql_fetch_object($ergebnis_main))
 {
 echo "$row_main->main_view<br>";
 $abfrage_main_sub = "SELECT * FROM main_sub WHERE main_ID=".$row_main->main_ID;
 $ergebnis_main_sub = mysql_query($abfrage_main_sub);
 while($row_main_sub = mysql_fetch_object($ergebnis_main_sub))
 {
 $abfrage_sub = "SELECT * FROM menue_sub WHERE  sub_ID=".$row_main_sub->sub_ID;
 $ergebnis_sub = mysql_query($abfrage_sub);
 while($row_sub = mysql_fetch_object  ($ergebnis_sub))
 {
 echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $row_sub->sub_view<br>";
 }
 }
 }
mysql_free_result($ergebnis_main);
mysql_free_result($ergebnis_sub);
mysql_free_result($ergebnis_main_sub);
?>

Wenn Sie alles richtig angelegt haben, wird Ihnen nun in der Live Data-Ansicht unser »Menü« wie in Abbildung 31.14 angezeigt.

Abbildung 31.14 Ausgabe der Abfrage

Die Abfrage von Datenbanken mit verschachtelten Abfragen kommt häufig vor. Es lohnt sich daher, sich eingehend mit dieser Technik zu befassen.


Code strukturieren  
An diesem Beispiel sehen Sie, wie wichtig es ist, den Quelltext übersichtlich und gut zu formatieren. Würden Sie den Code einfach »der Reihe nach« schreiben, fehlt jede Über- sicht über die Zusammengehörigkeit einzelner Abfragen und Codeblöcke. Mit Einrückungen können Sie Funktionsgruppen einfach und strukturiert darstellen.



Rheinwerk Computing

31.1.3 Eine Volltextsuche  toptop

Auf fast jeder Website mit umfangreichen Inhalten ist eine Suchfunktion vorhanden. Gute und treffsichere Suchfunktionen zu programmieren ist schwer und variiert je nach den abzufragenden Inhalten stark. Für die meisten Websites reicht allerdings eine einfache Suche aus. Neben der Strukturierung der Datenbestände ist das Wiederauffinden der Daten eine der Hauptaufgaben beim Datenbankdesign.

SQL unterstützt freie Suchen durch diverse Befehle. Wichtig ist für uns nur LIKE in einer SQL-Abfrage. SQL-Abfragen können geschrieben werden wie folgt:

Listing 31.6 SQL-Suche

"SELECT * FROM `2_0` WHERE description LIKE '%$suchbegriff%'"

Der Inhalt von "$suchbegriff" ist eine Zeichenkette, nach der im Datensatz »description« der Tabelle »2_0« gesucht werden soll. Diese Variable wird aus einem Formular an das Ergebnisdokument übergeben.

Abbildung 31.15 Suchformular

 

Abbildung 31.16 Datensatzgruppe mit Suchabfrage

Da es häufig Probleme gibt, die GET-Arrays direkt in die SQL-Abfrage zu schreiben, wird am Beginn des Dokumentes folgende Codezeile eingefügt:

Listing 31.7 Zwischenvariable erstellen

$suche = $_GET['SUCHE'];

Die Variable aus dem GET-Array wird zunächst in der Variablen $suche zwischengespeichert. Die Abfrage wird dann mit dem Inhalt der Variablen $suche durchgeführt.

Die Datensatzgruppe wird im Bedienfeld Bindungen angezeigt, und Sie können wie immer die gewünschten Datenfelder in Ihr Dokument ziehen. Damit alle gefundenen Datensätze angezeigt werden, müssen Sie einen wiederholten Bereich mit den Einstellungen Alle Datensätze erstellen. Geben Sie durch Suchabfragen generierten Datensätzen eindeutige Bezeichnungen, um Verwechslungen mit »normalen« Abfragen zu vermeiden.

Abbildung 31.17 Datensatz in die Ergebnisseite einfügen

Suche über einen Index | MySQL bietet die Möglichkeit, von umfangreichen Datenbeständen einen Index zu erstellen und damit eine Suchanfrage zu starten. Lesen Sie dies bei Interesse in der MySQL-Dokumentation nach. Ob die Suche über einen Index tatsächlich schneller ist, entscheidet sich über die Menge und Struktur der Daten. Es kommt durchaus vor, dass eine indizierte Suche länger dauert als eine Suchanfrage ohne Indizes.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

 <<   zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Adobe Dreamweaver CS3
Die Neuauflage:
Adobe Dreamweaver CS3
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Adobe Dreamweaver CC






 Adobe
 Dreamweaver CC


Zum Rheinwerk-Shop: Adobe Dreamweaver CC Einstieg






 Adobe Dreamweaver
 CC Einstieg


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern