Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]268[/thread]

Guestbook Probleme, verlinken nach Programmablauf?



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Lensi
 2004-05-26 10:53
#2595 #2595
User since
2004-05-26
6 Artikel
BenutzerIn
[default_avatar]
Hallo allerseits,

mein Problem ist das mein Perl Guestbook Script auf meinem Apache Webserver nur richtig funktioniert wenn es allein steht. Sprich wenn ich mein Guestbook in meine Seite integriere und die ganze Seite laufen lasse geht es nur noch bedingt.

Problem 1: Nach einem erfolgreichen GB-Eintrag aktualisiert sich die GB-Seite nicht, ich kann den neuen Eintrag nicht abrufen.

Problem 2: Nach einem GB-Eintrag springt der Webserver wieder auf meine index Seite, diese wird normal in einem Frame, bestehend aus 3 Fenstern angezeigt. Der Webserver aber versucht diese in den main frame, Bildmitte zu kopieren.

Nun meine Frage, wie kann ich meinem Perl script sagen das es nur die GB-Index Seite aufrufen soll nach Programm ablauf und nicht die Hauptindex?
renee
 2004-05-26 11:37
#2596 #2596
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal etwas Code... So auf die Entfernung lässt sich das schwer sagen...

zu 1.) Erzeugst Du vielleicht die Ausgabe, bevor Du den neuen Eintrag speicherst??
Speicherst Du in eine DB oder in eine Datei??
zu 2.) Irgendwo in Deinem Skript wirst Du vermutlich sagen, auf welche Seite er gehen soll...
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/
Lensi
 2004-05-26 12:00
#2597 #2597
User since
2004-05-26
6 Artikel
BenutzerIn
[default_avatar]
gespeichert wird in eine Datei, hier mal der Code:
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
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
#!c:/Perl/bin/perl
$danke_mail = 0;          
# Dankeschön an den Besucher
$danke_betreff = 'Vielen Dank für den Eintrag';
$meine_mail = 0;                # 0: nein;   1: ja

$mein_betreff = 'Neuer Eintrag im Gästebuch';
$meine_adresse = 'lord4lenz@hotmail.com';      
$mail_breite = 60;        
$trennzeichen = '<hr>';      
$neu = 1;                        
$gaestebuchreal = '../htdocs/pages/index.html';        # die Gästebuch-Datei
$gaestebuchvirtual = '../index.html';
$mailprog = '/usr/sbin/sendmail';
if($ENV{'REQUEST_METHOD'} eq 'GET')
 { $eingabe = $ENV{'QUERY_STRING'}; }
else
 { read(STDIN, $eingabe, $ENV{'CONTENT_LENGTH'}); }
@paare = split(/&/, $eingabe);
foreach $paar (@paare)
{
  ($schluessel, $wert) = split(/=/, $paar);
  $wert =~ tr/+/ /;
  $wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",    hex($1))/eg;
  $wert =~ s/<([^>]|\n)*>//g;
  $FORM{$schluessel} = $wert;
}
&name_fehlt unless ($FORM{'name'});
&kommentar_fehlt unless ($FORM{'kommentar'});
if ($meine_mail == 1)
 { &meine_mail; }
