Thread Problem mit CGI::Session (14 answers)
Opened by Yagyu at 2010-12-18 11:40

Yagyu
 2010-12-18 11:40
#143685 #143685
User since
2010-12-18
15 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich soll für ein projekt eine Ausleihe für Geräte basteln, das ganze soll ohne SQL laufen und über PERL realisiert werden. Mit html, css sowie c programmierung habe ich schon Erfahrung .. mit PERL bisher noch gar nicht.

Bisher war meine Überlegung folgende:
ich fange mit einer index html an, hier mit 3 links auf versch Perl Scripts.
Login, AdminLogin sowie registrieren.

Als Script wurde mir ebenfalls bereits zur verfügung gestellt, wie ich auf die DB zugreifen soll/kann.

more (20.5kb):

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
#!/usr/bin/perl


sub putDB
{
 my ($table, $name, $value) = (shift, shift, shift);

 unless (-e "$table.db") { open (TRG,">$table.db"); print TRG; close(TRG); }

 if (chkDB($table,$name)) { delDB($table,$name); }

 $name =~ s/#/&raute;/g;
 $value =~ s/#/&raute;/g;

 open (TRG,">>$table.db");
 print TRG "$name#$value\n";
 close TRG;

 return 1;
}


sub delDB
{
 my ($table, $name) = (shift, shift);

 unless (-e "$table.db") { die "There is no Table with the name '$table'. Died while calling 'delDB'."; return 0; }

 $name =~ s/#/&raute;/g;

 my %newtable;

 open (SRC,"<$table.db");
 while (<SRC>)
 {
  chomp;
  my ($n, $v) = split /#/ , $_ if ($_ ne "");
  unless ($n eq $name)
  {
   $newtable{$n} = $v;
  }
 }
 close(SRC);

 open (TRG,">$table.db");
 foreach my $n (keys %newtable)
 { print TRG "$n#$newtable{$n}\n"; }
 close TRG;

 return 1;
}


sub chkDB
{
 my ($table, $name) = (shift, shift);

 unless (-e "$table.db") { die "There is no Table with the name '$table'. Died while calling 'chkDB'."; return 0; }

 $name =~ s/#/&raute;/g;

 my $return = 0;

 open (SRC,"<$table.db");
 while (<SRC>)
 {
  my ($n, $v) = split /#/ , $_;
  if ($n eq $name)
  {
   $return = 1;
  }
 }
 close(SRC);

 return $return;
}


sub getDB
{
 my ($table, $name) = (shift, shift);

 unless (-e "$table.db") { die "There is no Table with the name '$table'. Died while calling 'getDB'."; return 0; }

 $name =~ s/#/&raute;/g;

 my $return = 0; # @return;

 open (SRC,"<$table.db");
 while (<SRC>)
 {
  my ($n, $v) = split /#/ , $_;
  if ($n eq $name)
  {
   $v =~ s/\&raute\;/#/g;
   $return = $v; # push(@return,$v);
  }
 }
 close(SRC);

 return $return; # @return;
}
1;


Momentan hänge ich an der registrierung, hier habe ich bereits ein Formular erstellt, die Inhalte dieses Formulars werden auf der nächsten Seite wieder in einer Tabelle ausgegeben, und wollte nun, wenn die Eingaben abgeschickt werden, diese als Session speichern um sie im nächsten Schritt zu überprüfen und bei richtiger Eingabe eine E-Mail zu verschicken um den Account zu aktivieren. (Wenn jmd ne bessere Idee als CGI::Session hat, bin für alles bereit :) )

Mein Code sieht bisher so aus:

