Perfecting index.pl some more!
- From: Nikos <hackeras@xxxxxxxxx>
- Date: Sat, 30 Apr 2005 08:31:40 +0300
Here is how my script has been transformed thanks to your precious precious suggestions and mine's minor alternation:
#!/usr/bin/perl use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); use CGI::Cookie; use DBD::mysql; use DBI; use POSIX qw(strftime);
print header( -charset=>'iso-8859-7' ); print start_html( -style=>'../data/css/style.css', -title=>'Øõ÷ùöåëÞ Ð +íåõìáôéêÜ Êåßìåíá!', -background=>'../data/images/night.gif' );
my ($sth, $row);
my $date = strftime( "%d %b, %H:%M", localtime );
my $host = $ENV{'REMOTE_HOST'};
$host = "Íßêïò" if ( ($host eq "dell") or ($host eq "localhost") or ($
+host ~= /vivodi.gr/) );my $dbh = ($ENV{'SERVER_NAME'} ne 'nikolas.50free.net')
? DBI->connect('DBI:mysql:nikos_db', 'root', 'c
+ensored')
: DBI->connect('DBI:mysql:nikos_db:50free.net', 'nikos_db', 'c
+ensored')
or {RaiseError=>1};#********************************************************************* +**********
my @files = <../data/text/*.txt>; my @display_files = map( /([^\/]+)\.txt/, @files );
print start_form(-action=>'index.pl');
print p( {-align=>'center'}, font( {-size=>5, -color=>'Lime'}, '
+ÄéÜëåîå Ýíá áðü ôá êåßìåíá ãéá íá äéáâÜóåéò => ' ),
popup_menu( -name=>'select', -value
+s=>\@display_files ),
submit('ÅðéëïãÞ'));
print end_form(), br();my %sql = (
get_counter => "SELECT counter FROM visitorlog",
get_host => "SELECT host FROM visitorlog WHERE host=?",
update_visitor => "UPDATE visitorlog SET counter+=1 WHERE host=?",
update_passage => "UPDATE visitorlog SET passage=? WHERE host=?",
insert_host => "INSERT INTO visitorlog (null, host, date, passa
+ge, counter) VALUES (?, ?, ?, ?, ?, ?)"
);my $passage = param('select') || "Áñ÷éêÞ Óåëßäá!";
my ($data, @data);
if (param('select') and param('select') != '..') { open(FILE, "<../data/text/$passage.txt") or die $!; @data = <FILE>; close(FILE);
$data = join('', @data); $sth = $dbh->prepare( $sql{update_passage} );
$sth->execute($passage, $host);
}
else
{
my $sth = $dbh->prepare( $sql{get_host} );
$sth->execute($host); if ($sth->rows)
{
$sth = $dbh->prepare( $sql{update_visitor} );
$sth->execute($host); $sth = $dbh->prepare( $sql{get_host} );
$sth->execute($host); $row = $sth->fetchrow_hashref;
$data = "Êáëþò Þëèåò " .$host. "! ×áßñïìáé ðïõ âñßóêåò ôçí óåë
+ßäá åíäéáöÝñïõóá!\n" .
"Ôåëåõôáßá öïñÜ Þñèåò åäþ ùò " .$row->{host}. " óôéò "
+ .$row->{date}. " !!\n" .
"ÓýíïëéêÝò Þñèåò åäþ " .$row->{counter}. " öïñÝò!!!\n"
+ .
"Ôåëåõôáßá åßäåò ôï êåßìåíï { " .$row->{passage}. " }\
+n" .
"Ðïéü êåßìåíï èá ìåëåôÞóåòé áõôÞí ôçí öïñÜ !?";
}
else
{
if ($host ne "Íßêïò")
{
$data = "ÃåéÜ óïõ " .$host. "!\n" .
"¸ñ÷åóáé ãéá 1ç öïñÜ åäþ !!\n" .
"Åëðßæù íá âñåßò ôá êåßìåíá åíäéáöÝñïíôá :-)"; $sth = $dbh->prepare( $sql{insert_host} );
$sth->execute(null, $host, $date, $passage, $counter);
}
else
{
$data = "ÃåéÜ óïõ Íéêüëá, ôé ÷áìðÜñéá?! ¼ëá äåîéÜ íá óïõ ð
+Üíå ðÜíôá! ;-)";
}
}
}$data =~ s/\n/\\n/g; $data =~ s/"/\\"/g; $data =~ tr/\cM//d;
#********************************************************************* +********** print <<ENDOFHTML; <html><head><title></title> <script type='text/javascript'>
var textToShow = "$data"; var tm; var pos = 0; var counter = 0;
function init()
{ tm = setInterval("type()", 45) }function type()
{
if (textToShow.length != pos)
{
d = document.getElementById("DivText");
c = textToShow.charAt(pos++); if (c.charCodeAt(0) != 10)
d.appendChild(document.createTextNode(c));
else
d.appendChild(document.createElement("br"));counter++;
if (counter >= 1800 && (c.charCodeAt(0) == 10 || c == "."))
{
d.appendChild(document.createElement("br"));
d.appendChild(document.createTextNode("Press any key..."));
counter = 0;
clearInterval(tm);
document.body.onkeypress = function () {
document.getElementById("DivText").innerHTML = ''; tm = setInterval("type()", 50);
document.body.onkeypress = null; };
}
}
else
clearInterval(tm);
}
</script><body onload=init()>
<center>
<div id="DivText" align="Left" style="
background-image: url(../data/images/kenzo.jpg);
border: Ridge Orange 5px;
width: 850px;
height: 500px;
color: LightSkyBlue;
font-family: Times;
font-size: 18px;">
</div
ENDOFHTML
#*********************************************************************
+**********print br(), br(), br();
print start_form(-action=>'show.pl');
print table( {class=>'user'},
Tr( td( 'Ðþò óå ëÝíå áäåëöå?'
+ ), td( textfield( 'name' ))),
Tr( td( 'ÐïéÜ åßíáé ç ãíþìç óïõ ãéá ôçí åõ÷ïýëá
»Êýñéå Éçóïý ×ñéóôÝ, ÅëÝçóïí Ìå« ?'
+ ), td( textarea( -name=>'pray', -rows=>4, -columns=>25 ))),
Tr( td( 'ÐåñéÝãñáøå ìáò ìéá ðñïóùðéêÞ óïõ
ðíåõìáôéêÞ åìðåéñßá áðü êÜðïéïí ãÝñïíôá ðñïò
þöåëïò ôùí õðïëïßðùí áäåëöþí ( áí öõóéêÜ Ý÷åéò :-)'
+ ), td( textarea( -name=>'remark', -rows=>6, -columns=>25 ))),
Tr( td( 'Ðïéü åßíáé ôï email óïõ?'
+ ), td( textfield( 'email' ))),
Tr( td( submit( 'ÅìöÜíéóç üëùí ôùí áðüøåùí'
+ )), td( submit( 'ÁðïóôïëÞ' ))),
);
print end_form(), br(), br();open(FILE, "<../data/text/tips") or die $!;
my @tips = <FILE>;
close(FILE);@tips = grep { !/^\s*\z/s } @tips;
my $tip = $tips[ int(rand(@tips)) ];print table( {class=>'tip'}, Tr( td( {class=>'tip'}, $tip ))), br();$sth = $dbh->prepare( $sql{update_counter} ) if ($host ne "Íßêïò");
$sth->execute;$sth = $dbh->prepare( $sql{get_counter} );
$sth->execute;#here i decided to add together all the times visitors visit
#my webpage so to get a total counter in order to avoid
#create a new mysql table called counters and store that
#value there. Or even to a flat file!
while ($row = $sth->fetchrow_hashref)
{
$counter += $row->{counter};
}print table( {class=>'info'},
Tr( td( {class=>'host'}, $host )),
Tr( td( {class=>'date'}, $date )),
Tr( td( {class=>'counter'}, $counter ))
);print br(), a( {href=>'games.pl'}, img{src=>'../data/
+images/games.gif'} );
print p( {-align=>'right'}, a( {href=>'show.pl?name=showlog'}, font(
+ {-size=>2, -color=>'Lime'}, b( 'Last Update: 30/4/2005' ))));
How i can i shorter it, perfect it some more by dividing into subs? What must be/not be in a sub? .
- Follow-Ups:
- Re: Perfecting index.pl some more!
- From: Tassilo v. Parseval
- Re: Perfecting index.pl some more!
- Prev by Date: FAQ 3.21 How can I compile my Perl program into byte code or C?
- Next by Date: Re: Finally a better script!
- Previous by thread: FAQ 3.21 How can I compile my Perl program into byte code or C?
- Next by thread: Re: Perfecting index.pl some more!
- Index(es):