&lesen();
&suchen();
sub name_fehlt
{
 print "Content-Type: text/html\n\n";
 print "<html><body><center>\n";
 print "<h1>Name fehlt !</h1></center>\n";
 print "Ohne Ihren Namen ist ein Eintrag ";
 print "in das Gästebuch nicht möglich.<p>\n";
 print "Mit dem Zurück-Button Ihres Browsers kommen";
 print " Sie wieder zurück zur vorherigen Seite.\n";
 print "</body></html>";
 exit;
}
sub kommentar_fehlt
{
 print "Content-Type: text/html\n\n";
 print "<html><body><center>\n";
 print "<h1>Kommentar fehlt !</h1></center>\n";
 print "Ohne geschriebenen Kommentar ";
 print "ist ein Eintrag nicht möglich.<p>\n";
 print "Mit dem Zurück-Button Ihres Browsers kommen";
 print " Sie wieder zurück zur vorherigen Seite.\n";
 print "</body></html>";
 exit;
}
sub lesen
{
 open(DATEI,"<$gaestebuchreal") || die "Fehler";
 @gaestebuch = <DATEI>;
 close(DATEI);
}
sub suchen
{
 open(DATEI,">$gaestebuchreal") || die "Fehler";
 foreach (@gaestebuch)
 {
   if(/<!--beginn-->/)
   {
     &eintrag;
   }
   else
   {
     print DATEI $_;
   }
 }
 close (DATEI);
}
sub eintrag
{
 if ($neu == 1)
 {
   print DATEI "<!--beginn-->\n";
 }
 print DATEI "$FORM{'name'} ";
 if($FORM{'ort'})
 {
   print DATEI "$FORM{'ort'} ";
 }
 print DATEI "<blockquote><p>$FORM{'kommentar'}</p></blockquote>\n";
 
 if ($FORM{'email'})
 {
   print DATEI "\&lt;$FORM{'email'}\&gt;<br>\n";
 }
 else
 {
   print DATEI "<br>\n";
 }
 
 if ($FORM{'land'})
 {
   print DATEI "$FORM{'land'}";
 }
 if ($FORM{'ort'} || $FORM{'land'})
 {
   print DATEI "<br>\n";
 }
 print DATEI "$trennzeichen<br>\n";
 if ($neu == 0)
 {
   print DATEI "<!--beginn-->\n";
 }
}
print "Location: $gaestebuchvirtual\n\n";
sub meine_mail
{
 local $text = &umbruch($FORM{'kommentar'},60);
 open (MAIL, "|$mailprog $meine_adresse") || die "Fehler bei $mailprog!\n";
 print MAIL "To: $meine_adresse\n";
 print MAIL "Reply-to: $FORM{'email'}\n";
 print MAIL "From: $FORM{'email'}\n";
 print MAIL "Subject: $mein_betreff\n\n";
 print MAIL "$FORM{'name'}\n";
 print MAIL "$text\n";
 close (MAIL);
}
sub umbruch
{
 $_[0] =~ s/\n/ /g;
 my @zeilen = split(/ /,$_[0]);
 my $zaehler = 0;
 my $string = '';
 foreach(@zeilen)
 {
   $zaehler += length "$_";
   if ($zaehler < $_[1])
   {
     $string.= "$_ ";
   }
   else
   {
     $string .= "\n$_ ";
     $zaehler = length "$_";
   }
 }
 return $string;
}
if ($danke_mail == 1 && $FORM{'email'})
 { &danke_mail; }
sub danke_mail
{
 open (MAIL, "|$mailprog $FORM{'email'}") || die "Fehler bei $mailprog!\n";
 print MAIL "To: $FORM{'email'}\n";
 print MAIL "Reply-to: $FORM{'meine_adresse'}\n";
 print MAIL "From: $FORM{'meine_adresse'}\n";
 print MAIL "Subject: $danke_betreff\n\n";
 print MAIL "Vielen Dank für ihren Eintrag.\n";
 print MAIL "Bitte besuchen sie unsere Seiten ";
 print MAIL "doch bald wieder.";
 close (MAIL);
}


edit renee: [code]-Tags eingefügt\n\n

<!--EDIT|renee|1085563126-->
Lensi
 2004-05-26 12:05
#2598 #2598
User since
2004-05-26
6 Artikel
BenutzerIn
[default_avatar]
hier die dazugehörigen html Dateien

nummer 1:
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
<html>
<head>
<link href="../library/style1.css" rel="stylesheet" type="text/css">
</head>
<body>

<p class="seitentitel">Mein Gästebuch</p>
<p>&nbsp;</p>
<p class="absatztitel">Bitte eintragen, ich freue mich
über Lob und Kritik.</p>
<p>&nbsp;</p>
<form action="../cgi-bin/gaestebuch.pl" method="post">
<table>
<tr>
<td>Name</td>
<td><input type=text name="name" size=30></td>
</tr>
<tr>
<td>E-Mail</td>
<td><input type=text name="email" size=30></td>
</tr>
<tr>
<td>Ort</td>
<td><input type=text name="ort" size=30></td>
</tr>
<tr>
<td>Land</td>
<td><input type=text name="land" size=30></td>
</tr>
</table>
<p>Kommentar:</p>
<textarea class="normtitel" name="kommentar" rows=5 cols=45></textarea>
<p><input type=submit value="eintragen">
</form></p><hr><br>
</body>
</html>


nummer 2:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<head>
<link href="../library/style.css" rel="stylesheet" type="text/css">
</head>
<body>

<p class="seitentitel">Das Gästebuch</p>
<p>&nbsp;</p>

<form action="index.html">
<p>
<input type="button" name="Verweis" value="Ins Gästebuch eintragen"
onClick="self.location.href='gaestebuch.html'">
</p>
</form>
<p>
<!--beginn-->
</p>
</body>
</html>
\n\n

