|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Pavel V. Ammosov 2:5020/52 07 May 2001 03:39:52 To : All Subject : Re: Оцените правильность, плиз... -------------------------------------------------------------------------------- >Hello All. > >Сабж, собственно. Также интересует, как оно будет работать при одновременном >обращении нескольких человек. > > >_*/===/*_ _Hу, типа, начало файла_ *mysql.cgi* _*/===/*_ >#!/Perl/5.6.0/bin/MSWin32-x86/perl.exe -w > >use CGI; >use CGI::Carp; >use DBI; >use strict; Hаконец-то в fido.ru.cgi.perl сырец с use strict; Ура, товарищи! :-) > >my $query = new CGI; >my $database = "test"; >my $db_server = "localhost"; >my $user = "Alex"; >my $password = ""; >my $newname = ""; >my $newemail = ""; >my $dbh; >my $sth; >my $rc; > >if ($query->param('action')) >{ > &set_variables; IMHO, лучше писать скобки в конце вызова функции, чем & в начале: set_variables(); > &db_connect; db_connect лучше вынести до начала блока if ($q->param....), он же у тебя всегда исполняется. > &add_data; > &print_page_start; > &print_add_form; > &print_data; > &print_page_end; > &db_cleanup; >} >else >{ > &db_connect; > &print_page_start; > &print_add_form; > &print_data; > &print_page_end; > &db_cleanup; >} > > >sub set_variables >{ > $newname = $query->param('name'); > $newemail = $query->param('email'); >} > >sub add_data >{ > if (($newname ne '') && ($newemail ne '')) > { > $sth = $dbh->prepare("insert into table1 values (\"$newname\", >\"$newemail\");") or die "Couldn't prepare the query: ", $sth->errstr, "\n"; чего-то у меня вызывает подозрение, что ты вообще пробовал это запускать и оно работало :), не говоря уже о том, что пускать юзерские данные прямо в sql -- это искать неприятностей на свою попу. Что будет, если юзер туда пропишет '); drop table table1? $sth = $dbh->prepare('insert into table1 values (?, ?)') or die ...; $sth->execute($newname, $newemail) or die ...; > $sth->execute or die "Couldn't execute select statement: ", $sth->errstr, >"\n"; > } >} > >sub db_connect >{ > $dbh = DBI->connect("DBI:mysql:$database:$db_server", $user, $password); если прописать {RaiseError=>1}, то можно будет не писать ``...or die'' в вызовах методов $dbh -- DBI сам выполнит die при ошибке. >} > >sub db_cleanup >{ > $rc = $sth->finish; > $rc = $dbh->disconnect; >} > >sub print_add_form >{ > print "<p><hr>\n"; Весь HTML лучше из скрипта вынести в шаблоны, так и скрипт и HTML удобнее редактировать будет. Посмотри на CPAN модули HTML::Template или Template::Toolkit. > print "<b>Добавление записи:</b><br>\n"; > print "<form action=\"mysql.cgi\">\n"; > print "<input type=\"hidden\" name=\"action\" value=\"new\">\n"; > print "Имя : <input type=\"text\" name=\"name\" value=\"\" >size=\"30\"><br>\n"; > print "E-Mail : <input type=\"text\" name=\"email\" value=\"\" >size=\"30\"><br>\n"; > print "<input type=\"submit\" value=\"Дюсртшть\">\n"; > print "</form>\n"; > print "</p><hr>\n"; >} > >sub print_data >{ > my @row = (); > my ($name, $email); > > $sth = $dbh->prepare("select * from table1;") or die "Couldn't prepare the >query: ", $sth->errstr, "\n"; select * from table -- это плохо. Что будет с твоим скриптом, если кто-нибудь потом добавит в table1 еще одну колонку? Да и вообще, таблица без primary key -- тоже плохо. Прочитай Грабера, "Введение в SQL", чтоб узнать как проектировать реляционные БД. > $sth->execute or die "Couldn't execute select statement: ", $sth->errstr, >"\n"; > > print "<center>\n<table border=1 cellpadding=4>\n"; > print "<tr>\n<th>Имя</th>\n<th>e-mail</th>\n</tr>\n"; > > while (@row = $sth->fetchrow_array) > { > ($name, $email) = @row; > print "<tr><td>$name</td><td>$email</td></tr>\n"; > } > > print "</table>\n</center>\n"; >} > >sub print_page_start >{ > print $query->header(-type=>'text/html',-charset=>'WINDOWS-1251'); > print "<html>\n<head>\n<title>MySQL</title>\n</head>\n"; > print "<body>\n<h1>MySQL</h1>\n"; >} > >sub print_page_end >{ > print "</body>\n</html>\n"; >} >_*/=====/*_ _Э-э... Конец файла_ *mysql.cgi* _*/=====/*_ > >Best regards, Alex. -- Pavel Ammosov O \ apavel@aha.ru __ ) http://isabase.philol.msu.ru/~apavel/ ) wget -O - isabase.philol.msu.ru/~apavel/key.asc|pgp -fka O / --- slrn/0.9.6.3 (Linux) * Origin: Zenon N.S.P. news server (2:5020/52.0) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/827188e4ab6a1.html, оценка из 5, голосов 10
|