Здравствуйте.
Я только недавно взялся изучать 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
!/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(
$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
tableORDER BYidDESC”); $showall->execute(); while (my @sql = $showall->fetchrowarray()) { print “”; } $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 представляет из себя:
Вопросы следующие:
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 :)? Так будет немного проще да и читаться будет гораздо лучше.