<!--EDIT|renee|1085563267-->
devil_86
 2004-05-26 12:59
#2599 #2599
User since
2004-05-25
12 Artikel
BenutzerIn
[default_avatar]
[quote=Lensi,26.05.2004, 10:00]open (MAIL, "|$mailprog $FORM{'email'}") || die "Fehler bei $mailprog!\n";
print MAIL "To: $FORM{'email'}\n";
 print MAIL "Reply-to: $FORM{'meine_adresse'}\n";
 print MAIL "From: $FORM{'meine_adresse'}\n";
 print MAIL "Subject: $danke_betreff\n\n";
 print MAIL "Vielen Dank für ihren Eintrag.\n";
 print MAIL "Bitte besuchen sie unsere Seiten ";
 print MAIL "doch bald wieder.";
 close (MAIL);[/quote]
hat nichts mit deiner frage zutun, aber ich denke die sicherheit deiner seite ist dir auch wichtig :). da du die email (userinput!) in der open funktion nochmal als sendmail parameter angehängt hast und das ungefiltert ist es möglich system kommandos mit der uid des webservers auf deinem server auszuführen. einfache lösung: sendmail brauch diesen parameter nicht, wohin die mail geschickt werden soll wird ja auch im mail header festgelegt, also weg damit. oder prüfe den syntax der email, aber dann richtig, hab schon einige mail filter gesehen die trotzdem noch ausgenutzt werden konnten.
Lensi
 2004-05-26 13:14
#2600 #2600
User since
2004-05-26
6 Artikel
BenutzerIn
[default_avatar]
danke für den Tipp :-)
renee
 2004-05-26 13:28
#2601 #2601
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
$gaestebuchvirtual = '../index.html'; 
print "Location: $gaestebuchvirtual\n\n";


Hier sagst Du, dass es auf die index-Seite gehen soll. Hier einfach $gaestebuchvirtual auf die GB-Index-Seite setzen...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
if($ENV{'REQUEST_METHOD'} eq 'GET')
{ $eingabe = $ENV{'QUERY_STRING'}; }
else
{ read(STDIN, $eingabe, $ENV{'CONTENT_LENGTH'}); }
@paare = split(/&/, $eingabe);
foreach $paar (@paare)
{
 ($schluessel, $wert) = split(/=/, $paar);
 $wert =~ tr/+/ /;
 $wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",    hex($1))/eg;
 $wert =~ s/<([^>]|\n)*>//g;
 $FORM{$schluessel} = $wert;
}


würde ich ersetzen durch:
Code: (dl )
1
2
3
use CGI;
my $cgi = CGI->new();
my %FORM = $cgi->Vars();


Code: (dl )
1
2
3
4
 if($FORM{'ort'})
{
  print DATEI "$FORM{'ort'} ";
}


würde ich so schreiben:
Code: (dl )
    print DATEI "$FORM{'ort'} " if($FORM{'ort'});

Dadurch wird der Code übersichtlicher...\n\n

<!--EDIT|renee|1085564377-->
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/
Lensi
 2004-05-26 14:28
#2602 #2602
User since
2004-05-26
6 Artikel
BenutzerIn
[default_avatar]
vielen Dank für die schnelle Hilfe, das verlinken auf die GB-index klappt nun. Frage mich nur warum ich nicht den kompletten Pfadnamen angeben kann. Dachte eigentlich ich müsste dem Webserver erklären das die GB-index im Pfad ../htdocs/pages/ liegt. Es reicht aber wenn ich nur ../Pages angebe. Hast du dafür auch eine Erklärung?
renee
 2004-05-26 16:19
#2603 #2603
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, das Location ist eine Pfadangabe für den Browser und nicht für den Webserver (also keine Filesystem-Pfadangabe). htdocs ist ein Verzeichnis, das quasi unterhalb Deiner Domain liegt (es gibt ja kein deine_domain.tld/htdocs). Deswegen kann der Browser nichts mit htdocs anfangen...
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/
Dubu
 2004-05-26 16:25
#2604 #2604
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Der Location-Header, den du schickst, ist nicht fuer den Server, sondern fuer den Browser. Darin steht also keine (lokale) Pfadangabe, sondern eine URI. Standardkonform ist es uebrigens nur, wenn du eine absolute URI angibst, also in der Art

Location: http://www.test.com/pfad/zum/ziel

Dass relative URIs bei den meisten Browsern funktionieren, heisst noch nicht, dass sie auch erlaubt sind. ;)
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-05-26 10:53.