MySQL
relationale Datenbanken
SQL : Sprache fuer relationale Datenbanken.
jede Information nur einmal gepeichert
Dazu macht man mehrere Tabellen, die alle
ueber Schluessel miteinander verknuepft sind.
Bsp. Projektpartner, Versuchsteilnehmer, ganze
Schulklasssen, etc.
Bei Versuch z.B. nur Id-Nr. der Schlusklasse
eintragen. Daraus auf Schüler-Id und daraus
auf e-mail Liste schliessen.
Normalisierung
Ein Datenbankkonzept, das alle Bedinungen
fuer Konsistenz erfuellt, nennt man normalisiert.
In der Literatur sind Konzepte zur
Normalisierung fuer Datenbankentwuerfe zu
finden.
Benutzerrechte
Rechte auf verschiedenen Stufen:
Servers, Datenbank, Tabelle, Kolonnen
verschiedene Rechte z.B.:
Datensatz suchen, einfuegen, loschen, ändern
SQL-Befehl grant.
Client
Ansteuerung der DB über Client, der SQL-
Befehle übergibt
Bsp:
update nanoworld.partners
set vorname = 'Dino'
where login = 'dino';
select ident, vorname, nachname, login, email
from nanoworld.partners
where mailinglist = 'y';
Beispiel
create table Personen(
id int not null primary key
auto_increment,
vorname varchar(30),
nachname varchar(30),
mailinglist enum('y','n'),
...
PLZ smallint
);
Zope - MySQL
Z MySQL Database Connection einfuegen
Datenbase Conection String:
database[@host[:port]] [user [password
[unix_socket]]]
In unserem Fall:
personen@localhost homepage
homepassw /tmp/mysql.sock
Z SQL Methoden
Die DB steuert man mit Z SQL Methoden an:
SQL-Befehl darf dtml-tags enthalten
Parameter können verlangt werden
Rückgabe: Liste von Objekten, die als Attribute
die gefragten Feldnamen enthält.
Zugriff: über
<dtml-in sql_Methoden_Name>
<dtml-var Feldname>
Interface für Partner
Datenbank: nanoworld.partners
Ablauf: Verzeichnis anmeldung:
anmeldung.index_html
anmeldung/formular
anmeldung/report
/anmeldung/index_html
<FORM NAME="email" METHOD="POST"
onReset="history.back()" ACTION="formular">
Bitte geben sie Ihre e-mail Adresse an:
<INPUT TYPE=TEXT NAME="email" SIZE=30
MAXLENGTH=30>
<INPUT TYPE="submit" VALUE="Submit">
<INPUT TYPE="reset" VALUE="Abbrechen">
anmeldung/formular
Uberprüfung
<dtml-if Cemail>
<dtml-call "REQUEST.set('fehler','Sie sind bei
uns schon angemeldet.')">
</dtml-if>
Cemail
Z SQL Methode
anmeldung/formular
Formular
<FORM NAME="formular" METHOD="POST"
onReset="history.back()" action="report">
Anrede:
<input type="text" name="anrede" value=""
size=20 maxlength=20>
….
<INPUT TYPE="hidden" NAME="email"
VALUE="<dtml-var "_.string.lower(email)">" >
….
anmeldung/report
Diverser Überprufungen
Willkommen
<dtml-var "REQUEST.get('anrede')">
<dtml-var"REQUEST.get('nachname')"><br>
<dtml-call Insert_Person_MySQL>
<dtml-call benachrichtigen>
Insert_Person_MySQL
Insert into partners
(vorname, nachname, login, passwort, email,
mailinglist,strasse,nr,ort,plz,land,position,sprach
e,anrede )
values (
<dtml-sqlvar vorname type="string" optional>,
<dtml-sqlvar nachname type="string" optional>,
… )
benachrichtigen
<dtml-sendmail mailhost="an_guggi">
To: [email protected]
From: nanopartners.anmeldung
Subject: Partner hat sich angemeldet
Angemeldet hat sich
<dtml-in Abfrage>
<dtml-var Field> <dtml-var
expr="_.getitem(Field)">
</dtml-in>
login/index_html
/login/report
auswahl
Bearbeiten
Abmelden
Abgmeldet
anmeldung/index_html
anmeldung/formular
anmeldung/report
Ablauf
login/index_html
<form action="report" method="post">
Login:<input type="text" name="login"><br>
Passwort:<input type="password"
name="passwort"><br>
<INPUT TYPE="submit" NAME="submit"
VALUE="Submit">
<INPUT TYPE="submit" NAME="submit"
VALUE="Passwort vergessen">
</form>
login/report
<dtml-in Ueberpruefen size=1>
<dtml-in "Personendaten(ident=ident)">
Login erfolgreich.<br>
Willkommen
<dtml-var anrede> <dtml-var nachname>
<form action="../auswahl"
onReset="history.back()">
...
/bearbeiten/bearbeiten
Parameter: ident
<dtml-in Personendaten>
<dtml-in Abfrage>
<dtml-var "_.string.capitalize(Field)“>
<dtml-if "Type[0]=='v'">
<INPUT TYPE=TEXT NAME="<dtml-var Field>"
VALUE="<dtml-var expr="_.getitem(Field,1)">"
SIZE=<dtml-var "Type[8:_.string.find(Type,')')]">
MAXLENGTH=<dtml-var
"Type[8:_.string.find(Type,')')]"> >
Personendaten
Parameter: ident
Select * from nanoworld.partners
where
ident=<dtml-sqlvar ident type="int">
Abfrage
show columns from nanoworld.partners
bestaetige_bearbeiten
div. Überprüfungen
Aenderungen gespeichert:
<form action="../auswahl">
<input type="submit" value="OK">
<input type="hidden" value="<dtml-var
ident>" name="ident">
</form><br>
<dtml-call Update_Person_MySQL>
abmeldung/abmelden
Wollen Sie sich sicher abmelden?
<form action="abgemeldet“
onReset="history.back()">
<input type="submit" value="OK">
<input type="reset" value="Abbrechen">
<INPUT TYPE="hidden" NAME="ident"
VALUE="<dtml-var ident>" >
</form>
abgemeldet
Auf Wiedersehen!<br>
Sie wurden abgemeldet.
<form action="../anmeldung">
<input type="submit" value="OK">
</form><br>
<dtml-call Abmelden>
Abmelden
Parameter: ident
delete from nanoworld.partners
where
ident=<dtml-sqlvar ident type="int">