Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Оцените правильность, плиз...   Alex Shevchuk   06 May 2001 18:16:58 
 Оцените правильность, плиз...   Dmitry Ochnev   06 May 2001 23:38:12 
 Оцените правильность, плиз...   Alex Shevchuk   12 May 2001 19:49:55 
 Оцените правильность, плиз...   Dmitry Ochnev   13 May 2001 12:30:06 
 Re: Оцените правильность, плиз...   Pavel V. Ammosov   07 May 2001 03:39:52 
 Re: Оцените правильность, плиз...   Yuri Khachaturian   07 May 2001 13:56:43 
 Оцените правильность, плиз...   Oleg N. Kotenko   09 May 2001 15:41:21 
 Re: Оцените правильность, плиз...   Ruslan Bondarev   07 May 2001 22:08:31 
 Оцените правильность, плиз...   Alex Shevchuk   12 May 2001 20:02:08 
 Re: Оцените правильность, плиз...   Artem Chuprina   13 May 2001 19:04:04 
 Оцените правильность, плиз...   Alex Shevchuk   15 May 2001 11:54:37 
 Re: Оцените правильность, плиз...   Pavel V. Ammosov   15 May 2001 00:35:38 
 Оцените правильность, плиз...   Alex Shevchuk   15 May 2001 11:49:45 
 Re: Оцените правильность, плиз...   Artem Chuprina   07 May 2001 12:18:36 
 Оцените правильность, плиз...   Alex Shevchuk   12 May 2001 20:21:47 
Архивное /ru.cgi.perl/827188e4ab6a1.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional