Linkdaten?
Joachim Wollmann
- cgi
HTML
<html>
<head>
<title>jj</title>
<meta name="author" content="xx">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<a href="cgi-bin/counter.pl?url=tttffdie.zip">Link</a>
</body>
</html>
CGI
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
open NEU, "counter.txt" or die "Kann counter.txt nicht oeffnen: $!";
$dataa = <NEU>;
$dataa= $dataa + 1;
close(NEU);
open DATEI, ">counter.txt" or die "Kann Datei counter.txt nicht oeffnen: $!";
print DATEI $dataa;
close(DATEI);
$url = ¶m('url');
@text=("<html>
<head>
<title>Kommentarseite</title>
<style>
<!--
#m{
position:absolute;
left:55px;
top:60px;
}
#m2{
position:absolute;
left:20px;
top:20px;
}
-->
</style>
</head>
<body>
<div id="m2"><img src="themamen.gif" width="441" height="470" border="0" alt=""></div>
<div id="m">
<form action="../cgi-bin/beitrag.pl" method=post>
<font color=#0060FF>
<img src="../line.gif" width="380" height="3" border="0" alt=""><br>
Username <input name="",$url,"" size=15 maxlength=15>
<br>
<img src="../line.gif" width="380" height="3" border="0" alt=""><br>
Passwort <input name="Username" size=15 maxlength=15>
<br>
<img src="../line.gif" width="380" height="3" border="0" alt=""><br>
Thema <input name="Thema" size=30 maxlength=40>
<br>
<img src="../line.gif" width="380" height="3" border="0" alt=""><br>
Beitrag<br>
<textarea name="Beitrag" rows=8 cols=40 wrap=virtual></textarea>
<p></p>
<table border="0" cellpadding="0" cellspacing="8" bgcolor="#FFFFFF" width=400
height="10">
<tr><td><img src="smiley.gif" width="18" height="18" border="0" alt=""></td>
<td><font color=#0060FF>S1</font></td>
<td><img src="smiley2.gif" width="19" height="19" border="0" alt=""></td>
<td><font color=#0060FF>S2</font></td><td rowspan=5><font color=#0060FF>Um Ihren Beitrag ein bisschen auzulockern haben wir für Sie Smiley-Codes bereitgestellt. Einfach Code(z.B.: S1) einfügen und Sie
können dann in Ihrem Beitrag einen Smiley an Stelle des Codes vorfinden.</font></td></tr>
<tr><td><img src="smiley3.gif" width="21" height="19" border="0" alt=""></td>
<td><font color=#0060FF>S3</font></td>
<td><img src="smiley4.gif" width="19" height="19" border="0" alt=""></td>
<td><font color=#0060FF>S4</font></td></tr>
<tr><td><img src="smiley5.gif" width="19" height="19" border="0" alt=""></td>
<td><font color=#0060FF>S5</font></td>
<td><img src="smiley6.gif" width="19" height="19" border="0" alt=""></td>
<td><font color=#0060FF>S6</font></td></tr>
</table>
<img src="../line.gif" width="380" height="3" border="0" alt="">
<br>
<input type=submit value="Absenden"><br>
</font>
</form>
</div>
</body>
</html>");
open DATEI, ">../forum/ein2.htm" or die "Kann Datei counter.txt nicht oeffnen: $!";
print DATEI @text;
close(DATEI);
print @text;
Hallo
Das obrige Script funktioniert nicht so ganz!! Wie kann man Linkdaten (..?url=tttffdie.zip) einlesen und
damit ganz normal weiterarbeiten??
DANKE
Hallo Joachim!
<a href="cgi-bin/counter.pl?url=tttffdie.zip">Link</a>
Das ist richtig.
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
Das kannst Du Dir sparen, benutze einfach:
use CGI qw(:standard);
dann geht auch diese Zeile:
$url = ¶m('url');
Hier willst Du eigentlich einen Skalar beschreiben "$text", @text ist aber eine Liste.
ausserdem geht sowas nicht über mehere Zeilen.
@text=("<html>
Das geht so:
$text=<<end_text;
<html>
<head>
<title>Kommentarseite</title>
<style>
<!--
#m{
position:absolute;
.
.
.
.
</div>
</body>
</html>");
end_text
print @text;
Und hier dann:
print $text;
Gruß Frank
P.S. beachte die "kompische" Schreibweise der Marke end_text, mal mit ";", am Ende des Blocks ohne!
Hi FrankS,
Hier willst Du eigentlich einen Skalar beschreiben "$text", @text ist aber eine Liste.
ausserdem geht sowas nicht über mehere Zeilen.
Es geht schon (hab`s mal aus Spaß mit print versucht, und jetzt auf eine Variablenzuweisung angewendet):
$text = "Das ist nur ein Test
wie Perl mit zu mehrzeiligen
strings umzugehen pflegt\n";
print $text;
Auch die Zuweisung an die Liste sollte eigentlich funktionieren. @text enthält dann eben nur ein Element.
@text=("<html>
Das geht so:
$text=<<end_text;
<html>
[...]
</html>");
end_textprint @text;
Und hier dann:
print $text;
Gruß AlexBausW (der Dir hoffentlich nicht auf den Schlips getreten hat ;-)
Hi AlexBausW!
Man lernt immer wieder was dazu!
Gruß Frank (der sich nicht auf den Schlips getreten fühlt ;-)
P.S. aber "sauberer" ist meine Lösung doch, oder? Andererseits: Hauptsache es funktioniert: "Ein gutes Perlscript ist ein funktionierendes Perscript" (so oder so ähnlich habe ichs neulich in irgend einem Perl-Buch gelesen).
Hallo Joachim
[...]
<a href="cgi-bin/counter.pl?url=tttffdie.zip">Link</a>
[...]
CGI
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
-> In $buffer steht dann der im Link übergebene String
} else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
Wenn Du nur _einen_ Parameter _ausschließlich_ in einem Link übergeben willst, kanns Du auf die Hälfte des Klumbatschs verzichten ;-)
$buffer = $ENV{'QUERY_STRING'};
open NEU, "counter.txt" or die "Kann counter.txt nicht oeffnen: $!";
$dataa = <NEU>;
$dataa= $dataa + 1;
close(NEU);
open DATEI, ">counter.txt" or die "Kann Datei counter.txt nicht oeffnen: $!";
print DATEI $dataa;
close(DATEI);
Hier willst Du ja anscheinend zählen, wie oft der obige Link angeKLICK!(tm) (SCNR;-) wurde.
Das solltest Du ein wenig optimieren, damit nicht zwei schreibende Zugriffe zur selben Zeit erfolgen.
open (COUNT, "+<counter.txt") or die "Kann counter.txt nicht oeffnen: $!";
flock(COUNT,2); # Datei mit flock sperren (exclusiv) / zweiter Zugriff wartet, bis Datei wieder geschlossen wurde
$dataa = <NEU>; # erste Zeile einlesen
$dataa++ # Zahl um eins erhöhen
seek (COUNT,0,0); # gehe an Anfang der Datei
truncate(COUNT,0); # und schneide den Rest ab (= löschen)
print COUNT $dataa; # schreibe Zähler in counter.txt
close (COUNT) or die "Kann counter.txt nicht schliessen: $!";
$url = ¶m('url');
Da der Parameter ja in $buffer steht, musst Du anders rankommen:
@text=("<html>
[...]
<td><img src="smiley2.gif" width="19" height="19" border="0" alt=""></td>
[...]
</html>");
Neben den Hinweisen von Frank, noch einen hierzu:
Wenn Du $text = ' <html>.....</html>'; also einfache Anführungszeichen verwendest, kannst Du Dir das quoten der Anführungszeichen im String sparen.
Da Du ja scheinbar keine Variablen im String ersetzen musst, kannst Du ' ' verwenden, was die möglichen Fehler reduziert (was hab` ich schon durch fehlendes \ vor " Fehler produziert ;-)
hth
Gruß AlexBausW