WEB, с чего начать ?

Здравствуйте.
Я только недавно взялся изучать Perl и вообще все что связано с web. Столкнулся с тем что приходится создавать web оболочки для своих скриптов т.е. есть прога которая работает и в базу пишет, а мне надо CGI скрипт с которым будет работать пользователь (заполнять формы, писать или читать/выводить данные из базы в WEB).
Имеено интересует статейка в которой хорошо и (пошагово) с примерами рассказывается примерно следующее: как из формы в скрипте index.cgi считали данные в хеш

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
$title = qq(Post your message :);
$form = qq(
:  
         );
print $title,$form;
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $buffer=$ENV{'QUERY_STRING'};
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST'){
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
my @pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $value =~ s///g;
    $input{$name} = $value;
}
require ("./db.pl");

предпологается что в db.pl будет обработка хеша с данными..
вот похожей статьи я и не нашел (есть только как создать гостевую книгу с базой в text.dat =)))
кто что подскажет.

Вот что у меня получилось

Делаю локальный bash.org)) Что-то вроде, гостевой книги. пишу без тега код, потому что он режет html

Quote:

!/usr/bin/perl

use CGI::Carp qw(fatalsToBrowser); use DBI;

/////////////////////////

my $dbuser = ‘user’; my $dbpass = ‘pass’; my $dbbase = ‘bash’; my $dbhost = ‘localhost’; my $db_port = ‘3306’;

my $db = DBI->connect(“DBI:mysql:database=$dbbase;host=$dbhost;port=$dbport”, $dbuser,$db_pass,{‘RaiseError’ => 1}); if (!defined($db)) { die (“Error =(: $@”); }

///////////////////////////////////////////////////////////////////////////////////////////

print “Content-type: text/html\n\n”;

$head = qq( bash.htk.lan );

$title = qq(

Post your message :

); $form = qq(
И„пїЅпїЅ:

);

if ($ENV{‘REQUESTMETHOD’} eq ‘GET’) { $buffer=$ENV{‘QUERYSTRING’}; } elsif ($ENV{‘REQUESTMETHOD’} eq ‘POST’){ read(STDIN, $buffer, $ENV{‘CONTENTLENGTH’}); } my @pairs = split(/&/, $buffer);

foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg; $value =~ s///g; $input{$name} = $value; # в хеше %input данные из формы }

тут показываем записи по убыванию.

my $showall = $db->prepare(“SELECT name,ip,text FROM table ORDER BY id DESC”); $showall->execute(); while (my @sql = $showall->fetchrowarray()) { print “

Name: $sql[0]IP: $sql[1]
$sql[2]

”; } $show_all->finish();

показываем шаблоны

print $head,$title,$form;
print “


”;

my $post = $db->prepare(“INSERT INTO table ( id , name , ip , text ) VALUES ( NULL , ?, ?, ?)”);

my $ip = ‘’; $post->execute($input{‘name’}, $ip, $input{‘text’}); $post->finish();

по идее ключи хеша надо удалить, потому что они сохраняются и если нажать F5 (обновить страницу) то данные опять

запишутся.

delete $input{‘name’}; delete $input{‘text’};

//////////////

END

Форма отображается, данные из таблицы выводятся правильно. база mysql, таблица bash представляет из себя:

CREATE TABLE `table` (
  `id` int(5) NOT NULL auto_increment,
  `name` varchar(20) character set utf8 NOT NULL,
  `ip` varchar(15) character set utf8 NOT NULL,
  `text` text character set utf8 NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=32 DEFAULT CHARSET=koi8r AUTO_INCREMENT=32 ;

Вопросы следующие:

1) При обращении к скрипту в вебе ошибка: DBD::mysql::st execute failed: Column ‘name’ cannot be null at /var/www/localhost/cgi-bin/index line 83. хотя $input{‘name’} не null ,что может быть ?

2) Если в базу вручную записать данные, то в WEB неправильно выводится русский язык, пробовал менять кодировку в базе - не помогло. Как быть с кодировкой ?

3) Если текст пишется в базу через форму, то он как-то странно пишется (игнорится русский текст и знаки “<” “>”, может еще что-то..

4) [b]ЖЕСТЬ) как HTML нормально вывести…[/b] =) [b]веселая двига, она еще и html выполняет со стилями))))[/b]

Вообще чувствую что все делаю неправильно, укажите на путь истинный! =)

use Source();

Вопрос не по

Вопрос не по теме - а почему бы не воспользоватсья для разбора запроса CGI.pm :)? Так будет немного проще да и читаться будет гораздо лучше.