Thread Textdatenbank - Erweiterung des Codes ..
(16 answers)
Opened by Yagyu at 2011-02-10 04:56
Hallo Gwen,
ich selbst habe gegen SQl gar nichts, auf meine nachfrage ob ich SQL auch für die umsetzung nutzen darf wurde mir folgendes gesagt: Quote ich füge mal die registration, lofgin und mydb.pm wieder an - muss allerdings gerade zugeben nach nur 2h schlaf und mehreren vergeblichen versuchen da nun iwie mal mehr als nu NAME#PW in der db zu sehe - weiß ich gerade selbst nicht mehr zu 100% was ich da nun gerade wieder in den letzten versuchen geändert hatte ... :( edit: ich fand das MLDBM modul sehr viel versprechend: hatte mich mit diesem auch knapp ne Woche rumgeschlagen, fand die möglichkeit von den mutli level hashes sehr schön zum weiter arbeiten, hier hatte ich allerdings das Problem, dass mein programm genau 1x funktionierte, danach kam nen fehler bei tie'n der datei, sobald ich die db umbenannt habe oder gelöscht ging es wieder genau 1x .. und alle beispielcodes zum thema MLDBM arbeiten am anfangn mit unlink -> was aber ja keinen sinn macht wenn ich die DB immer erst löschen muss .... hatte mich auch zum thema XML ein wenig schlau gemacht - aber wirklich in eines der Beispielprogs oder durch die cpan seite soweit durchgestiegen, dass ich damit dass lesen, schreiben, löschen und vergleichen hinbekomme, hatte ich bei keinem dass Gefühl und die grundlage von topag sieht ja wirklich sehr viel versprechend aus. :) mydb.pm Code (perl): (dl
)
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 package mydb; use strict; use warnings; use Digest::MD5 qw(md5_hex); sub new { my $class=shift; my $file=shift; return undef unless($file); my $self={}; $self->{file} =$file; $self->{table} ={}; $self->{update}=0; $self->{last} =0; bless($self,ref($class)||$class); $self->load; return $self; } sub DESTROY{ shift->save(); } sub load { my $self=shift; $self->{update}=1; return 0 unless(-f $self->{file}); if(open(my $fh, '<', $self->{file})) { while(<$fh>) { chomp; my ($name,$pass,$rechte=3,$mail=$name"\@ostfalia.de",$aktiv)=map{__unquote($_)}split(/#/,$_,5); next unless($name && $pass); $self->{table}->{$name}=$pass; } close($fh); $self->{update}=0; $self->{last}=-M $self->{file}; } } sub save { my $self=shift; if($self->{update} && %{$self->{table}}) { my $str=join("\n",map{__quote($_).'#'.__quote($self->{table}->{$_})}keys(%{$self->{table}})); $self->_update(); if(open(my $fh, '>', $self->{file})) { print $fh $str; close($fh); $self->{update}=0; return 1; } return 0 } return 1; } sub add { my $self=shift; my $name=shift; my $pass=shift; my $rechte=3; my $mail=$name"\@ostfalia.de"; $self->_update(); return 0 unless($name && $pass); return 0 if(exists($self->{table}->{$name})); $self->{table}->{$name}=md5_hex($pass),$rechte.$mail; # $self->{table}->{$name}=$rechte; # $self->{table}->{$name}=$mail; $self->{update}=1; return 1; } sub del { my $self=shift; my $name=shift; $self->_update(); return 0 unless($name && exists($self->{table}->{$name})); delete($self->{table}->{$name}); $self->{update}=1; return 1; } sub has{ return exists($_[0]->{table}->{$_[1]}); } sub set { my $self=shift; my $name=shift; my $pass=shift; my $rechte=3; my $mail=$name"\@ostfalia.de"; $self->_update(); return 0 unless($name && $pass); return 0 unless(exists($self->{table}->{$name})); $self->{table}->{$name}=md5_hex($pass),$rechte,$mail; # $self->{table}->{$name}=$rechte; # $self->{table}->{$name}=$mail; $self->{update}=1; return 1; } sub chk { my $self=shift; my $name=shift; my $pass=shift; $self->_update(); return 0 unless($name && $pass && exists($self->{table}->{$name}) && $self->{table}->{$name} eq md5_hex($pass)); return 1; } sub get { my $self=shift; my $name=shift; $self->_update(); return $self->{table}->{name} if($name && exists($self->{table}->{name})); return ''; } ######################################################################## sub _update { my $self=shift; return $self->load() if(-f $self->{file} && (!$self->{last} || -M $self->{file} != $self->{last})); return 1; } ######################################################################## sub __quote { my $str=shift; $str=~s/#/&raute;/g; #### # -> &raute; und &raute; -> # return $str; } sub __unquote { my $str=shift; $str=~s/\Q&raute;/#/g; return $str; } 1; registration.pl Code (perl): (dl
)
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 #!/usr/bin/perl #use strict; use warnings; use mydb; use CGI; use CGI::Session; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); my $db=mydb->new('user.db'); my $form = CGI->new(); my $session = CGI::Session->new("driver:File", $form, { Directory=>"/tmp" }) or die CGI::Session->errstr; my $sname=$ENV{SCRIPT_NAME}||'registration.pl'; print $session->header(); warningsToBrowser(1); my $aktion=$form->param('aktion') || 'init'; $form->delete('aktion'); if($aktion eq 'add') { my $name=$session->param('name'); my $pass=$session->param('pass'); my $rechte=$session->param('rechte'); if($name && $pass && $db->add($name,$pass,$rechte,$mail,$aktiv)) { $db->save(); print_add($sname,$form); } else { print_input($sname,$form,"Name / Passwort ist nicht gesetzt!") } } elsif($aktion eq 'check') { my $name=$form->param('name'); my $pass=$form->param('pass1'); if($pass ne $form->param('pass2')) { print_input($sname,$form,'Die Passwörter stimmen nicht überein!'); } elsif($db->has($name)) { print_input($sname,$form,'Der Name ist schon registriert!'); } else { $session->param('name',$name); $session->param('pass',$pass); $session->param('rechte',$rechte); print_check($sname,$form,$name); } } elsif($aktion eq 'init') { print_input($sname,$form); } else { print_input($sname,$form,'unerlaubte Aktion!'); } ######################################################################## sub print_add { my $sname=shift; my $form=shift; my $name=shift; print $form->start_html("Registrierung abgeschlossen!"), $form->h1("Registrierung abgeschlossen!"), $form->p("Ihre Eingaben wurden akzeptiert. Sie können sich unter dem namen $name anmelden."), $form->a({href=>"index.html"},"Startseite"), $form->end_html(); } sub print_check { my $sname=shift; my $form=shift; print $form->start_html("Ihre Eingaben"), $form->startform(-action => $sname, -method => 'POST' ), $form->hidden('aktion','add'), $form->h1("Ihre Eingaben"), $form->table({-border=>1}, $form->Tr({-align=>'CENTER' ,-valign=>'TOP'}, [ $form->td(["NAME:", $form->param('name')]), $form->td(["PASSWORT:", $form->param('pass1')]), ]), ), $form->br(), $form->submit("Registrierung abschließen"), $form->endform(), $form->startform(-action => $sname, -method => 'POST'), $form->hidden('aktion','init'), $form->submit("Ändern"), $form->endform(), $form->end_html(); } sub print_input { my $sname=shift; my $form=shift; my $message=shift; print $form->start_html("Registration"), $form->h1("Registration | Ausleihe MMSZ.org"), $form->h4("Bitte geben Sie Ihre Daten ein"), $form->startform(-action => $sname, -method => 'POST' ), $form->hidden('aktion','check'), $form->table({-border=>0}, $form->Tr({-align=>"LEFT", -valign=>"TOP"},[ $form->td(['Name' , $form->textfield( -name=>'name', -size=>30, -maxlength=>30, -value=>$form->param('name')), "", ""]), $form->td(['Passwort' , $form->password_field(-name=>'pass1', -size=>30, -maxlength=>30 ), "", ""]), $form->td(['Passwort wiederholen' , $form->password_field(-name=>'pass2', -size=>30, -maxlength=>30 ), "", ""]), ]), ), $form->br(), $form->submit("Registrieren"), " ", $form->reset("Löschen"); print $form->br(),$form->p("NACHRICHT:$message") if($message); print $form->endform(), $form->end_html(); } login.pl Code (perl): (dl
)
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 #!/usr/bin/perl #use strict; use warnings; use mydb; use CGI; use CGI::Session; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); my $db=mydb->new('user.db'); my $form = CGI->new(); my $session = CGI::Session->new("driver:File", $form, { Directory=>"/tmp" }) or die CGI::Session->errstr; my $sname=$ENV{SCRIPT_NAME}||'login.pl'; print $session->header(); warningsToBrowser(1); my $login=$session->param("loggedin"); my $name=$form->param('name'); my $pass=$form->param('pass'); my $rechte=$session->param('rechte'); if($form->param('logout')) { $session->delete('loggedin','name','pass','rechte'); print_login($sname,$form); } elsif($login) { my $name=$session->param('name'); my $rechte=$session->param('rechte'); if ($rechte == 1) { print_backend($user,$form); } elsif ($rechte == 2) { # print_frontend($user,$form); $form->start_html("LOGIN"), $form->p("Nicht aktiviert"), $form->a({href=>"$sname?logout=1"},"LOGOUT"), } elsif ($rechte == 3) { print_aktivierung($user,$form); } else { print $form->start_html("LOGIN"), $form->p("Da lief was falsch"), $form->a({href=>"$sname?logout=1"},"LOGOUT"), } } elsif($db->chk($name, $pass)) { $session->param("loggedin",1); $session->param('name',$name); $session->param('rechte',$rechte); $form->end_html(); } else { print_login($sname,$form); } ######################################################################## sub print_login { my $sname=shift; my $form=shift; print $form->start_html("LOGIN"), $form->h1("Login | Ausleihe MMSZ.org"), $form->h4("LOGIN"), $form->startform(-action => $sname, -method => 'POST' ), $form->table({-border=>0}, $form->Tr({-align=>"LEFT", -valign=>"TOP"},[ $form->td(['Name' , $form->textfield( -name=>'name', -size=>30, -maxlength=>30, -value=>$form->param('name'))]), $form->td(['Passwort' , $form->password_field(-name=>'pass', -size=>30, -maxlength=>30 )]), ]), ), $form->br(), $form->submit("Login"), " ", $form->reset("Löschen"), $form->a({href=>"index.html"},"Startseite"), $form->endform(), $form->end_html(); } sub print_ok { my $sname=shift; my $form=shift; my $name=shift; print $form->start_html("LOGIN OK!"), $form->h1("Login erfolgreich!"), $form->p("Willkommen $name"), $form->h4( $form->a({href=>"frontend.pl"},"Ausleihe"), $form->a({href=>"$sname?logout=1"},"LOGOUT"), ), $form->end_html(); } Last edited: 2011-02-10 09:52:05 +0100 (CET) |