registrieren.pl
more (11.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
use CGI;
require("db.pl");

$form = new CGI;


print $form->header();
print $form->start_html("Registration");
print $form->h1("Registration | Ausleihe MMSZ.org");



print $form->h4("Bitte geben Sie Ihre Daten ein");

print $form->startform(-action => 'bestaetigen.pl',
                       -method => 'POST'
                      );

print $form->table({-border=>0},
        $form->Tr({-align=>LEFT,-valign=>TOP},
               [
                     $form->td(['Vorname', $form->textfield(-name=>'Vorname', -size=>30, -maxlength=>30), "", ""]),
                     $form->td(['Nachname' , $form->textfield(-name=>'Nachname', -size=>30, -maxlength=>30), "", ""]),
                     $form->td(['E-Mail' , $form->textfield(-name=>'Email', -size=>30, -maxlength=>30), "", "@ ostfalia.de"] ), 
                                         $form->td(['Passwort' , $form->password_field(-name=>'Passwort', -size=>30, -maxlength=>30), "", ""]),
                     $form->td(['Telefon' , $form->textfield(-name=>'Phone', -size=>15, -maxlength=>15), ])
               ]
           
            )       
       );


print $form->p();

print $form->submit("Registrieren");
print " ";
print $form->reset("Löschen");


print $form->endform();
print $form->end_html();


bestaetigen.pl
more (11.8kb):
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
use CGI;
use CGI::Session;

$form = new CGI;
$session = new CGI::Session("driver:File", $form, { Directory=>"/tmp" } );

my $V_name = $form->param("Vorname");
my $N_name = $form->param("Nachname");
my $User = $form->param("Email");
my $Tel = $form->param("Phone");
my $Mail="$User\@ostfalia.de";
$session->param('User');
$session->param('V_name');
$session->param('N_name');
$session->param('Tel');
$session->param('Mail');

$session->save_param( $form );
$session->flush();

print $session->header();
print $form->header();
print $form->start_html("Ihre Eingaben");
print $form->startform(-action => 'pruefen.pl',
                       -method => 'POST'
                      );
print $form->h1("Ihre Eingaben");

print $form->table({-border=>1},
        $form->Tr({-align=>CENTER,-valign=>TOP},
               [
                     $form->th(['Vorname', 'Nachname','Benutzername','E-Mail', 'Telefon']),
                     $form->td(["$V_name" , "$N_name", "$User", "$Mail", "$Tel"])
               ]
           )
        );
print $form->p();

print $form->submit("Registrieren");
print $form->endform();
print $form->startform(-action => 'registrieren.pl',
                       -method => 'POST'
                      );
print $form->submit("Ändern");


print $form->endform();
print $form->end_html();


pruefen.pl
more (9.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
use CGI;
use CGI::Session;

$session = CGI::Session->load();
$session->load_param( $form );

print $session->header();

$form = new CGI;
$CGISESSID = $session->param('CGISESSID');

my $User = $session->param("User");
my $V_name = $session->param('V_Name');
my $N_name = $session->param('N_name');
my $Tel = $session->param('Tel');
my $Mail = $session->param('Mail');


print $form->header();
print $form->start_html("Ihre Eingaben");
print $form->startform(-action => 'pruefen.pl',
                       -method => 'POST'
                      );
print $form->h1("Ihre Eingaben");

print $form->table({-border=>1},
        $form->Tr({-align=>CENTER,-valign=>TOP},
               [
                     $form->th(['Vorname', 'Nachname','Benutzername','E-Mail', 'Telefon']),
                     $form->td(["$V_name" , "$N_name", "$User", "$Mail", "$Tel"])
               ]
           )
        );
print $form->p();

print $form->endform();
print $form->end_html();


Wenn ich eine Eingabe beim registrieren mache, und absende, steht diese auch richtig auf der nächsten Seite in der Tabelle, hier gibt es bisher keine Probleme, bei der Übergabe von der Tabelle in die Session übernimmt er mitlerweile aber gar keine Daten mehr - zu Beginn hatte ich auf jeder Seite die gleichen Variablennamen genommen, da standen in der session teilweise die richtigen Eingaben (bei email stand immer nur der Benutzername ohne das @ostfalia.de und beim benutzer stand imemr direkt $Benutzer) hatte bei der zuweisung zur session auch shcon param(-name ... , -value) ausprobiert, leider auch ohn Erfolg. ...

Bin für jeden Tipp oder Ratschlag dankbar.

Gruß
Yagyu

modedit Editiert von pq: more-tags aufgrund der menge hinzugefügt
Last edited: 2011-02-01 19:57:51 +0100 (CET)

View full thread Problem mit CGI::Session