Webtechnologien Teil 12: PHP 5 mit PDO/MySQL

Größe: px
Ab Seite anzeigen:

Download "Webtechnologien Teil 12: PHP 5 mit PDO/MySQL"

Transkript

1 Webtechnologien Teil 12: PHP 5 mit PDO/MySQL

2 Übersicht Arten der Kommunikation mit dem Datenbank-Server Grundsätzliche Operationen Weitere Routinen Tricks und Tipps Siehe: 2

3 Einführung I PHP hat jeweils eine eigene API zum Zugriff auf die Datenbanken in Form eines Treibers. Bei MySQL ist es die MySQLi-Schnittstelle. Da sich die Schnittstellen zu verschiedenen Datenbanken unterscheiden, wurde eine einheitliche PDO-Schnittstelle geschaffen. 3

4 PHP-Schnittstellen zu Datenbanken (Auszug) Datenbank Datenbank Datenbank Adabas D Oracle MySQL dbase PostgreSQL MySQLi Empress Solid Informix FrontBase Sybase Velocis FilePro Interbase Ingres DB2 Unix dbm Interbase Und natürlich auch ODBC... Siehe dazu: 4

5 Schnittstellen zu MySQL Es gibt aus historischen Gründen drei Schnittstellen zu MySQL: mysql-schnittstelle (Veraltet, wird nicht mehr unterstützt) mysqli-schnittstelle (improved, die aktuelle Version) PDO-Schnittstelle (Portable Data Object) Diese abstrahiert von den verschiedenen Schnittstellen zu den Datenbanken aber nur syntaktisch - den Aufruf. Die speziellen Eigenschaften der SQL-Dialekte der jeweiligen Datenbanken bleiben jedoch erhalten! Diese Schnittstelle wird hier beschrieben. 5

6 Das PDO-Objekt Die Benutzung der Schnittstelle erfolgt nur Objekt-orientiert. Durch das Erzeugen des Objekts wird eine Verbindung zur Datenbank aufgebaut, die beim Entfernen des Objekts geschlossen wird. Das allgemeine Schema des Zugriffs sieht daher so aus: Aufbau der Verbindung Zugriffe auf die Datenbank Abbau der Verbindung 6

7 Das PDO-Objekt - Vorbereitungen In der php.ini-datei müssen die Module für den Datenbankzugriff aktiviert sein: extension=php_mysqli.dll extension=php_pdo_mysql.dll extension=php_pdo_odbc.dll Das lässt sich durch einen Aufruf von phpinfo() anzeigen (explizit programmiert oder über die XAMPP-Webschnittstelle): 7

8 Bemerkungen In diesem Foliensatz wird ein Teil eines Logins für eine Website beschrieben. 8

9 Verbindung zur Datenbank I object PDO(DSN [,Nutzer [,Passwort[,Optionen]]]); DSN ist der Data Source Name: die Definition des Zugriffs auf die Datenbank. Dies ist ein String mit dem Aufbau: Datenbanktyp: Keywort=Wert; Keywort=Wert; Datenbanktyp ist hier mysql Für Keywort können hier eingesetzt werden: Host: Angabe der IP-Adresse der Datenbank dbname: Name der ausgewählten Datenbank Nutzer und Passwort sind Strings Der letzte Parameter definiert Optionen, die für die Kommunikation mit der Datenbank wichtig sind (ein Hash mit definierten Keys) Siehe: 9

