Thread Textdatenbank - Erweiterung des Codes .. (16 answers)
Opened by Yagyu at 2011-02-10 04:56

Yagyu
 2011-02-10 09:30
#145542 #145542
User since
2010-12-18
15 Artikel
BenutzerIn
[default_avatar]
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
[..] wegen der einfacheren Migrirbarkeit und des deutlich simpleren Debuggings würde ich höchst ungern auf sql setzen.


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
more (35.6kb):
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
more (32.7kb):
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
more (25.1kb):
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)

View full thread Textdatenbank - Erweiterung des Codes ..