Webtechnologien Teil 12: PHP 5 mit PDO/MySQL
|
|
- Carsten Simen
- vor 8 Jahren
- Abrufe
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 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
MehrWebtechnologien. 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
MehrWebtechnologien. 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
MehrWebtechnologien. 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
MehrWebtechnologien. 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
MehrOP-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
MehrDatenbanken 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
MehrPHP - 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
MehrHinweise 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
MehrBEDIENUNG 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
Mehrphp 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.
MehrOracle: 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
MehrInternationales 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
Mehrecaros2 - 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
MehrDatenbanken 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,
Mehr1 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
MehrTutorial 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
Mehr5. Ü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
MehrWhitepaper. 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
MehrViews 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
MehrHilfedatei 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
MehrWordpress: 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
MehrUnsere 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.
MehrSQL-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
MehrEinfü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
MehrErweiterung 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
MehrAnleitung 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,
Mehrmysql - 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
MehrE-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
MehrE 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
MehrCMS.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
MehrStundenerfassung 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
MehrAdvoware 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
MehrDipl. 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
MehrDatenbanken 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,
MehrLineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
MehrGrundlagen 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
MehrProfessionelle 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
MehrSQL (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
MehrMORE 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
MehrDokumentation 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
MehrI 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
MehrStundenerfassung 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.
MehrAnleitung 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)
MehrSuche 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
Mehr5 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
Mehrteamsync 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
Mehr4. 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
MehrAdminer: 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
MehrAuto-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
MehrKapitel 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
MehrAGROPLUS 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
MehrErstellung 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
MehrAufklappelemente 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
MehrGuideline. 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
MehrAnleitung 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
MehrPHPNuke 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
MehrDatenü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
MehrVerschlü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
MehrTYPO3 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
MehrObjektorientierte 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
MehrProjektbericht 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
MehrR-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
MehrOracle 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
MehrObjektorientierte 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
MehrZur 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:
MehrPHP 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
MehrWebakte 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...
MehrFuxMedia 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
MehrJava 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
MehrGITS 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
MehrSTRATO 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
MehrInfo-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
MehrSTRATO 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
MehrWindows 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
MehrDatenbank-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
MehrMSXFORUM - 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
Mehr7. 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
MehrEinfü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
MehrPKV- 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
MehrAbschluss 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
MehrDatenbanksysteme 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
MehrProgrammieren 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
MehrIn 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
MehrAccess [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
MehrMenü 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
MehrVerschlü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
MehrLehrer: 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
MehrHochschule 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
MehrMARCANT - 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.
MehrEinfü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:
MehrHow 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
MehrWebsite 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
MehrThermoguard. 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
MehrEnigmail 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
MehrAutoCAD 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
MehrSEMINAR 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