MySQL (ppt >4MB) - Nano

Werbung
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">
Herunterladen