10 Verbindung zur Datenbank II - Beispiel (1) $DSN= 'mysql:host=localhost;dbname=accounts'; (2) $DB_USER= 'nobody'; (3) $DB_PW= 'blabla426'; (4) $DB_options = array( (5) PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' (6) ); (7) try { (8) $db= new PDO($DSN,$DB_USER,$DB_PW,$DB_options); (9) $db->setattribute(pdo::attr_errmode, PDO::ERRMODE_WARNING); (10)} catch(pdoexception $err) { (11) echo 'DB ERROR: '.$err->getmessage().php_eol; (12)} Die Datenbank liegt auf der eigenen Maschine und heißt "accounts". Der User ist "nobody" mit dem Passwort "blabla426". Mit den Optionen wird der Zeichensatz auf UTF-8 gesetzt. Es wird der Warn-Modus eingeschaltet. 10

11 Verbindung zur Datenbank III - Erläuterungen (4) $DB_options = array( (5) PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' (6) ); MySQL-spezifische Konstante(n) Es sind noch andere Kommandos an MySQL möglich, z.b.: PDO::MYSQL_ATTR_LOCAL_INFILE (alternative Konfigurationsdatei) um z.b. zum Testen eine andere Konfiguration als bei normalen Betrieb zu benutzen. PDO::MYSQL_ATTR_COMPRESS Daten der Verbindung werden komprimiert Siehe dazu: 11

12 Verbindung zur Datenbank IV - Erläuterungen (7) try { (8) $db= new PDO($DSN,$DB_USER,$DB_PW,$DB_options); (10)} catch(pdoexception $err) { (11) echo 'DB ERROR: '.$err->getmessage().php_eol; (12)} Im Fehlerfalle wirft das PDO-Objekt eine Exception, die mit der obigen Konstruktion gefangen werden kann. getmessage() erzeugt einen String mit der Fehlermeldung. PHP_EOL ist die Konstante mit der Bedeutung End-of-Line. 12

13 Verbindung zur Datenbank V - Erläuterungen (7) try { (8) $db= new PDO($DSN,$DB_USER,$DB_PW,$DB_options); (9) $db->setattribute(pdo::attr_errmode,pdo::errmode_warning); (10)} catch(pdoexception $err) { Nachdem das Objekt generiert wurde, können dem Objekt Eigenschaften zugewiesen werden, die aber nur das PDO-Objekt betreffen, nicht die Kommunikation mit MySQL. Es gibt drei Modi: PDO::ERRMODE_SILENT Es wird lediglich ein Errorcode geliefert, der explizit nach jedem PDO- Methodenaufruf abgefragt werden muss. Default! PDO::ERRMODE_WARNING Es wird eine Warn-Meldung ausgegeben sowie der Errorcode geliefert PDO::ERRMODE_EXCEPTION Es wird eine Exception geworfen (siehe erstes Beispiel). Siehe dazu: 13

14 Hinweise Ob mit Exceptions oder mit einem der anderen Modi gearbeitet wird, hängt von der Programmierkonvention im betreffenden Projekt ab. Die Benutzung von Exceptions führt zu einem umständlichen Code; dafür entfallen die vielen Fehlerabfragen. Wer sowieso immer den Erfolg einer Routine in einer Fehlerabfrage abfragt, der sollte während der Entwicklung im Warn-Modus während der Produktion im Silent-Modus arbeiten. 14

15 Unser Beispiel weiter I Der MySQL-Server muss natürlich laufen. Auch muss die Datenbank mit dem User "nobody" und dem Passwort "blabla426" eingerichtet sein. 15

16 Falls es doch mal nicht weiter geht... print_r($db->getavailabledrivers()); Array ( [0] => mysql [1] => sqlite ) Mit der Methode getavailabledrivers() lassen sich Informationen über die per PDO erreichbaren Datenbanken ausgeben. print_r() gibt das Array etwas formatiert und daher leichter lesbar aus. Es wird ein Array mit den den Namen der unterstützten Datenbanken geliefert, hier nur zwei. Änderungen sind nur über php.ini möglich. 16

17 Einrichten einer Datenbank I 17

18 Einrichten einer Datenbank II Es hat geklappt! 18

19 Einrichten einer Datenbank III 19

20 Einrichten einer Datenbank III 20

21 Hinweis Das Gewähren aller Rechte für einen Benutzer ist nur dann sinnvoll, wenn es wie hier um eine Spielanwendung geht. In der Realität müssen die Rechte beschränkt werden. Diese Beschränkung lässt sich gut mit phpmyadmin konfigurieren. 21

22 Einrichten einer Datenbank IV So sieht es schon einmal ganz gut aus... 22

23 Unser Beispiel weiter II Create Table Nun bauen wir eine Tabelle in SQL: CREATE TABLE account ( id int(11) NOT NULL PRIMARY KEY, name varchar(45) NOT NULL, pw varchar(64) NOT NULL, groupid int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; id ist der Schlüsselwert in der Tabelle. Der Login-Name und das Passwort dürfen nicht leer sein(!). Dann bereiten wir noch Gruppen vor, indem eine Gruppen-ID als Integer zugelassen wird. Da wird Transaktionen haben wollen muss die InnoDB-Version von MySQL benutzt werden. Und natürlich UTF-8 als Zeichensatz. 23

24 Unser Beispiel weiter III Create Table (1) $create_table = "CREATE TABLE account ("; (2) $create_table.= "id int(11) NOT NULL PRIMARY KEY,"; (3) $create_table.= "name varchar(45) NOT NULL,"; (4) $create_table.= "pw varchar(64) NOT NULL,"; (5) $create_table.= "groupid int(11) NOT NULL"; (6) $create_table.= ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; (7) $rtn= $db->exec($create_table); (8) if($rtn===false) { (9) $err= $db->errorinfo(); (10) echo 'DB ERROR: #'.$err[1]." ".$err[2].php_eol; (11)} Die Tabelle wird mit exec() angelegt. Der String für $create_table wird stückweise mit der verkürzten.-notation zusammengesetzt. 24

25 Create Table I - Erläuterungen (7) $rtn= $db->exec($create_table); (8) if($rtn===false) { exec(<sql-string>) führt eine SQL-Operation aus, bei der keine Werte anschließend abgefragt werden, d.h. exec() kann nicht für Abfragen von Tabelleninhalten benutzt werden. In der Variablen $rtn wird der Return-Code abgespeichert, der im Fehlerfall den boole'schen Wert false (0) hat, ansonsten die Anzahl der betroffenen Zeilen in der Tabelle enthält. Daher muss mit === abgefragt werden (weil die Anzahl ja auch 0 sein kann, was ansonsten als false interpretiert wird) Siehe: 25

26 Create Table II - Erläuterungen (8) if($rtn===false) { (9) $err= $db->errorinfo(); (10) echo 'DB ERROR: #'.$err[1]." ".$err[2].php_eol; (11)} Die Methode errorinfo() liefert ein Array zurück: [0] enthält den SQL-Error-Code [1] enthält den Error-Code des Treibers [2] enthält die Fehlermeldung Siehe: Dann gibt es noch die Methode errorcode(), die lediglich den SQL-Error- Code liefert. Dazu gibt es eine Dokumentation: Siehe: 26

27 Unser Beispiel weiter IV - Drop Table (1) $create_table = "CREATE TABLE account (";... (6) $create_table.= ") ENGINE=InnoDB DEFAULT CHARSET=utf8;"; (7) $rtn= $db->exec($create_table); (8) if($rtn===false) { (9) $err= $db->errorinfo(); (10) echo 'DB ERROR: #'.$err[1]." ".$err[2].php_eol; (11)} (12)$delete_table= "DROP TABLE account;"; (13)$rtn= $db->exec($delete_table); (14)if($rtn===false) { (15) $err= $db->errorinfo();...} Die Tabelle account wird hier gelöscht. Das machen wir hier nur für unser Beispiel, damit wir in mehreren Durchläufen etwas ausprobieren können. Für ein Login-Modul ist das natürlich unsinnig. 27

28 Unser Beispiel weiter V Einfügen von Daten (1) $insert = "INSERT INTO account(id,name,pw,groupid)" (2) $insert.= "VALUES(0,'root','bitte!',0)"; (3) $rtn= $db->exec($insert); (4) if($rtn===false) { (5) $err= $db->errorinfo(); (6) echo 'DB ERROR: #'.$err[1]." ".$err[2].php_eol; (7) } In die Tabelle account wird ein einziger Record (Zeile) eingefügt. Bitte beachten Sie, dass in SQL andere String-Begrenzer als in PHP benutzt werden. 28

29 Wir glauben ja nichts sehen wir nach Das ist die Ausgabe der Tabelle in phpmyadmin. 29

30 Unser Beispiel weiter VI Einfügen von Daten $val[]=array('id'=>0,'name'=>'root', 'pw'=>'bitte!','groupid'=>0); $val[]=array('id'=>1,'name'=>'user', 'pw'=>'danke!','groupid'=>0); $val[]=array('id'=>2,'name'=>'helmut','pw'=>'sdgafg','groupid'=>0); $val[]=array('id'=>3,'name'=>'evelyn','pw'=>'tztrff','groupid'=>0); (1) foreach($val as $v) { (2) $insert = "INSERT INTO account(id,name,pw,groupid) "; (3) $insert.= "VALUES(${v['id']},'${v['name']}','${v['pw']}'"; (4) $insert.= ",${v['groupid']})"; (5) $rtn= $db->exec($insert); (6) if($rtn===false) { (7) $err= $db->errorinfo(); (8) echo 'DB ERROR: #'.$err[1]." ".$err[2].php_eol; (9) } (10)} Es wird eine Tabelle zum Füllen der Datenbank-Tabelle verwendet. 30

31 Einfügen von Daten - Erläuterungen (1) foreach($val as $v) { (2) $insert = "INSERT INTO account(id,name,pw,groupid) "; (3) $insert.= "VALUES(${v['id']},'${v['name']}','${v['pw']}'"; (4) $insert.= ",${v['groupid']})"; Die Konstruktion ${v['id']} ist erforderlich, weil ein Ausdruck zur Auswertung innerhalb des Strings benutzt wird, daher die {}. Ohne diese Auswertung wäre $Variable ausreichend. Die einzelnen Elemente des Hash sind ja benannt, so dass relativ schnell klar wird, was wann in das Insert-SQL-Statement eingefügt wird. 31

32 Wir glauben ja nichts sehen wir nach Das ist die Ausgabe der Tabelle in phpmyadmin. 32

33 Unser Beispiel weiter VII Auslesen von Daten (1) $db= new PDO($DSN,$DB_USER,$DB_PW,$DB_options); (2) $db->setattribute(pdo::attr_errmode, PDO::ERRMODE_WARNING); (3) $db->setattribute(pdo::attr_default_fetch_mode,pdo::fetch_assoc);... (4) $query= "SELECT * FROM account"; (5) $data= $db->query($query); (6) foreach($data as $row) { (7) print_r($row); (8) } Es wird ein neues Attribut PDO::ATTR_DEFAULT_FETCH_MODE beim Erzeugen des PDO-Objekts gesetzt, das die Art des Objekts beim Auslesen von Informationen mit der Methode query() bestimmt. Möglich sind: PDO::FETCH_ASSOC: Es wird ein Hash mit den Namen der Spalten geliefert (das ist zu empfehlen). PDO::FETCH_BOTH: Hash mit Array-Indices wird geliefert. PDO::FETCH_OBJ: Ein Objekt wird generiert. 33

34 Unser Beispiel weiter VIII Auslesen von Daten Array ( [id] => 0 [name] => root [pw] => bitte! [groupid] => 0 ) Array ( [id] => 1 [name] => user [pw] => danke! [groupid] => 0 ) Array ( [id] => 2 [name] => helmut [pw] => sdgafg [groupid] => 0 ) Array ( [id] => 3 [name] => evelyn [pw] => tztrff [groupid] => 0 ) Das ist die Ausgabe des letzten Beispiels. Mit jedem Schleifendurchlauf wird eine Zeile aus der Tabelle gelesen und als Hash geliefert. 34

35 Explizites Auslesen von Daten (5) $data= $db->query($query); $row= $data->fetch($fetch_style); $table= $data->fetchall($fetch_style); Ein query() liefert den Inhalt einer Tabelle als ein Objekt vom Typ PDOStatement. Das foreach des Beispiels durchläuft in Wirklichkeit ein Objekt. Mit fetch() wird die nächste Zeile des letzten Querys gelesen. Der optionale Parameter gibt an, von welchem Typ das Ergebnis sein soll. Hier sind dieselben Werte wie beim setattribute() möglich. Der Defaultwert ist der, der als Attribut beim Erzeugen des Objektes angegeben wurde. fetchall() liest die ganze Tabelle in ein Array ein. Die Art der Elemente dieses Arrays werden genauso bestimmt wie bei fetch(). fetchall() ist natürlich nur bei kleinen Tabellen anwendbar. 35

36 Abstraktes Auslesen I Meta-Information (1) $query= "SELECT * FROM account"; (2) $data= $db->query($query); (3) echo $data->columncount().php_eol; (4) for($i= 0;$i<$data->columnCount();$i++) { (5) var_export($data->getcolumnmeta($i)); (6) } Meta-Informationen sind solche über etwas. Mit columncount() wird die Anzahl der Spalten ausgelesen, mit getcolumnmeta() eine Beschreibung der Spalte. Rechts steht der Beginn der Ausgabe. Es ist der Aufbau des Deskriptors erkennbar. 4 array ( 'native_type' => 'LONG', 'pdo_type' => 2, 'flags' => array ( 0 => 'not_null', 1 => 'primary_key', ), 'table' => 'account', 'name' => 'id', 'len' => 11, 'precision' => 0, ) 36

37 Abstraktes Auslesen II Ausgabe der Tabelle (1) $data= $db->query($query); (2) $limit= $data->columncount(); (3) for($i= 0;$i<$limit;$i++) { (4) $meta= $data->getcolumnmeta($i); (5) echo $meta['name']." "; (6) } (7) echo PHP_EOL; (8) foreach($data as $row) { (9) foreach($row as $val) { (10) echo $val." "; (11) } (12) echo PHP_EOL; (13)} Es wird eine Überschrift für die Ausgabe aus der Datenbank generiert. Dann werden in einer doppelten for-schleife die Zeilen ausgegeben: jeweils eine Zeile mit mehreren Einträgen. id name pw groupid 0 root bitte! 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn tztrff 0 37

38 Abstraktes Auslesen III Ausgabe der Tabelle (1) $data= $db->query($query); (2) $limit= $data->columncount(); (3) for($i= 0;$i<$limit;$i++) { (4) $meta= $data->getcolumnmeta($i); (5) printf('%10s ',$meta['name']); (6) } (7) echo PHP_EOL; (8) foreach($data as $row) { (9) foreach($row as $val) { (10) printf('%10s ',$val); (11) } (12) echo PHP_EOL; (13)} id name pw groupid 0 root bitte! 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn tztrff 0 Damit es etwas schöner aussieht, wird zur Ausgabe die Routine printf() verwendet, die einen Format-String zur Definition des Layouts erlaubt. Die einzelnen Optionen des ersten Parameters von printf() sind zu entnehmen. 38

39 Nun endlich zum Login I (1) $LoginName= 'root'; (2) $LoginPW= 'bitte!'; (3) $query= "SELECT * FROM account WHERE name='$loginname'"; (4) $data= $db->query($query); (5) $rows= $data->fetchall(); (6) echo count($rows).php_eol; (7) var_export($rows); (8) if((count($rows)==1)&&($loginpw==$rows[0]['pw'])) { (9) echo "loggt in".php_eol; (10)} else { (11) echo "NOT loggt in".php_eol; (12)} $LoginName und $LoginPW kommen aus dem Formular, was hier durch die Zuweisungen simuliert wird. Beachten Sie die Abfrage in (8): es muss ein einziger Eintrag da sein (count()) und das PW muss stimmen. 1 array ( 0 => array ( 'id' => '0', 'name' => 'root', 'pw' => 'bitte!', 'groupid' => '0', ), )loggt in 39

40 Nun endlich zum Login II (1) $LoginName= 'root'; (2) $LoginPW= 'bitte!'; (3) $query= "SELECT * FROM account WHERE name='$loginname'"; (4) $data= $db->query($query); (5) $rows= $data->fetch(); (6) echo gettype($rows).php_eol; (7) var_export($rows); (8) if(($rows!==false)&&($loginpw==$rows['pw'])) { (9) echo "loggt in".php_eol; (10)} else { (11) echo "NOT loggt in".php_eol; (12)} Das ganze geht auch mit einem fetch(), nur dass der Datentyp des Ergebnisses anders ist. Das zeigt sich in der Abfrage. var_export($rows) gibt die Struktur des Ergebnisses aus. array array ( 'id' => '0', 'name' => 'root', 'pw' => 'bitte!', 'groupid' => '0', )loggt in 40

41 Alternative zum Füllen der Tabelle I (1) $insert = "INSERT INTO account(id,name,pw,groupid)"; (2) $insert.= "VALUES(?,?,?,?)"; (3) $stmt= $db->prepare($insert); (4) $id= 0; $name= 'root'; $pw= 'bitte!'; $groupid= 0; (5) $stmt->bindvalue(1,$id, PDO::PARAM_INT); (6) $stmt->bindvalue(2,$name, PDO::PARAM_STR); (7) $stmt->bindvalue(3,$pw, PDO::PARAM_STR); (8) $stmt->bindvalue(4,$groupid,pdo::param_int); (9) $stmt->execute(); id name pw groupid 0 root bitte! 0 Bei den gebundenen Parametern wird eine Schablone (1-2) erstellt, die dann dem Datenbank-Server mitgeteilt wird (3) In der Schablone wird an die Parameter-Positionen ein? gesetzt. In der Reihenfolge der? werden die Parameter per bindvalue(), also als Wertekopie, den? mit einer Typangabe (z.b. PDO::PARAM_INT) zugeordnet. Beim execute() werden die Werte zum Datenbank-Server geschickt, das SQL- Statement dort ausgefüllt und dann ausgeführt. 41

42 Alternative zum Füllen der Tabelle II Schablone erzeugen Parameter zuordnen Ausführen bindvalue() bindparam() Integer: PDO::PARAM_INT String: PDO::PARAM_STR Bool: PDO::PARAM_BOOL Das ist das allgemeine Schema bei der Benutzung von gebundenen Parametern. Neben dem schon eingeführten bindvalue() gibt es noch das bindparam(), das die Bindung über eine Referenz realisiert. Neben den beiden Typen für String und Integer gibt es noch den Typ Boolean. Siehe dazu: 42

43 Alternative zum Füllen der Tabelle III (1) $insert = "INSERT INTO account(id,name,pw,groupid)"; (2) $insert.= "VALUES(?,?,?,?)"; (3) $stmt= $db->prepare($insert); (4) $stmt->bindparam(1,$id, PDO::PARAM_INT); (5) $stmt->bindparam(2,$name, PDO::PARAM_STR); (6) $stmt->bindparam(3,$pw, PDO::PARAM_STR); (7) $stmt->bindparam(4,$groupid,pdo::param_int); (8) foreach($val as $row) { (9) $id= $row['id']; (10) $name= $row['name']; (11) $pw= $row['pw']; (12) $groupid= $row['groupid']; (13) $stmt->execute(); (14)} Das Hash $val ist wie oben gesetzt. id name pw groupid 0 root bitte! 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn tztrff 0 43

44 Alternative zum Füllen der Tabelle IV - Bemerkung (3) $stmt= $db->prepare($insert); (4) $stmt->bindparam(1,$id, PDO::PARAM_INT);... (8) foreach($val as $row) { (9) $id= $row['id']; (10) $name= $row['name']; (11) $pw= $row['pw']; (12) $groupid= $row['groupid']; (13) $stmt->execute(); (14)} In der Schleife wird immer wieder auf die gebundenen Variablen zugegriffen. Bei bindvalue() wird der Wert zum Zeitpunkt des Bindens fest dem? zugeordnet. Bei bindparam() wird der aktuelle Wert zum Zeitpunkt des execute() benutzt. $val[]=array('id'=>0,'name'=>'root', 'pw'=>'bitte!','groupid'=>0); $val[]=array('id'=>1,'name'=>'user', 'pw'=>'danke!','groupid'=>0); 44

45 Alternative zum Füllen der Tabelle V (1) $insert = "INSERT INTO account(id,name,pw,groupid)"; (2) $insert.= "VALUES(:id,:name,:pw,:groupID)"; (3) $stmt= $db->prepare($insert); (4) $stmt->bindparam(':id', $id, PDO::PARAM_INT); (5) $stmt->bindparam(':name', $name, PDO::PARAM_STR); (6) $stmt->bindparam(':pw', $pw, PDO::PARAM_STR); (7) $stmt->bindparam(':groupid',$groupid,pdo::param_int); (8) foreach($val as $row) { (9) foreach($row as $key=>$val) { (10) $$key= $val; (11) } Das Hash $val ist wie oben gesetzt. (12) $stmt->execute(); (13)} Mit einem Doppelpunkt eingeleitet lassen sich die? wie Variablen adressieren. 45

46 Alternative zum Füllen der Tabelle VI - Erläuterung (8) foreach($val as $row) { (9) foreach($row as $key=>$val) { (10) $$key= $val; (11) } (12) $stmt->execute(); (13)} Hier wird der Name der Variablen anhand des Wertes einer anderen Variablen bestimmt! So etwas geht nur in Skriptsprachen. Auszug vom Setzen des Hash $val: $val[]=array('id'=>0,'name'=>'root', 'pw'=>'bitte!','groupid'=>0); $val[]=array('id'=>1,'name'=>'user', 'pw'=>'danke!','groupid'=>0); 46

47 SQL Injection I (1) $LoginName= 'root'; $LoginPW= 'bitte!'; (2) $update= "UPDATE account SET pw = '*balla*' WHERE id = 0"; (3) $data= $db->exec($update); id name pw groupid 0 root *balla* 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn tztrff 0 Zur Vorbereitung einer kleinen Demo für SQL-Injection wird ein Update ausprobiert. SQL-Updates werden ganz analog zum Insert also auch mit gebundenen Parametern - ausgeführt. 47

48 SQL Injection II (1) $LoginPW= 'bitte!'; (2) $update= "UPDATE account SET pw = '*balla*' WHERE id = 0"; (3) $LoginName= "a';$update"; (4) $query= "SELECT * FROM account WHERE name='$loginname'"; (5) echo $query.php_eol; (6) $data= $db->query($query); (7) $rows= $data->fetch(); Quotes (8) if(($rows!==false)&&($loginpw==$rows['pw'])) { (9) echo "loggt in".php_eol; (10)} else { (11) echo "NOT loggt in".php_eol; (12)} Ausgabe: SELECT * FROM account WHERE name='a'; UPDATE account SET pw = '*balla*' WHERE id = 0' Statt eines vernünftigen Loginnamens wird wie in (3) simuliert ein Mischung aus einem Namen und einer SQL-Anweisung hier ein Update eingegeben. Die Zusammensetzung wird unten in 2 Zeilen dargestellt. 48

49 SQL Injection III - Abwehr (1) $LoginPW= 'bitte!'; (2) $update= "UPDATE account SET pw = '*balla*' WHERE id = 0"; (3) $LoginName= "a';$update"; (4) $LoginName= $db->quote($loginname); (5) $query= "SELECT * FROM account WHERE name=$loginname"; (6) echo $query.php_eol; Ausgabe: SELECT * FROM account WHERE name='a\'; UPDATE account SET pw = \'*balla*\' WHERE id = 0' Keine Quotes quote() fügt vor allen "gefährlichen" Zeichen ein Backslash ein, der die Funktion des Zeichens ausschaltet. Daher ist der Loginname der gesamte unterstrichene Bereich. Es wird kein weiteres SQL-Kommando ausgeführt. Zum Glück oder aus Absicht ist MySQL so konfiguriert, dass auch ohne quote() nichts passiert wäre, da jeweils nur ein Kommando ausgeführt wird. Es müssen immer Formulareingaben vor dem Einsetzen in SQL- Strings geprüft werden! 49

50 SQL Injection IV Beste Abwehr (1) $LoginPW= 'bitte!'; (2) $update= "UPDATE account SET pw = '*balla*' WHERE id = 0"; (3) $LoginName= "a';$update"; (4) $query= "SELECT name, pw FROM account WHERE name=:loginname"; (5) $stmt= $db->prepare($query); (6) $stmt->bindvalue(':loginname',$loginname,pdo::param_str); (7) $stmt->execute(); (8) $stmt->bindcolumn('name',$realname,pdo::param_str); (9) $stmt->bindcolumn('pw',$realpw, PDO::PARAM_STR); (10)$rows= $stmt->fetch(); (11)echo $RealName." ".$RealPW.PHP_EOL; (12)if($LoginPW==$RealPW) { (13) echo "loggt in".php_eol; (14)... Die Benutzung von Prepared Statements ist das Beste, da die Formulardaten immer als Daten behandelt werden. 50

51 SQL Injection V Erläuterungen (4) $query= "SELECT name, pw FROM account WHERE name=:loginname"; (6) $stmt->bindvalue(':loginname',$loginname,pdo::param_str); (8) $stmt->bindcolumn('name',$realname,pdo::param_str); (9) $stmt->bindcolumn('pw',$realpw, PDO::PARAM_STR); Spaltennamen von erzeugten temporären Tabellen (durch SELECT) lassen sich auch PHP-Variablen zuordnen. bindcolumn() verbindet den Namen einer SQL-Spalte mit einer Variablen. Nach jedem fetch() werden die aktuellen Werte der gelesenen Zeile den Variablen zugewiesen. Der Angriff via SQL-Injection funktioniert nun nicht mehr, da das SQL- UPDATE als Datum in der WHERE-Klausel behandelt wird. Das ändert nichts daran, alle Formulardaten zu prüfen! 51

52 Transaktionen I (1) $db->begintransaction(); (2) $update= "UPDATE account SET pw = '*balla*' WHERE id = 0"; (3) $data= $db->exec($update); (4) $update= "UPDATE account SET pw = '*' WHERE id = 3"; (5) $data= $db->exec($update); (6) var_dump($data); (7) $update= "UPDATE account SET pw = '??' WHERE id = 4"; (8) $data= $db->exec($update); (9) var_dump($data); (10)$db->commit(); (11)//$db->rollBack(); Fehlerhaftes UPDATE Mit begintransaction() wird eine Transaktion eingeleitet und mit commit() positiv abgeschlossen; erst dann sind die Daten geändert sichtbar. Mit rollback() werden alle Änderungen verworfen. Der Rückgabewert von UPDATE ist die Anzahl der betroffenen Zeilen. Das funktioniert nur bei Tabellentypen, die Transaktionen unterstützen. 52

53 Transaktionen II int(1) int(0) id name pw groupid 0 root *balla* 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn * 0 Fehlerhaftes UPDATE commit() int(1) int(0) id name pw groupid 0 root bitte! 0 1 user danke! 0 2 helmut sdgafg 0 3 evelyn tztrff 0 rollback() 53

54 Tipps I Globales Definieren <?php $Param['host']= 'localhost'; $Param['uid'] = 'nobody'; $Param['pass']= 'bitte!'; $Param['db'] = 'account';?> $Param['dsn'] = "mysql:host=${$param['host']}"; $Param['dsn'].= ";dbname=${$param['db']}"; Globale Parameterwerte sollten in eine Include-Datei mit der Endung ".inc.php" ausgelagert und dann als "Kopf" eingebunden werden. Aus Sicherheitsgründen sollte die Endung immer ".php" sein (was für ".inc.php" ja gilt), da der Server diese Datei nie(?) uninterpretiert zum Browser sendet. 54

55 Tipps II Benutzung der globalen Definitionen (1) require('myparameter.inc.php'); (2) $DB_options = array( (3) PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' (4) ); (5) try { (6) $db= new PDO($Param['dsn'],$Param['uid'], (7) $Param['pass'],$DB_options); Durch die Auslagerung der Parameter in eine externe Datei wird der Code noch allgemein gültiger und dadurch leichter zu warten. Die Optionen könnten in einem weiteren Schritt auch ausgelagert werden. 55

56 Nach dieser Anstrengung etwas Entspannung... 56

Webtechnologien. Teil 8: PDO/MySQL

Webtechnologien. Teil 8: PDO/MySQL Webtechnologien Teil 8: PDO/MySQL 24.10.17 1 Übersicht Arten der Kommunikation mit dem Datenbank-Server Grundsätzliche Operationen Weitere Routinen Tricks und Tipps Siehe: http://dev.mysql.com/doc/refman/5.5/en/apis-php.html

Mehr

Webtechnologien. Teil 8: PDO/MySQL

Webtechnologien. Teil 8: PDO/MySQL Webtechnologien Teil 8: PDO/MySQL 17.05.18 1 Übersicht Arten der Kommunikation mit dem Datenbank-Server Grundsätzliche Operationen Weitere Routinen Tricks und Tipps Siehe: http://dev.mysql.com/doc/refman/5.5/en/apis-php.html

Mehr

Webtechnologien. Teil 8: PDO/MySQL

Webtechnologien. Teil 8: PDO/MySQL Webtechnologien Teil 8: PDO/MySQL 23.11.18 1 Literatur [8-1] https://dev.mysql.com/doc/refman/8.0/en/ [8-2] http://php.net/manual/en/book.mysqli.php [8-3] https://www.tutorialspoint.com/mariadb/mariadb_tutorial.pdf

Mehr

Webtechnologien. Teil 8: PDO/MySQL

Webtechnologien. Teil 8: PDO/MySQL Webtechnologien Teil 8: PDO/MySQL 24.10.17 1 Übersicht Arten der Kommunikation mit dem Datenbank-Server Grundsätzliche Operationen Weitere Routinen Tricks und Tipps Siehe: http://dev.mysql.com/doc/refman/5.5/en/apis-php.html

Mehr

Webtechnologien. Teil 8: PDO/MySQL

Webtechnologien. Teil 8: PDO/MySQL Webtechnologien Teil 8: PDO/MySQL 23.11.18 1 Literatur [8-1] https://dev.mysql.com/doc/refman/8.0/en/ [8-2] http://php.net/manual/en/book.mysqli.php [8-3] https://www.tutorialspoint.com/mariadb/mariadb_tutorial.pdf

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Datenbanken für Online Untersuchungen

Datenbanken für Online Untersuchungen Datenbanken für Online Untersuchungen Im vorliegenden Text wird die Verwendung einer MySQL Datenbank für Online Untersuchungen beschrieben. Es wird davon ausgegangen, dass die Untersuchung aus mehreren

Mehr

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach - Projekt Personalverwaltung Erstellt von Inhaltsverzeichnis 1Planung...3 1.1Datenbankstruktur...3 1.2Klassenkonzept...4 2Realisierung...5 2.1Verwendete Techniken...5 2.2Vorgehensweise...5 2.3Probleme...6

Mehr

Hinweise zur Installation von MySQL

Hinweise zur Installation von MySQL Hinweise zur Installation von MySQL Im Folgenden werden einige Hinweise gegeben, die die Einrichtung einer MySQL-Lernumgebung am eigenen Windows-Rechner erleichtern sollen. Der Text ist vor allem für diejenigen

Mehr

BEDIENUNG ABADISCOVER

BEDIENUNG ABADISCOVER BEDIENUNG ABADISCOVER Juni 2005 / EMO v.2005.1 Diese Unterlagen sind urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdrucks und der Vervielfältigung der Unterlagen, oder Teilen

Mehr

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe... php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.

Mehr

Oracle: Abstrakte Datentypen:

Oracle: Abstrakte Datentypen: Oracle: Abstrakte Datentypen: Oracle bietet zwei mögliche Arten um abstrakte Datentypen zu implementieren: Varying Array Nested Table Varying Array (kunde) kdnr kdname gekaufteart 1 Mustermann 1 4 5 8

Mehr

Internationales Altkatholisches Laienforum

Internationales Altkatholisches Laienforum Internationales Altkatholisches Laienforum Schritt für Schritt Anleitung für die Einrichtung eines Accounts auf admin.laienforum.info Hier erklären wir, wie ein Account im registrierten Bereich eingerichtet

Mehr

ecaros2 - Accountmanager

ecaros2 - Accountmanager ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf

Mehr

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin PhpMyAdmin = grafsches Tool zur Verwaltung von MySQL-Datenbanken Datenbanken erzeugen und löschen Tabellen und Spalten einfügen,

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Tutorial Einrichtung eines lokalen MySQL-Servers für den Offline-Betrieb unter LiveView

Tutorial Einrichtung eines lokalen MySQL-Servers für den Offline-Betrieb unter LiveView Tutorial Einrichtung eines lokalen MySQL-Servers für den Offline-Betrieb unter LiveView IBO Internet Software OHG Wehrstr. 6 41199 Mönchengladbach Tel. +49 (0) 2166 9989 530 Fax +49 (0) 2166 9989 535 ibo@shoppilot.de

Mehr

5. Übung: PHP-Grundlagen

5. Übung: PHP-Grundlagen 5.1. Erstes PHP-Programm 1. Schreiben Sie PHP-Programm innerhalb einer Webseite, d.h. innerhalb eines HTML-Dokument. Ihr PHP-Programm soll einen kurzen Text ausgeben und Komentare enthalten. Speichern

Mehr

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube 30 78462 Konstanz

Whitepaper. Produkt: combit Relationship Manager. Einbindung externer FiBu-/Warenwirtschaftsdaten. combit GmbH Untere Laube 30 78462 Konstanz combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager Einbindung externer FiBu-/Warenwirtschaftsdaten Einbindung externer FiBu-/Warenwirtschaftsdaten - 2 - Inhalt Ausgangssituation

Mehr

Views in SQL. 2 Anlegen und Verwenden von Views 2

Views in SQL. 2 Anlegen und Verwenden von Views 2 Views in SQL Holger Jakobs bibjah@bg.bib.de, holger@jakobs.com 2010-07-15 Inhaltsverzeichnis 1 Wozu dienen Views? 1 2 Anlegen und Verwenden von Views 2 3 Schreibfähigkeit von Views 3 3.1 Views schreibfähig

Mehr

Hilfedatei der Oden$-Börse Stand Juni 2014

Hilfedatei der Oden$-Börse Stand Juni 2014 Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten

Mehr

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten Version 1.0 Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten In unserer Anleitung zeigen wir Dir, wie Du Blogbeiträge

Mehr

Unsere Webapplikation erweitern

Unsere Webapplikation erweitern Unsere Webapplikation erweitern Um die Webapplikation zu benutzen: 1. Starten Sie den Server, indem Sie das Hauptprogramm in der Klasse ImdbServer starten. 2. Laden Sie im Browser die Seite http://localhost:8080/html/index.html.

Mehr

SQL-Injection. Seite 1 / 16

SQL-Injection. Seite 1 / 16 SQL-Injection Seite 1 / 16 Allgemein: SQL (Structured Query Language) Datenbanksprache zur Definition von Datenstrukturen in Datenbanken Bearbeiten und Abfragen von Datensätzen Definition: SQL-Injection

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt

Mehr

Anleitung für die Einrichtung weiterer Endgeräte in 4SELLERS SalesControl

Anleitung für die Einrichtung weiterer Endgeräte in 4SELLERS SalesControl SALESCONTROL Anleitung für die Einrichtung weiterer Endgeräte in 4SELLERS SalesControl Version: 1.1 Stand: 04.09.2014 Die Texte und Abbildungen in diesem Leitfaden wurden mit größter Sorgfalt erarbeitet,

Mehr

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man

Mehr

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: 24.11.2014. Übung WS 2014/2015

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: 24.11.2014. Übung WS 2014/2015 Übung WS 2014/2015 E-Commerce: IT-Werkzeuge Web-Programmierung Kapitel 6: Datenbankabfragen mit SQL und PHP Stand: 24.11.2014 Benedikt Schumm M.Sc. Lehrstuhl für ABWL und Wirtschaftsinformatik Katholische

Mehr

E Mail Versand mit der Schild NRW Formularverwaltung

E Mail Versand mit der Schild NRW Formularverwaltung -Seite 1- E Mail Versand mit der Schild NRW Formularverwaltung Seit der Version 1.12.3.97 der Reportverwaltung ist die Möglichkeit integriert, E Mails direkt, d.h. ohne Umweg über einen externen Mailclient

Mehr

CMS.R. Bedienungsanleitung. Modul Cron. Copyright 10.09.2009. www.sruttloff.de CMS.R. - 1 - Revision 1

CMS.R. Bedienungsanleitung. Modul Cron. Copyright 10.09.2009. www.sruttloff.de CMS.R. - 1 - Revision 1 CMS.R. Bedienungsanleitung Modul Cron Revision 1 Copyright 10.09.2009 www.sruttloff.de CMS.R. - 1 - WOZU CRON...3 VERWENDUNG...3 EINSTELLUNGEN...5 TASK ERSTELLEN / BEARBEITEN...6 RECHTE...7 EREIGNISSE...7

Mehr

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt. Eine Weitergabe

Mehr

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank Die Entscheidung Advoware über VPN direkt auf dem lokalen PC / Netzwerk mit Zugriff auf die Datenbank des zentralen Servers am anderen

Mehr

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009 Hochschule Darmstadt DATENBANKEN Fachbereich Informatik Praktikum 3 Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009 PL/SQL Programmierung Anwendung des Cursor Konzepts und Stored Procedures Und Trigger

Mehr

Datenbanken Kapitel 2

Datenbanken Kapitel 2 Datenbanken Kapitel 2 1 Eine existierende Datenbank öffnen Eine Datenbank, die mit Microsoft Access erschaffen wurde, kann mit dem gleichen Programm auch wieder geladen werden: Die einfachste Methode ist,

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Grundlagen der Informatik 2

Grundlagen der Informatik 2 Grundlagen der Informatik 2 Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik mwilhelm@hs-harz.de Raum 2.202 Tel. 03943 / 659 338 1 Gliederung 1. Einführung

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

SQL (Structured Query Language) Schemata Datentypen

SQL (Structured Query Language) Schemata Datentypen 2 SQL Sprachelemente Grundlegende Sprachelemente von SQL. 2.1 Übersicht Themen des Kapitels SQL Sprachelemente Themen des Kapitels SQL (Structured Query Language) Schemata Datentypen Im Kapitel SQL Sprachelemente

Mehr

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: 19.02.2014 MORE Projects GmbH MORE Profile Pass- und Lizenzverwaltungssystem erstellt von: Thorsten Schumann erreichbar unter: thorsten.schumann@more-projects.de Stand: MORE Projects GmbH Einführung Die in More Profile integrierte

Mehr

Dokumentation IBIS Monitor

Dokumentation IBIS Monitor Dokumentation IBIS Monitor Seite 1 von 16 11.01.06 Inhaltsverzeichnis 1. Allgemein 2. Installation und Programm starten 3. Programmkonfiguration 4. Aufzeichnung 4.1 Aufzeichnung mitschneiden 4.1.1 Inhalt

Mehr

I Serverkalender in Thunderbird einrichten

I Serverkalender in Thunderbird einrichten I Serverkalender in Thunderbird einrichten Damit Sie den Kalender auf dem SC-IT-Server nutzen können, schreiben Sie bitte zuerst eine Mail mit Ihrer Absicht an das SC-IT (hilfe@servicecenter-khs.de). Dann

Mehr

Stundenerfassung Version 1.8

Stundenerfassung Version 1.8 Stundenerfassung Version 1.8 Anleitung Überstunden Ein Modul der Plusversion 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt.

Mehr

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2

Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2 Anleitung zur Konfiguration eines NO-IP DynDNS-Accounts mit der TOOLBOXflex-3.2 DynDNS-Accounts sollten in regelmäßigen Abständen mit der vom Internet-Provider vergebenen IP- Adresse (z.b. 215.613.123.456)

Mehr

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

teamsync Kurzanleitung

teamsync Kurzanleitung 1 teamsync Kurzanleitung Version 4.0-19. November 2012 2 1 Einleitung Mit teamsync können Sie die Produkte teamspace und projectfacts mit Microsoft Outlook synchronisieren.laden Sie sich teamsync hier

Mehr

4. BEZIEHUNGEN ZWISCHEN TABELLEN

4. BEZIEHUNGEN ZWISCHEN TABELLEN 4. BEZIEHUNGEN ZWISCHEN TABELLEN Zwischen Tabellen können in MS Access Beziehungen bestehen. Durch das Verwenden von Tabellen, die zueinander in Beziehung stehen, können Sie Folgendes erreichen: Die Größe

Mehr

Adminer: Installationsanleitung

Adminer: Installationsanleitung Adminer: Installationsanleitung phpmyadmin ist bei uns mit dem Kundenmenüpasswort geschützt. Wer einer dritten Person Zugriff auf die Datenbankverwaltung, aber nicht auf das Kundenmenü geben möchte, kann

Mehr

Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX

Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX Allgemeines Auto-Provisionierung tiptel 31x0 mit Yeastar MyPBX Stand 19.09.2014 Die Yeastar MyPBX Telefonanlagen unterstützen die automatische Konfiguration der tiptel 3110, tiptel 3120 und tiptel 3130

Mehr

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023

Kapitel 33. Der xml-datentyp. In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 Kapitel 33 Der xml-datentyp In diesem Kapitel: Der xml-datentyp 996 Abfragen aus xml-datentypen 1001 XML-Indizierung 1017 Zusammenfassung 1023 995 996 Kapitel 33: Der xml-datentyp Eine der wichtigsten

Mehr

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b AGROPLUS Buchhaltung Daten-Server und Sicherheitskopie Version vom 21.10.2013b 3a) Der Daten-Server Modus und der Tresor Der Daten-Server ist eine Betriebsart welche dem Nutzer eine grosse Flexibilität

Mehr

Erstellung botoptimierter Partnerlinks

Erstellung botoptimierter Partnerlinks Erstellung botoptimierter Partnerlinks Um bestimmte Aktionen und deren Rückläufer übersichtlich tracken zu können, bietet das RedSYS Partnerprogramm in Verbindung mit den botoptimierten RedSYS-Links, die

Mehr

Aufklappelemente anlegen

Aufklappelemente anlegen Aufklappelemente anlegen Dieses Dokument beschreibt die grundsätzliche Erstellung der Aufklappelemente in der mittleren und rechten Spalte. Login Melden Sie sich an der jeweiligen Website an, in dem Sie

Mehr

Guideline. Facebook Posting. mit advertzoom Version 2.3

Guideline. Facebook Posting. mit advertzoom Version 2.3 Guideline Facebook Posting mit advertzoom Version 2.3 advertzoom GmbH advertzoom GmbH Stand November 2012 Seite [1] Inhalt 1 Facebook Posting Schnittstelle... 3 1.1 Funktionsüberblick... 3 2 Externe Ressource

Mehr

Anleitung zur Anmeldung beim EPA zur Nutzung von OPS 3.1

Anleitung zur Anmeldung beim EPA zur Nutzung von OPS 3.1 Anleitung zur Anmeldung beim EPA zur Nutzung von OPS 3.1 Mit der Version 3.1 des OPS hat das EPO eine Begrenzung des Download-Volumens bei der kostenlosen Nutzung eingeführt. Um die Datenmengen zuordnen

Mehr

PHPNuke Quick & Dirty

PHPNuke Quick & Dirty PHPNuke Quick & Dirty Dieses Tutorial richtet sich an all die, die zum erstenmal an PHPNuke System aufsetzen und wirklich keine Ahnung haben wie es geht. Hier wird sehr flott, ohne grosse Umschweife dargestellt

Mehr

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware Datenübernahme von HKO 5.9 zur Advolux Kanzleisoftware Die Datenübernahme (DÜ) von HKO 5.9 zu Advolux Kanzleisoftware ist aufgrund der von Update zu Update veränderten Datenbank (DB)-Strukturen in HKO

Mehr

Verschlüsseln von Dateien mit Hilfe einer TCOS-Smartcard per Truecrypt. T-Systems International GmbH. Version 1.0 Stand 29.06.11

Verschlüsseln von Dateien mit Hilfe einer TCOS-Smartcard per Truecrypt. T-Systems International GmbH. Version 1.0 Stand 29.06.11 Verschlüsseln von Dateien mit Hilfe einer TCOS-Smartcard per Truecrypt T-Systems International GmbH Version 1.0 Stand 29.06.11 Impressum Herausgeber T-Systems International GmbH Untere Industriestraße

Mehr

TYPO3 Tipps und Tricks

TYPO3 Tipps und Tricks TYPO3 Tipps und Tricks Seiten als Shortcut. Hiermit ist gemeint, dass eine Oberseite direkt auf eine tiefere Unterseite verlinkt. Dies kann bei Themen ohne gesonderte Übersichtsseite hilfreich sein. Zum

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11 Datenbanksysteme WS 05/ 06 Gruppe 12 Martin Tintel Tatjana Triebl Seite 1 von 11 Inhaltsverzeichnis Inhaltsverzeichnis... 2 1. Einleitung... 3 2. Datenbanken... 4 2.1. Oracle... 4 2.2. MySQL... 5 2.3 MS

Mehr

R-ADSL2+ Einrichthinweise unter Windows 98/ME

R-ADSL2+ Einrichthinweise unter Windows 98/ME R-ADSL2+ Einrichthinweise unter Windows 98/ME Verwenden Sie einen externen Router? Dann folgen Sie bitte der Anleitung des Routers und NICHT unseren zur Einrichtung einer Internetverbindung unter Windows

Mehr

Oracle SQL Tutorium - Wiederholung DB I -

Oracle SQL Tutorium - Wiederholung DB I - Oracle SQL Tutorium - Wiederholung DB I - (Version 2.6 vom 24.2.2015) Einleitung Im Folgenden sind zur Wiederholung eine Reihe von SQL-Übungsaufgaben zu lösen. Grundlage für die Aufgaben ist die Mondial

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Zur drittletzten Zeile scrollen

Zur drittletzten Zeile scrollen 1 Fragen und Antworten zur Computerbedienung Thema : Zur drittletzten Zeile scrollen Thema Stichwort Programm Letzte Anpassung Zur drittletzten Zeile scrollen Scrollen VBA Excel 1.02.2014 Kurzbeschreibung:

Mehr

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel. +49 351-463 - 32424. Michael Kluge (michael.kluge@tu-dresden.

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel. +49 351-463 - 32424. Michael Kluge (michael.kluge@tu-dresden. Zentrum für Informationsdienste und Hochleistungsrechnen (ZIH) PHP und MySQL Integration von MySQL in PHP Zellescher Weg 12 Willers-Bau A109 Tel. +49 351-463 - 32424 (michael.kluge@tu-dresden.de) MySQL

Mehr

Webakte in Advolux Verfasser : Advolux GmbH Letze Änderung : 10. Juli 2015 1

Webakte in Advolux Verfasser : Advolux GmbH Letze Änderung : 10. Juli 2015 1 Webakte in Advolux Verfasser : Advolux GmbH Letze Änderung : 10. Juli 2015 1 Inhaltsverzeichnis WIE NUTZEN SIE DIE FUNKTIONALITÄTEN DER WEBAKTE IN ADVOLUX?... 3 E-CONSULT-ZUGANG ERSTMALIG EINRICHTEN...

Mehr

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7 FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7 Die Installation der FuxMedia Software erfolgt erst NACH Einrichtung des Netzlaufwerks! Menüleiste einblenden, falls nicht vorhanden Die

Mehr

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1

Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Java Database Connectivity (JDBC) 14.07.2009 Walther Rathenau Gewerbeschule 1 Was ist JDBC? Hauptsächlich eine Sammlung von Java Klassen und Schnittstellen für eine einfache Verbindung von Java Programmen

Mehr

GITS Steckbriefe 1.9 - Tutorial

GITS Steckbriefe 1.9 - Tutorial Allgemeines Die Steckbriefkomponente basiert auf der CONTACTS XTD Komponente von Kurt Banfi, welche erheblich modifiziert bzw. angepasst wurde. Zuerst war nur eine kleine Änderung der Komponente für ein

Mehr

STRATO Mail Einrichtung Microsoft Outlook

STRATO Mail Einrichtung Microsoft Outlook STRATO Mail Einrichtung Microsoft Outlook Einrichtung Ihrer E-Mail Adresse bei STRATO Willkommen bei STRATO! Wir freuen uns, Sie als Kunden begrüßen zu dürfen. Mit der folgenden Anleitung möchten wir Ihnen

Mehr

Info-Veranstaltung zur Erstellung von Zertifikaten

Info-Veranstaltung zur Erstellung von Zertifikaten Info-Veranstaltung zur Erstellung von Zertifikaten Prof. Dr. Till Tantau Studiengangsleiter MINT Universität zu Lübeck 29. Juni 2011 Gliederung Zertifikate Wer, Wann, Was Ablauf der Zertifikaterstellung

Mehr

STRATO Mail Einrichtung Mozilla Thunderbird

STRATO Mail Einrichtung Mozilla Thunderbird STRATO Mail Einrichtung Mozilla Thunderbird Einrichtung Ihrer E-Mail Adresse bei STRATO Willkommen bei STRATO! Wir freuen uns, Sie als Kunden begrüßen zu dürfen. Mit der folgenden Anleitung möchten wir

Mehr

Windows Vista Security

Windows Vista Security Marcel Zehner Windows Vista Security ISBN-10: 3-446-41356-1 ISBN-13: 978-3-446-41356-6 Leseprobe Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-41356-6 sowie im Buchhandel

Mehr

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine

Mehr

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003 Page 1 of 8 SMTP Konfiguration von Exchange 2003 Kategorie : Exchange Server 2003 Veröffentlicht von webmaster am 25.02.2005 SMTP steht für Simple Mail Transport Protocol, welches ein Protokoll ist, womit

Mehr

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2 5 Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn 7 7. Datenbank-Zugriff Zum Beispiel aus PHP-Skripten: Client 7-2 Struktur einer Datenbank 7-3 Erzeugen von Datenbanken

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

PKV- Projektanlage Assistent

PKV- Projektanlage Assistent Desk Software & Consulting GmbH PKV- Projektanlage Assistent Edith Freundt DESK Software und Consulting GmbH Im Heerfeld 2-4 35713 Eibelshausen Tel.: +49 (0) 2774/924 98-0 Fax: +49 (0) 2774/924 98-15 info@desk-firm.de

Mehr

Abschluss Version 1.0

Abschluss Version 1.0 Beschreibung Der Abschluss wird normalerweise nur einmal jährlich durchgeführt. Dieses Tech-Note soll helfen, diesen doch seltenen aber periodisch notwendigen Vorgang problemlos durchzuführen. Abschlussvarianten

Mehr

Datenbanksysteme SS 2007

Datenbanksysteme SS 2007 Datenbanksysteme SS 2007 Frank Köster (Oliver Vornberger) Institut für Informatik Universität Osnabrück Kapitel 9c: Datenbankapplikationen Architektur einer Web-Applikation mit Servlets, JSPs und JavaBeans

Mehr

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler Programmieren für mobile Endgeräte SS 2013/2014 Programmieren für mobile Endgeräte 2 Informationen aus der Datenbank lesen Klasse SQLiteDatabase enthält die Methode query(..) 1. Parameter: Tabellenname

Mehr

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken. In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht

Mehr

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA Aktionsabfragen lassen sich bequem mit der Entwurfsansicht für Abfragen zusammenstellen. Sie können damit Daten an Tabellen anfügen, bestehende Daten ändern oder löschen und sogar gleich die passende Tabelle

Mehr

Menü auf zwei Module verteilt (Joomla 3.4.0)

Menü auf zwei Module verteilt (Joomla 3.4.0) Menü auf zwei Module verteilt (Joomla 3.4.0) Oft wird bei Joomla das Menü in einem Modul dargestellt, wenn Sie aber z.b. ein horizontales Hauptmenü mit einem vertikalen Untermenü machen möchten, dann finden

Mehr

Verschlüsselung mit PGP. Teil 1: Installation

Verschlüsselung mit PGP. Teil 1: Installation Verschlüsselung mit PGP Teil 1: Installation Burkhard Messer FHTW Berlin FB 4 Wirtschaftsinformatik Verschlüsselung mit PGP - Teil 1/Installation 04.04.2006 1 Version Es steht das mehr oder weniger freie

Mehr

Lehrer: Einschreibemethoden

Lehrer: Einschreibemethoden Lehrer: Einschreibemethoden Einschreibemethoden Für die Einschreibung in Ihren Kurs gibt es unterschiedliche Methoden. Sie können die Schüler über die Liste eingeschriebene Nutzer Ihrem Kurs zuweisen oder

Mehr

Hochschule Ravensburg-Weingarten. Technik Wirtschaft Sozialwesen. Projektarbeit

Hochschule Ravensburg-Weingarten. Technik Wirtschaft Sozialwesen. Projektarbeit Hochschule Ravensburg-Weingarten Technik Wirtschaft Sozialwesen Projektarbeit Entwicklung eines Reitmoduls mit Reitstundenverwaltung für eine existierende Homepage eines Reitvereins vorgelegt von: Tobias

Mehr

MARCANT - File Delivery System

MARCANT - File Delivery System MARCANT - File Delivery System Dokumentation für Administratoren Der Administrationsbereich des File Delivery Systems ist ebenfall leicht zu bedienen. Die wichtigsten drei Abschnitte sind: 1. Profil, 2.

Mehr

Einführung in die Scriptsprache PHP

Einführung in die Scriptsprache PHP Herbst 2014 Einführung in die Scriptsprache PHP Wirtschaftsinformatik: 5. Semester Dozenten: Rainer Telesko / Martin Hüsler Fachhochschule Nordwestschweiz FHNW - Rainer Telesko / Martin Hüsler 1 Inhalt:

Mehr

How to install freesshd

How to install freesshd Enthaltene Funktionen - Installation - Benutzer anlegen - Verbindung testen How to install freesshd 1. Installation von freesshd - Falls noch nicht vorhanden, können Sie das Freeware Programm unter folgendem

Mehr

Website freiburg-bahai.de

Website freiburg-bahai.de Website freiburg-bahai.de Eine kleine Gebrauchsanleitung Liebe Freunde! Das ist eine kleine Gebrauchsanleitung zu den Funktionen der Website freiburg-bahai.de. Eine Gebrauchsanleitung für die Administratoren

Mehr

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70 Thermoguard Thermoguard CIM Custom Integration Module Version 2.70 Inhalt - Einleitung... 3 - Voraussetzungen... 3 - Aktivierung und Funktion der Schnittstelle... 3 - Parameter... 4 - NLS-Einfluss... 4

Mehr

Enigmail Konfiguration

Enigmail Konfiguration Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es

Mehr

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung

AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung AutoCAD 2007 - Dienstprogramm zur Lizenzübertragung Problem: Um AutoCAD abwechselnd auf mehreren Rechnern einsetzen zu können konnte man bis AutoCAD 2000 einfach den Dongle umstecken. Seit AutoCAD 2000i

Mehr

SEMINAR Modifikation für die Nutzung des Community Builders

SEMINAR Modifikation für die Nutzung des Community Builders 20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen

Mehr