Schrift
[thread]7673[/thread]

Daten werden nicht in database gespeichert...



<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
Gast Gast
 2006-02-03 16:23
#62582 #62582
ich bitte um hilfe. habe versucht mein script so einfach wie möglich zu machen. als database dient eine database.dat. es wird einfach kein wert in die database geschrieben. warum nur??? vielen dank p.s. die smilies bekomme ich jetzt nich weg...


Code: (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
#!/usr/bin/perl -w

use strict;
use warnings;
use CGI;
my $cgi = new CGI;
use CGI::Carp qw(fatalsToBrowser);

print $cgi->header;
print $cgi->start_html (
   -title   => "Test",
);

my $database   = "database.dat";

my $eingabefeld  = $cgi->param('eingabefeld');

my $operation = CGI::param('operation') || '';
my $eintragen = 'eintragen';

if ($operation  eq $eintragen) {
   eintragen();
   exit;
}

if (defined $cgi->param('new')) {
   sosenden();
   exit;
}

if (defined $cgi->param('sosenden')) {
   datenlesenschreiben();
}


anzeigen();


sub anzeigen {
   print CGI::a( { -href    => CGI::url() . '?' . "operation=$eintragen" }, 'Eintragen');
   print "<br>";
   open DATABASE, '<', $database or die "$database kann leider nicht geoeffnet werden, weil $!";
   while ( my $inLine = <DATABASE> ) {
       chomp $inLine;
       my ( $eingabefeld ) = split '\|', $inLine;
       print "$eingabefeld";
       $inLine ++;
   }
   close DATABASE;
   exit;
}

sub eintragen {
   print "<form action=# method=post>";
   print "<input type=text name=eingabefeld>";
   print "<input type=submit value=go name=new>";
}

sub sosenden {
   print "<form action=# method=post>";
   print "<input type=submit name=sosenden value=\"Ja, so senden\"><br>";
   print "$eingabefeld";
}

sub datenlesenschreiben {
   open DATABASE, '>', $database or die "$database kann leider nicht geoeffnet werden, weil $!";
   print DATABASE "$eingabefeld\n";
   close DATABASE;
}


edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1138995774-->
GwenDragon
 2006-02-03 18:27
#62583 #62583
User since
2005-01-17
14542 Artikel
Admin1
[Homepage]
user image
Bitten den Code in [ CODE ]-Tags.
http://board.perl-community.de/cgi-bin....=ibcode

Deine Formulare kannst du auch mit CGI definieren. SO wie du sie gemacht hast, sind sie nicht richtig.
action=# ist sinnlos!\n\n

<!--EDIT|GwenDragon|1138984446-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

GwenDragon
 2006-02-03 19:15
#62584 #62584
User since
2005-01-17
14542 Artikel
Admin1
[Homepage]
user image
Also ich musste mir erst einmal etwas Gedanken machen, was du vorhast.

Ich weiß nicht genau, was du alles in die Datenbank schreiben willst, aber so schreibt es.

Bitte schau dir bezüglich der Speicherung in Dateien Wiki:WieSperreIchEineDatei an.

Code: (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
#!/usr/bin/perl -w

$| = 1; # Pufferung de Ausgabe ausschalten

use strict;
use warnings;

use CGI qw( :all *form );
use CGI::Carp qw( fatalsToBrowser );

my $cgi = new CGI;

print $cgi->header(),
    $cgi->start_html ( -title   => "Test" );

my $database   = "database.dat";

my $eingabefeld  = $cgi->param('eingabefeld');

my $operation = $cgi->param('operation') || '';
my $eintragen = 'eintragen';

if ($operation  eq $eintragen) {
  eintragen();
  exit;
}

if (defined $cgi->param('new') ){
  sosenden();
  exit;
}

if (defined $cgi->param('sosenden') ) {
  datenlesenschreiben();
}

anzeigen();

print $cgi->end_html();


sub anzeigen {
  print $cgi->a( { -href    => $cgi->url() . '?' . "operation=$eintragen" }, 'Eintragen' );
  print $cgi->br();
 
  open DATABASE, '<', $database or die "$database kann leider nicht geoeffnet werden, weil $!";
  while ( my $inLine = <DATABASE> ) {
      chomp( $inLine );
      my ( $eingabefeld ) = split /\|/, $inLine;
      print "$eingabefeld";
      $inLine ++;
  }
  close DATABASE;
  exit;
}

sub eintragen {
  print $cgi->start_form( -action=>url() ),
    $cgi->textfield( -name=>'eingabefeld' ),
    $cgi->submit( -name=>'new', -value=>'go'),
    $cgi->end_form();
}

sub sosenden {
  print $cgi->start_form(  -action=>url() ),
    $cgi->submit( -name=>'sosenden', value=>'Ja, so senden'), $cgi->br(),
    $cgi->hidden( -name=> 'eingabefeld', -value=>$eingabefeld, -override=>1),
    "$eingabefeld",
    $cgi->end_form();
}

sub datenlesenschreiben {
  open DATABASE, '>>', $database or die "$database kann leider nicht geoeffnet werden, weil $!"; # Anhängen
  print DATABASE "$eingabefeld\n";
  close DATABASE;
}

1;
\n\n

<!--EDIT|GwenDragon|1138987312-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

gregor
 2006-02-03 20:05
#62585 #62585
User since
2006-02-03
24 Artikel
BenutzerIn
[default_avatar]
sehr vielen dank auch für den anderen tipp!!! funktioniert sehr super!!! gruß g.
GwenDragon
 2006-02-03 20:34
#62586 #62586
User since
2005-01-17
14542 Artikel
Admin1
[Homepage]
user image
Bitte sehr. :-)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

pq
 2006-02-03 21:43
#62587 #62587
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=gregor,03.02.2006, 19:05]sehr vielen dank auch für den anderen tipp!!! funktioniert sehr super!!! gruß g.[/quote]
und das nächste mal darfst du die code-tags auch alleine einbauen.
das kann man auch nachträglich machen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
gregor
 2006-02-04 11:38
#62588 #62588
User since
2006-02-03
24 Artikel
BenutzerIn
[default_avatar]
ja ;)
gregor
 2006-02-05 01:32
#62589 #62589
User since
2006-02-03
24 Artikel
BenutzerIn
[default_avatar]
ein kleines problem bleibt leider immer noch. ich verstehe nicht, warum nach dem "sosenden" und der anschließenden anzeige des neuen datensatzes bei einer aktualisierung des browsers ein neuer leerer datensatz angefügt wird. bei versendung sowohl mit post als auch get. firefox z.b. fragt, ob die post-daten erneut gesendet werden sollen, in dieser situation sollten sie eigentlich nicht verschickt werden, es soll nur der neue datensatz oben in der liste auftauchen und nicht geclont werden, nur was oder wo kann ich was tun, um das zu unterbinden?
renee
 2006-02-05 01:48
#62590 #62590
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Auf die Schnelle wuerde ich sagen:
Code: (dl )
1
2
3
4
5
6
7
sub datenlesenschreiben {
open DATABASE, '>>', $database or die "$database kann leider nicht geoeffnet werden, weil $!"; # Anhängen
if(defined $eingabefeld && $eingabefeld !~ /^\s*$/){
print DATABASE "$eingabefeld\n";
}
close DATABASE;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
gregor
 2006-02-05 11:59
#62591 #62591
User since
2006-02-03
24 Artikel
BenutzerIn
[default_avatar]
leider nein. es wird immer noch - ist das ganze prozedere einmal durchlaufen und dann wieder am anzeigen - beim aktualisieren einfach ein neuer leerer datensatz angefügt...
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2006-02-03 16:23.