1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
<html> <head> <title>Kameradenfinder/Meldeliste für Besatzungsmitglieder</title> </head> <body BGcolor="#ffffea" text="#ffff91"> <center> <br> <br> <table width="700" bgcolor="#000000" cellpadding="10" border="9" cellspacing="0"> <tr> <td> <font title="Meldeliste für Besatzungsmitglieder"> <br> <center> <table cellSpacing="1" cellPadding="1" width="650" border="0"> <tbody> <tr> <td align="middle"> <form action="/cgi-bin/formmail" method="post"> <table cellSpacing="2" cellPadding="2" width="90%" border="0"> <tbody> <tr> <td colspan="2" align="center"><b><font face="verdana,tahoma,arial" size=6>Meldeformular</font></b> <a href="meldelistedoc.html"><font face="verdana" color="#ffff91" size="4" title="Meldeliste lesen...">Meldeliste lesen...</font></a><br><br><br> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Name: </font></b> </td> <td><input maxlength="30" size="50" name="name" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Vorname: </font></b> </td> <td><input maxlength="30" size="50" name="vorname" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Wohnort: </font></b> </td> <td><input maxlength="30" size="50" name="wohnort" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">E-Mail: </font></b> </td> <td><input maxlength="30" size="50" value="" onfocus="this.value=''" name="e-mail" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Homepage: </font></b> </td> <td><input maxlength="30" size="50" value="" onfocus="this.value=''" name="homepage" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Zur Person: </font></b> </td> <td><textarea name="Zur Person" value="" onfocus="this.value=''" rows="4" cols="50" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"></textarea></td> </tr> <tr> <td><b><font face="verdana" size="-1">Dienstzeit: </font></b> </td> <td><input maxlength="30" size="50" value="" onfocus="this.value=''" name="dienstzeit" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Dienstgrad: </font></b> </td> <td><input maxlength="30" size="50" name="dienstgrad" value="" onfocus="this.value=''" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Dienststellung: </font></b> </td> <td><input maxlength="30" size="50" name="dienststellung" value="" onfocus="this.value=''" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Einheit/Schiff: </font></b> </td> <td><input maxlength="30" size="50" name="einheit" value="" onfocus="this.value=''" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Schiff - Bordnummer: </font></b> </td> <td><input maxlength="30" size="50" name="nummer" value="" onfocus="this.value=''" style="background-color: #ffffe1; font-family: verdana; font-weight: bold"> </td> </tr> <tr> <td><b><font face="verdana" size="-1">Schiff - Projekt: </font></b> </td> <td><select size="1" name="typ" style="background-color: #ffffe1; font-family: verdana; font-weight: bold" title="Typ auswählen"> <option value="0" selected title="Schiffstyp auswählen">------------ Schiffstyp auswählen --------->>></option> <option value="0" title="Minenleger"> KSS Projekt 1159 (Koni-class)</option> <option value="0" title="Minenleger"> MSR Projekt 89.2 (Kondor-class)</option> <option value="0" title="U-Jagd"> U-Jagd Projekt 133 (Parchim-class)</option> <option value="0" title="Landungsschiff"> LSM Projekt 108 (Frosch-class)</option> </select> </td> </tr> </tbody> </table> </form> <br> <hr color="#ffff91"> <br> <center><input title="Ich möchte mich in die Meldeliste eintragen." style="cursor: hand; background-color: #00ff00; color: #00004a; font-family: verdana; font-weight: bold" type="submit" value="EINTRAGEN"> <input title="Alles Mist noch mal neu." style="cursor: hand; background-color: #ff0000; color: #00004a; font-family: verdana; font-weight: bold" type="reset" value="LÖSCHEN"> <a href="Meldelistedoc.html"><font face="verdana" color="#ffff91" size="4" title="Meldeliste lesen...">Meldeliste lesen...</font></a> <br><br> <hr color="#ffff91"> <br> </tr> </td> </table> </tr> </td> </table> </body> </html>
1 2 3 4 5 6 7 8 9 10 11
$object = { FELDER => { typ => ['varchar(100)', 'text', 100], name => ['varchar(100)', 'text', 100], vorname => ['varchar(100)', 'text', 100], beschreibung => ['longtext', 'textarea', '80,15'], }, }; # Attribute für die DB-Tabelle auf Index [0] # Attribute für das HTML-Formular auf Index [1] und [2]
rostiHast Du zum Entwickeln/Testen alles dabei? Webserver, mysql, perl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
# Dateiname: Base.pm # general pragmas use strict; use warnings; package Base; # Main-Object der Superklasse sub new{ my $class = shift; # Definiere die erforderlichen Felder # [0]-> Attribute DB my $self = bless{ FIELDS => { name => ["varchar(100) NOT NULL DEFAULT ''"], vname => ["varchar(100) NOT NULL DEFAULT ''"], type => ["varchar(100) NOT NULL DEFAULT ''"], descr => ["text"], }, DBH => undef, CGI => undef, }, $class; return $self; } 1;######################################################################### package Base::DBI::CGI; # Bestimmung: # Object und Methoden für Zugriff auf Datenbank (wird geerbt) # Darstellung HTML-Formular # Formularverarbeitung, delegierung param()-method, header()-method use CGI; use base qw(Base::DBI); # Inherit from Base::DBI sub new{ my $param = shift; my $class = ref($param) || $param; my $self = $class->SUPER::new(@_); # add the CGI-Attribute, perform the param-method $self->{CGI} = CGI->new; return $self; } ############################ PUBLIC METHODS ############################### # delegiere CGI::param sub param{ my $self = shift; return $self->{CGI}->param(@_); } # delegiere CG::header Method sub header{ my $self = shift; return $self->{CGI}->header(@_); } 1;######################################################################### package Base::DBI; # Bestimmung: Zugriff auf die Datenbank use DBI; use base qw(Base); use Carp; # Inherit from 'Base' sub new{ my $param = shift; my $class = ref($param) || $param; my $self = $class->SUPER::new; # add the DatabaseHandle $self->_handle(@_) or croak "Keine Verbindung zur DB: $@"; return $self; } ########################## PRIVATE METHODS ################################ sub _handle{ my $self = shift; # Default Settings my %opts = ( base => undef, # Name der Datenbank user => '', pass => '', port => 3306, host => 'localhost', tabn => undef, # Name der Tabelle @_, # Parameter ); $self->{TABN} = $opts{tabn} or croak "No Tablename specified"; my $dsn = "DBI:mysql:database=$opts{base};host=$opts{host};port=$opts{port}"; eval{ $self->{DBH} = DBI->connect_cached( $dsn, $opts{user}, $opts{pass}, { RaiseError => 1, PrintError => 0, } ); # sicherheitshalber quote Tabellenname $self->{TABN} = $self->{DBH}->quote_identifier($self->{TABN}); }; return $@ ? undef : 1; } ######## Base::DBI ####### PUBLIC METHODS ################################# # Tabelle erstellen sub create_table{ my $self = shift; # Felder aufarbeiten, quote_identyfier my @fields = (); foreach my $f(keys %{$self->{FIELDS}}){ my $qf = $self->{DBH}->quote_identifier($f); # Attribute hinzu push @fields, qq($qf $self->{FIELDS}->{$f}->[0]); } my $fields = join ",", @fields; # Statement my $q = qq( CREATE TABLE IF NOT EXISTS $self->{TABN} ( $fields ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ); eval{ $self->{DBH}->do($q) }; return $@ ? undef : 1; } # Tabelle entfernen sub drop_table{ my $self = shift; eval{ $self->{DBH}->do("DROP TABLE $self->{TABN}") }; return $@ ? undef : 1; } # INSERT, nach dem ersten Aufruf liegt das prepared Statement im Objekt sub insert{ my $self = shift; my %vals = @_; # hash # Reihenfolge hier egal aber später beim Einbau genauso wie hier!!! my @fields = keys %{$self->{FIELDS}}; # erzeuge prepared Statement if(not defined($self->{STH_INSERT})){ my @qms = (); push @qms, "?" for @fields; my $q = "INSERT INTO $self->{TABN} (".join(",", @fields).") VALUES(".join(",", @qms).")"; $self->{STH_INSERT} = $self->{DBH}->prepare_cached($q); } # Konsistenzprüfung der einzugebenden Werte my @input = (); foreach my $f(@fields){ if(my $val = $vals{$f}){ push @input, $val; } } eval{ $self->{STH_INSERT}->execute(@input) }; return $@ ? undef : 1; } 1;######################################################################### __END__ # Anwendung im CGI-Script # Optionen für die Datenbank my %myopts = ( base => 'myweb', tabn => 'meldeliste', user => '', pass => '', host => 'localhost', port => 3306, ); # Objekterstellung use Base; my $o = Base::DBI::CGI->new(%myopts); # erklärt sich von selbst #$o->create_table or die "$@"; #$o->drop_table or die "$@"; # Es sind noch die Methoden für den DB-Zugriff zu schreiben # diese Methoden gehören in die package Base::DBI # insert funktioniert bereits $o->insert( name => 'Rosti', vname => 'Rolf', type => 'Flaggschiff', descr => 'Meine Zeit bei der Marine', ) or die "$@"; # Du kannst einen HTTP-Header erzeugen # print $o->header('text/html; charset=UTF-8'); # oder die Parameter erfassen # my $name = $o->param('name');
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
########################################################################### # # Dateiname: Kladde.pm # Einfache Klasse für eine Tabelle # Rolf Rost, 15.7.2011 # ########################################################################### package Kladde; use strict; use warnings; use DBI; # Object beeinhaltet die Definition der Felder und # die Definition des Primary Key sub new{ my $class = shift; my %opts = @_; # Definiere die erforderlichen Felder # [0]-> Attribute DB, Feldtype # Achtung, es kommt noch ein Feld für das Einfügedatum hinzu # fest codiert: Feldname 'datime' my $self = bless{ FIELDS => { name => ["varchar(100) NOT NULL DEFAULT ''", 'Familienname'], vorname => ["varchar(100) NOT NULL DEFAULT ''", 'Vorname'], wohnort => ["varchar(100) NOT NULL DEFAULT ''", 'Wohnort'], email => ["varchar(100) NOT NULL DEFAULT ''", 'Email'], homepage => ["varchar(255) NOT NULL DEFAULT ''", 'Website'], typ => ["varchar(100) NOT NULL DEFAULT ''", 'Schiffstyp'], descr => ["text", 'Angaben zur Person'], dienstzeit => ["varchar(100) NOT NULL DEFAULT ''", 'Dienstzeit von bis'], dienstgrad => ["varchar(100) NOT NULL DEFAULT ''", 'Dienstgrad'], dienststellung => ["varchar(100) NOT NULL DEFAULT ''", 'Dienststellung'], einheit => ["varchar(100) NOT NULL DEFAULT ''", 'Name der Einheit'], nummer => ["varchar(100) NOT NULL DEFAULT ''", 'Schiffsnummer'], }, PKEY => q(name, vorname, email), DBH => undef, }, $class; $self->_handle(%opts) or return; # Fehler in $@ return $self; } ########################## PRIVATE METHODS ################################ # Erstelle DataBaseHandle sub _handle{ my $self = shift; # Default Settings my %opts = ( base => 'myweb', # Name der Datenbank user => '', # DB Benutzername pass => '', # DB Passwort port => 3306, # DB Port host => 'localhost', # DB Host tabn => 'kladde', # Name der Tabelle @_, # Parameter ); # Alle Keys muessen definiert sein foreach my $k(keys %opts){ return if not defined $k } # Data Source Name my $dsn = "DBI:mysql:database=$opts{base};host=$opts{host};port=$opts{port}"; eval{ $self->{DBH} = DBI->connect_cached( $dsn, $opts{user}, $opts{pass}, { RaiseError => 1, PrintError => 0, } ); }; if($@){ return; } else{ $self->{TABN} = $self->{DBH}->quote_identifier($opts{tabn}); return 1; } } ########################## PUBLIC METHODS ################################# # Tabelle erstellen sub create_table{ my $self = shift; # Felder aufarbeiten, quote_identifier my @fields = (); foreach my $f(keys %{$self->{FIELDS}}){ my $qf = $self->{DBH}->quote_identifier($f); # Attribute hinzu push @fields, qq($qf $self->{FIELDS}->{$f}->[0]); } # Datum/Zeitfeld hinzu push @fields, qq(datime DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'); # Falls ein Primary Key sein soll if(defined $self->{PKEY}){ push @fields, qq(PRIMARY KEY ($self->{PKEY})) } my $fields = join ",", @fields; # Statement my $q = qq( CREATE TABLE $self->{TABN} ( $fields ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ); eval{ $self->{DBH}->do($q) }; return $@ ? undef : 1; } ########################################################################### # Tabelle entfernen sub drop_table{ my $self = shift; eval{ $self->{DBH}->do("DROP TABLE $self->{TABN}") }; return $@ ? undef : 1; } # INSERT, nach dem ersten Aufruf liegt das prepared Statement im Objekt # Damit werden mehrere aufeinanderfolgende Inserts performanter sub insert{ my $self = shift; my %vals = @_; # hash # Reihenfolge hier egal aber später beim Einbau genauso wie hier!!! my @fields = keys %{$self->{FIELDS}}; # Achtung, das Feld 'datime' geht extra mit NOW() # erzeuge prepared Statement if(not defined($self->{STH_INSERT})){ my @qms = (); # Question Marks my @updates = (); # Falls ein Primary Key definiert ist for(@fields){ push @qms, "?"; push @updates, "$_=?"; } my $q = "INSERT INTO $self->{TABN} (".join(",", @fields).", datime) VALUES(".join(",", @qms).", NOW() )"; $q .= " ON DUPLICATE KEY UPDATE ".join(",", @updates).", datime=NOW()"; $self->{STH_INSERT} = $self->{DBH}->prepare_cached($q); } # Konsistenzprüfung der einzugebenden Werte my @input = (); foreach my $f(@fields){ if(my $val = $vals{$f}){ push @input, $val; } else{ $@ = "Eingabefelder nicht korrekt mit Werten"; return; } } eval{ $self->{STH_INSERT}->execute(@input, @input) }; return $@ ? undef : 1; } ########################################################################### # Löschen nach bestimmten Keys sub delete{ my $self = shift; my %keys = @_; if(not keys %keys){ $@ = "Keine Schluesselwerte definiert", return; } # Where Klause zusammenbauen my @where = (); foreach my $k(keys %keys){ my $v = $self->{DBH}->quote($keys{$k}); push @where, qq($k = $v); } my $where = "WHERE ".join(" AND ", @where); eval{ $self->{DBH}->do("DELETE FROM $self->{TABN} $where") }; return $@ ? undef : 1; } 1;######################################################################### # Zum Testen entferne den END-Token und führe die Datei aus mit Perl # Oder das Modul unter 'Kladde.pm' abspeichern und im Script mit # use Kladde; # einbinden __END__ package main; use strict; use warnings; # Anwendung im CGI-Script # Optionen für die Datenbank my %myopts = ( base => 'myweb', tabn => 'kladde', user => '', pass => '', host => 'localhost', port => 3306, ); # Objekterstellung, DataBaseObject # Zur Fehlerbehandlung immer $@ abfragen # Jede Funktion liefert 1 bei Erfolg, undef bei NichtErfolg my $dbo = Kladde->new(%myopts) or die $@;; # erklärt sich von selbst # $dbo->create_table or die $@; # $dbo->drop_table or die $@; # Alle Felder müssen einen Wert bekommen # Generalprobe mit einigen Inserts for(1..2000){ $dbo->insert( name => "Larson $_", vorname => "Holger $_", typ => 'Flaggschiff', descr => 'Meine Zeit bei Marina', wohnort => 'Buxtehude', email => "blonder_hans_$_\@example.com", dienstzeit => '1975-1978', dienstgrad => 'Vollmatrose', dienststellung => 'Klabautermann', einheit => 'Hannes Schinder', nummer => "abc/0815 $_", homepage => "http://example.com/$_", ) or die $@; } # entsprechend der Keys wird gelöscht #$dbo->delete( # name => 'Albers', # vorname => 'Hanns', #) or die $@;
1
2
3
4
5
6
7
8
9
Serverfehler!
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist. Der Server ist entweder überlastet oder ein Fehler in einem CGI-Skript ist aufgetreten.
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 500
localhost
07/16/11 19:43:50
Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#!/usr/bin/perl use strict; use warnings; use CGI; my $cgi = CGI->new; print $cgi->header('text/html; charset=UTF-8'); if($cgi->param){ # vorerst nur ein Test, ob das Formular funktioniert print "Es gibt Parameter"; } else{ # hier gibtst du mit print deine Seite aus und # das Formular # form action="$ENV{SCRIPT_NAME}" }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/perl use strict; use warnings; use Kladde; # Groß/Kleinschreibung beachten! # Credentials für mysql my %myopts = ( user => '', pass => '', base => 'datenbankname', tabn => 'tabellenname', ); my $dbo = Kladde->new(%myopts) or die $@; $dbo->create_table or die $@; $dbo->drop_table or die $@;
2011-07-17T08:50:35 FIFOWenn Du neu in Perl bist, solltest Du versuchen, Deine Fragestellung so zu formulieren, dass Dir klar wird, was Du eigentlich brauchst/erwartest.
Albert EinsteinWenn die Menschen nur über das sprächen, was sie begreifen,
dann würde es sehr still auf der Welt sein.
2011-07-17T09:42:35 seemannIch suche einen veränderbaren Perl Script
für ein Gästebuch oder vergleichbares,
welches ich mir als Meldeliste umfunktionieren möchte.
Zusätzlich zum Namen, Wohnort, Webseite und Mailadresse,
möchte ich noch Dienstzeit, Dienstgrad und Dienststellung einbringen.
Der Bereich Eintrag wird so nicht benötigt, allenfalls als Bemerkung.
Quoteund unquote Das Lesen gestaltet sich nun wie folgt:quote
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
#!/usr/bin/perl use strict; use warnings; use PersonenDB; # Für Tastausgaben use Data::Dumper; my $db = PersonenDB->new('test.dat'); #print Dumper($db); exit(); $db->add({ vorname => 'Test', nachname => 'Tester', address => 'TestStr 1', website => 'www.test.de/test2', email => 'mail@test.de', dienstzeit => 100, dienstgrad => '1', dienststellung => '1965.1.12', einheit => 'rable', nummer => 837, typ => 4, person => 'das ist nur ein test!', }) || print "ERROR:".$db->error()."\n"; $db->add({ vorname => 'Toto', nachname => 'Testerito', address => 'TestStr 22', website => 'www.test.de/test1', email => 'mail1@test.de', dienstzeit => 100, dienstgrad => '2', dienststellung => '1965.1.12', einheit => 'blub', nummer => 837, typ => 2, person => 'das ist nur ein test!', }) || print "ERROR:".$db->error()."\n"; $db->add({ vorname => 'Tranta', nachname => 'Tester', address => 'TestStr 1', website => 'www.test.de/test3', email => 'mail2@test.de', dienstzeit => 100, dienstgrad => '3', dienststellung => '1923', einheit => 'bla', nummer => 11234, typ => 1, person => 'das ist nur ein test!', }) || print "ERROR:".$db->error()."\n"; $db->add({ vorname => 'Karl', nachname => 'Boratis', address => "Rabenweg 19293\n12345 Braurig", website => 'www.test.de/test3', email => 'mail3@test.de', dienstzeit => 100, dienstgrad => '4', dienststellung => "2.11.1968", einheit => 'bla', nummer => 4, typ => 4, person => 'das ist nur ein test!', }) || print "ERROR:".$db->error()."\n"; $db->add({ vorname => 'Henry', nachname => 'Boratis', address => "Rabenweg 19293\n12345 Braurig", website => 'www.test.de/test4', email => 'xxx???&test.??', dienstzeit => 100, dienstgrad => '4', einheit => 'luba', nummer => 55, typ => 3, person => 'das ist nur ein test!', }) || print "ERROR:".$db->error()."\n"; print Dumper([$db->all()]);
1 2 3 4 5 6 7 8 9
if($dbo->insert( typ => $cgi->param('type') || 'NA', # kein Pflichtfeld name => $cgi->param('name'), # Pflichtfeld )){ # ok } else{ # Methode aufrufen, die den Fehlerspeicher ausgibt }
1 2 3 4
my %nutzer; for my $key ($db->key_names()) { $nutzer{$key}=$cgi->param($key); } $db->add(\%nutzer)
$db->error();