johnh said:
Nikos, you seem like a nice guy, but you keep asking questions which
make us think you don't understand what's really going on.
I want to tell you what everyone else has told you: if you want to
display web pages with Perl, use a templating system, and
HTML::Template is recommended.
If I was working with you, I'd tell you this:
* get your HTML and CSS right first;
* don't produce your HTML via CGI.pm and Perl;
* produce them as an HTML file;
That's stage one. And, you know what? Get someone else to do it if you
want. They don't have to understand Perl at all. Just get a friend
who's good at HTML/CSS to do you a good-looking page.
* when that file is the way you want it, come back to the Perl
newsgroups;
* then we will transform your HTML file into an HTML::Template file;
* then we will write a Perl script to display the Template with the
information in it;
This is the whole point of a Templating system. The HTML and the CSS
are in one place, and the script is in another. Different people can
work on different parts.
Thank you John for persistant will to help, i appreciate that.
Yes i confess that i was confused about the HTML::Templating system.
What i wanted to tell you is that from the very moment i decided to use
Perl not only as a high-level language but as a way to design web pages
and especially mine i needed a way of not getting my hands dirty with
html. I really dont like html but in order to make a webpage this is
unavoidable since i have to produce it somehow.
Thats why i choosed to use Perl's cgi.pm module functions to produce
html output.
All went good but then i noticed that my webpage although it did not
contained any pure html code it was still filled with stuff like:
print table( {border=>1, -width=>'80%', -align=>'center',
-style=>'border: thick groove Orange',
-background=>'../data/images/swirl.jpg'},
Tr( {-align=>'center'},
td( {-width=>'25%'}, font( {-size=>4, -color=>'Cyan'},
$row->{onoma} ) ),
td( {-width=>'50%'}, font( {-size=>4,
-color=>'Orange'}, $row->{email} ) ),
td( {-width=>'25%'}, font( {-size=>4,
-color=>'AquaMarine'}, $row->{xronos} ) ) ),
so it was messy with formating directives.
I though of a moment why not seperate the Perl code from the actual html
code.
Problem is that to do that i must create a html file with the design of
the webpage and then another perl file that would fill values to it by
replacing 'tmlp_var names=value' with the appropriate vaules.
Thats good but i dont want to create an html file but since i have the
index.pl by running it on the browser i then get the html output.
I try to convert it but i couldn manage it but since you are willing to
help convert it ic an paste it to you.
Man iam scared enouph just by looking at it

here is is btw as cgi.pm produced it:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" lang="en-US"
xml:lang="en-US"><head><title>Ψυχωφελή Πνευματικά Κείμενα!</title>
<link rel="stylesheet" type="text/css" href="../style.css" />
</head><body><form method="post" action="index.pl"
enctype="application/x-www-form-urlencoded">
<p align="center"><font color="Lime" size="5">Λόγος Ψυχωφελής και
Θαυμάσιος => </font> <select name="select">
<option value="Ένα μήνυμα σε όλους τους άπιστους">Ένα μήνυμα σε όλους
τους άπιστους</option>
<option value="Αγιος Ιωάννης ο Δαμασκηνός -- ΠεÏί Παθών">Αγιος Ιωάννης ο
Δαμασκηνός -- ΠεÏί Παθών</option>
<option value="Αγιος Îείλος ο Ασκητής -- ΠεÏί ΑντιχÏίστου">Αγιος Îείλος
ο Ασκητής -- ΠεÏί ΑντιχÏίστου</option>
<option value="Ευφυολογήματα -- Κάποιοι Κάπου Κάποτε">Ευφυολογήματα --
Κάποιοι Κάπου Κάποτε</option>
<option value="ΕφÏαίμ Κατουνακιώτης -- ΠεÏί Ευχής">ΕφÏαίμ Κατουνακιώτης
-- ΠεÏί Ευχής</option>
<option value="Η ΘÏησκεία στο Δωδεκάθεο">Η ΘÏησκεία στο Δωδεκάθεο</option>
<option value="Η αλήθεια για τις ψυχÎÏ‚ των κεκοιμημÎνων">Η αλήθεια για
τις ψυχÎÏ‚ των κεκοιμημÎνων</option>
<option value="Θανάσιμα αμαÏτήματα">Θανάσιμα αμαÏτήματα</option>
<option value="Θεόκλητος Διονυσιάτης -- ΠεÏί Δαιμόνων">Θεόκλητος
Διονυσιάτης -- ΠεÏί Δαιμόνων</option>
<option value="Ιωσήφ Ησυχαστής -- ΠεÏί Ευχής Îο1">Ιωσήφ Ησυχαστής --
ΠεÏί Ευχής Îο1</option>
<option value="Ιωσήφ Ησυχαστής -- ΠεÏί Ευχής Îο2">Ιωσήφ Ησυχαστής --
ΠεÏί Ευχής Îο2</option>
<option value="ΛατÏευτικό ΕγχειÏίδιο -- ΠεÏί Ευχής">ΛατÏευτικό
ΕγχειÏίδιο -- ΠεÏί Ευχής</option>
<option value="ΛατÏευτικό ΕγχειÏίδιο -- ΠεÏί ΣκανδαλισμοÏ">ΛατÏευτικό
ΕγχειÏίδιο -- ΠεÏί ΣκανδαλισμοÏ</option>
<option value="ΜετεμψÏχωση">ΜετεμψÏχωση</option>
<option value="Οι πάπυÏοι της ÎεκÏάς Θάλασσας">Οι πάπυÏοι της ÎεκÏάς
Θάλασσας</option>
<option value="Πίστευε και μη εÏεÏνα">Πίστευε και μη εÏεÏνα</option>
<option value="ΠεÏιπÎτεις ενός Î Ïοσκυνητή -- ΠεÏί Î Ïοσευχής">ΠεÏιπÎτεις
ενός Î Ïοσκυνητή -- ΠεÏί Î Ïοσευχής</option>
<option value="Î Î¿Ï Ï€Î¬Î¼Îµ μετά θάνατο;">Î Î¿Ï Ï€Î¬Î¼Îµ μετά θάνατο;</option>
<option value="Î Ïόσεχε την ψυχή σου">Î Ïόσεχε την ψυχή σου</option>
<option value="ΣχÎση ΧÏÎ¹ÏƒÏ„Î¹Î±Î½Î¿Ï Î¼Îµ κοσμικότητα">ΣχÎση ΧÏÎ¹ÏƒÏ„Î¹Î±Î½Î¿Ï Î¼Îµ
κοσμικότητα</option>
</select> <input type="submit" name="ok" value="ok"
/></p><div></div></form><br /><html><head><title></title>
<script type='text/javascript'>
var textToShow = "Καλώς ήÏθες dell.lan! ΧαίÏομαι Ï€Î¿Î»Ï Ï€Î¿Ï… σε
ξαναβλÎπω!\nΤελευταία φοÏα ήÏθες εδώ ως dell.lan στις 18 Apr, 16:6
!!\nΑυτή είναι η 325 φοÏά που επισκÎφτεσαι την σελίδα μου και χαίÏομαι
Ï€Î¿Î»Ï Ï€Î¿Ï… την βÏίσκεις ενδιαφÎÏουσα !!!\nΤην τελευταία φοÏά διάβασες το
κείμενο [ ΛατÏευτικό ΕγχειÏίδιο -- ΠεÏί Î£ÎºÎ±Î½Î´Î±Î»Î¹ÏƒÎ¼Î¿Ï ]\nΠοιo λόγο θα
ήθελες να μελετήσεις αυτήν τη φοÏά ?!?";
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
<br /><br /><br /><form method="post" action="show.pl"
enctype="application/x-www-form-urlencoded">
<table class="user"><tr><td>Î ÏŽÏ‚ σε λÎνε αδελφÎ?</td> <td><input
type="text" name="onoma" /></td></tr> <tr><td>Ποιά είναι η γνώμη σου
για την ευχοÏλα
*ΚÏÏιε Î™Î·ÏƒÎ¿Ï Î§ÏιστΠΕλÎησον Με* ?</td> <td><textarea
name="euxoula" rows="4" cols="25"></textarea></td></tr> <tr><td>ΜοιÏάσου
μαζί μας μία κατά τη γνώμη σου
θαυμαστή Ï€Ïοσωπική πνευματική εμπειÏία από
κάποιον γÎÏοντα Ï€Ïος ώφελος των υπολοίπων
αδελφών (αν φυσικά Îχεις

</td> <td><textarea
name="sxolio" rows="6" cols="25"></textarea></td></tr> <tr><td>Ποιό
είναι το e-mail σου?</td> <td><input type="text" name="email"
/></td></tr> <tr><td><input type="submit" name="Εμφάνιση όλων των
απόψεων" value="Εμφάνιση όλων των απόψεων" /></td> <td><input
type="submit" name="Αποστολή" value="Αποστολή"
/></td></tr></table><div></div></form><br /><br /><table
class="quote"><tr><td># Μην αισθάνεσαι ποτΠτÏψεις για αυτά που Îχεις
σκεφτεί για την γυναίκα σου. Αυτή Îχει σκεφτεί Ï€Î¿Î»Ï Ï‡ÎµÎ¹ÏότεÏα για σÎνα.
(Jean Rostand)
</td></tr></table><br /><table class="info"><tr><td>dell.lan</td></tr>
<tr><td>21 Apr, 13:38</td></tr> <tr><td>1327</td></tr></table><br /><a
href="games.pl"><img src="../data/images/games.gif" /></a><p
align="right"><a href="show.pl?onoma=showlog"><font color="Lime"
size="2"><b>Last Update: 18/4/2005</b></font></a></p>
If you still want to help me please do and if you actually decide to,
please if you see something you dont like or can be written better make
changes at your wish.
After all its my personal webpage where you can see also see it runnign
at my host
http://www.nikolas.tk/
Here is also the index.pl that produced the above html output:
#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use CGI::Cookie;
use CGI qw

standard);
use DBI;
use DBD::mysql;
@months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
'Sep', 'Oct', 'Nov', 'Dec');
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;
$xronos = "$mday $months[$mon], $hour:$min";
$ip = $ENV{'REMOTE_ADDR'};
@numbers = split (/\./,$ip);
$address = pack ("C4", @numbers);
$host = gethostbyaddr ($address, 2) || $ip;
$host = "ÃÖÅÃÔÉÊÃ" if ( ($host eq "localhost") or ($host eq
"dslcustomer-221-228.vivodi.gr" or $host eq "dell") );
print header( -charset=>'iso-8859-7' );
print start_html( -style=>'../style.css', -title=>'Øõ÷ùöåëÞ ÃÃåõìáôéêÜ
ÊåßìåÃá!' );
$db = ($ENV{'SERVER_NAME'} ne 'nikolas.50free.net')
? DBI->connect('DBI:mysql:nikos_db', 'root', '')
: DBI->connect('DBI:mysql:nikos_db:50free.net', 'nikos_db', '********')
or print font({-size=>5, -color=>'Lime'}, $DBI::errstr) and exit 0;
#*******************************************************************************
@files = <../data/text/*.txt>;
@display_files = map( /([^\/]+)\.txt/, @files );
print start_form(-action=>'index.pl');
print p( {-align=>'center'}, font( {-size=>5, -color=>'Lime'},
'Ëüãïò Øõ÷ùöåëÞò êáé ÈáõìÜóéïò => ' ),
popup_menu( -name=>'select',
-values=>\@display_files ),
submit('ok'));
print end_form(), br();
$keimeno = param('select') or "Ãñ÷éêÞ Óåëßäá";
$st = $db->prepare( "SELECT host FROM logs" );
$st->execute();
while( $row = $st->fetchrow_hashref ) {
if( $host eq $row->{host} ) {
$hostmatch = 1;
}
}
if( param('select') and param('select') !~ /\.\./ )
{
open(FILE, "<../data/text/$keimeno.txt") or die $!;
@data = <FILE>;
close(FILE);
$data = join('', @data);
$db->do( "UPDATE logs SET keimeno='$keimeno' WHERE host='$host'" )
or die $db->errstr;
}
elsif( $hostmatch == 1 )
{
$db->do( "UPDATE logs SET visits = visits + 1 WHERE host='$host'" )
or die $db->errstr;
$st = $db->prepare( "SELECT * FROM logs WHERE host='$host'" );
$st->execute();
$row = $st->fetchrow_hashref;
$data = "Êáëþò Þñèåò " .$host. "! ×áßñïìáé ðïëý ðïõ óå îáÃáâëÃðù!\n" .
"Ôåëåõôáßá öïñá Þñèåò åäþ ùò " .$row->{host}. " óôéò "
..$row->{xronos}. " !!\n" .
"ÃõôÞ åßÃáé ç " .$row->{visits}. " öïñÜ ðïõ åðéóêÃöôåóáé ôçÃ
óåëßäá ìïõ êáé ÷áßñïìáé ðïëý ðïõ ôçà âñßóêåéò Ã¥ÃäéáöÃñïõóá !!!\n" .
"Ôçà ôåëåõôáßá öïñÜ äéÜâáóåò ôï êåßìåÃï [ "
..$row->{keimeno}. " ]\n" .
"Ãïéo ëüãï èá Þèåëåò Ãá ìåëåôÞóåéò áõôÞà ôç öïñÜ ?!?";
}
elsif( $hostmatch != 1 )
{
if ( $host ne "ÃÖÅÃÔÉÊÃ" )
{
$data = "Êáëþò üñéóåò " .$host. "!\n" .
"ÃõôÞ åéÃáé ç 1ç óïõ åðßóêåøç åäþ ðÃñá! Åëðßæù Ãá óïõ
áñÃóåé!\n" .
"ÃÃïßãïÃôáò ôï ðáñáðÜÃù drop-down menu åðÃëåîå ôï êåßìåÃï
ðïõ èá Þèåëåò Ãá äéáâÜóåéò...";
$db->do( "INSERT INTO logs VALUES (null, '$host', '$xronos',
'$text', 1)" ) or die $db->errstr;
}
else
{
$data = "Ôé ÷áìðÜñéá $host

ÈõìÞèçêåò Ãá ìå ðåñéðïéçèåßò êáé
åìÃÃá ëéãÜêé !?!";
}
}
$data =~ s/\n/\\n/g;
$data =~ s/"/\\"/g;
$data =~ tr/\cM//d;
#*******************************************************************************
print <<ENDOFILETML;
<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
ENDOFILETML
#*******************************************************************************
print br(), br(), br();
print start_form(-action=>'show.pl');
print table( {class=>'user'},
Tr( td( 'Ãþò óå ëÃÃÃ¥ áäåëöÃ?' ),
td( textfield( 'onoma' ))),
Tr( td( 'ÃïéÜ åßÃáé ç ãÃþìç óïõ ãéá ôçà åõ÷ïýëá
*Êýñéå Éçóïý ×ñéóôà ÅëÃçóïà Ìå* ?' ),
td( textarea( -name=>'euxoula', -rows=>4, -columns=>25 ))),
Tr( td( 'ÌïéñÜóïõ ìáæß ìáò ìßá êáôÜ ôç ãÃþìç óïõ
èáõìáóôÞ ðñïóùðéêÞ ðÃåõìáôéêÞ åìðåéñßá áðü
êÜðïéïà ãÃñïÃôá ðñïò þöåëïò ôùà õðïëïßðùÃ
áäåëöþà (áà öõóéêÜ Ã÷åéò

' ),
td( textarea( -name=>'sxolio', -rows=>6, -columns=>25 ))),
Tr( td( 'Ãïéü åßÃáé ôï e-mail óïõ?' ),
td( textfield( 'email' ))),
Tr( td( submit( 'ÅìöÜÃéóç üëùà ôùà áðüøåùÃ' )),
td( submit( 'ÃðïóôïëÞ' ))),
);
print end_form(), br(), br();
open(FILE, "<../data/text/tips") or die $!;
@tips = <FILE>;
close(FILE);
@tips = grep { !/^\s*\z/s } @tips;
$tip = $tips[int(rand(@tips))];
print table( {class=>'quote'},
Tr( td( $tip ))
);
$db->do( "UPDATE counter SET counter = counter + 1" ) if ($host ne
"ÃÖÅÃÔÉÊÃ");
$st = $db->prepare( "SELECT counter FROM counter" );
$st->execute();
$row = $st->fetchrow_hashref;
print br();
print table( {class=>'info'},
Tr( td( $host )),
Tr( td( $xronos )),
Tr( td( $row->{counter} ))
);
print br(), a( {href=>'games.pl'},
img{src=>'../data/images/games.gif'} );
print p( {-align=>'right'}, a( {href=>'show.pl?onoma=showlog'}, font(
{-size=>2, -color=>'Lime'}, b( 'Last Update: 18/4/2005' ))));
You can see that in my index.pl i dont any more have the long-lines
prints with width,height afont stuff since i created the style.css
here it is also btw:
/* style.css */
body {
background-image : url(../data/images/night.gif);
position : relative;
margin : 0px;
padding : 0px;
width : 100%;
}
table.user {
background-image : url(../data/images/swirl.jpg);
width : 55%;
color : lime;
text-align : center;
font : 18px times;
border : 5px ridge magenta;
border-collapse: : collapse;
}
table.quote {
background-image : url(../data/images/nebula.jpg);
width : 80%;
color : yellow;
text-align : center;
font : 18px comic;
border : 3px ridge lime;
border-collapse: : collapse;
}
table.info {
background-image : url(../data/images/nebula.jpg);
width : 25%;
color : cyan;
text-align : center;
font : 18px comic;
border : 3px ridge orange;
border-collapse: : collapse;
td {
border : 2px inset yellow;
}
td.tip {
font-style : bold;
color : white;
}
td.host {
font-style : bold;
color : yellow;
}
td.xronos {
font-style : bold;
color : lime;
}
td.counter {
font-style : bold;
color : white;
}
Its up to you now if you want to make the covertion.
ps. Sorry for the long copy/pastes but i dont know how to attach files
in usenet.