⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch10_04.htm

📁 用perl编写CGI的好书。本书从解释CGI和底层HTTP协议如何工作开始
💻 HTM
📖 第 1 页 / 共 3 页
字号:
  my $dbh = shift;  my @value_array = (  );  my @missing_fields = (  );  my $field;  foreach $field (@FIELD_NAMES){    my $value = $cgi-&gt;param($field);    if ($value) {      push(@value_array, "'" . $value . "'");    } else {      push(@missing_fields, $field);    }  }  my $value_list = "(" . join(",", @value_array) . ")";  $value_list =~ /(.*)/;  $value_list = $1;  my $field_list = "(" . join(",", @FIELD_NAMES) . ")";  if (@missing_fields &gt; 0) {    my $error_message =       qq`&lt;STRONG&gt; Some Fields (` . join(",", @missing_fields) .      qq`) Were Not            Entered!            Address Not Inserted.         &lt;/STRONG&gt;`;    displayErrorMessage($cgi, $error_message);  } else {    my $sql = qq`INSERT INTO $TABLE $field_list VALUES $value_list`;    my $sth = $dbh-&gt;prepare($sql)            or die "Cannot prepare: " . $dbh-&gt;errstr(  );    $sth-&gt;execute(  ) or die "Cannot execute: " . $sth-&gt;errstr(  );    $sth-&gt;finish(  );        displayMaintenanceChoices($cgi,"Add Was Successful!");      }} # end of doAddsub doDelete {  my $cgi = shift;  my $dbh = shift;  my $delete_criteria = $cgi-&gt;param("delete_criteria");  if (!$delete_criteria) {    my $error_message =       "&lt;STRONG&gt;You didn't select a record to delete!&lt;/STRONG&gt;";    displayErrorMessage($cgi, $error_message);  } else {    my %criteria = (  );    my @field_values = split(/\|/, $delete_criteria);      for (1..@FIELD_NAMES) {      $criteria{$FIELD_NAMES[$_ - 1]} =         $field_values[$_ - 1];    }    # build up where clause    my $where_clause;    $where_clause = join(" and ",                     map ($_                          . " = \""                          . $criteria{$_} . "\"", (keys %criteria)));    $where_clause =~ /(.*)/;    $where_clause = $1;    my $sql = qq`DELETE FROM $TABLE WHERE $where_clause`;    my $sth = $dbh-&gt;prepare($sql)            or die "Cannot prepare: " . $dbh-&gt;errstr(  );    $sth-&gt;execute(  ) or die "Cannot execute: " . $sth-&gt;errstr(  );    $sth-&gt;finish(  );        displayMaintenanceChoices($cgi,"Delete Was Successful!");      }} # end of doDeletesub doUpdate {  my $cgi = shift;  my $dbh = shift;  my $update_criteria = $cgi-&gt;param("update_criteria");  if (!$update_criteria) {    my $error_message =       "&lt;STRONG&gt;You didn't select a record to update!&lt;/STRONG&gt;";    displayErrorMessage($cgi, $error_message);  } else {    # build up set logic    my $set_logic = "";    my %set_fields = (  );    my $field;    foreach $field (@FIELD_NAMES) {      my $value = $cgi-&gt;param($field);      if ($value) {        $set_fields{$field} = $value;      }    }    $set_logic = join(", ",                  map ($_ . " = \"" . $set_fields{$_} . "\"",                 (keys %set_fields)));    $set_logic = " SET $set_logic" if ($set_logic);    $set_logic =~ /(.*)/;    $set_logic = $1;    my %criteria = (  );    my @field_values = split(/\|/, $update_criteria);      for (1..@FIELD_NAMES) {      $criteria{$FIELD_NAMES[$_ - 1]} =         $field_values[$_ - 1];    }    # build up where clause    my $where_clause;    $where_clause = join(" and ",                     map ($_                          . " = \""                          . $criteria{$_} . "\"", (keys %criteria)));    $where_clause =~ /(.*)/;    $where_clause = $1;    my $sql = qq`UPDATE $TABLE $set_logic` .                  qq` WHERE $where_clause`;    my $sth = $dbh-&gt;prepare($sql)            or die "Cannot prepare: " . $dbh-&gt;errstr(  );    $sth-&gt;execute(  ) or die "Cannot execute: " . $sth-&gt;errstr(  );    $sth-&gt;finish(  );        displayMaintenanceChoices($cgi,"Update Was Successful!");      }} # end of doUpdatesub displayEnterNewAddressScreen {  my $cgi = shift;  displayNewDeleteUpdateScreen($cgi, "ADD");} # end of displayEnterNewAddressScreensub displayUpdateQueryScreen {  my $cgi = shift;   displayNewDeleteUpdateScreen($cgi, "UPDATE");} # end of displayUpdateQueryScreensub displayDeleteQueryScreen {  my $cgi = shift;  displayNewDeleteUpdateScreen($cgi, "DELETE");} # end of displayDeleteQueryScreensub displayNewDeleteUpdateScreen {  my $cgi       = shift;  my $operation = shift;  my $address_op = "Enter New Address";  $address_op = "Enter Search Criteria For Deletion" if ($operation eq "DELETE");  $address_op = "Enter Search Criterio For Updates" if ($operation eq "UPDATE");  print $cgi-&gt;header(  );# Prints out the headerprint qq`&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Address Book Maintenance&lt;/TITLE&gt;&lt;/HEAD&gt; &lt;BODY BGCOLOR="FFFFFF"&gt; &lt;H1&gt;$address_op&lt;/H1&gt;&lt;HR&gt;&lt;P&gt;&lt;FORM METHOD=POST&gt;`;if ($operation eq "ADD") {  print "Enter The New Information In The Form Below\n";} elsif ($operation eq "UPDATE") {  print "Enter Criteria To Query On In The Form Below.&lt;P&gt;\nYou will then be   able to choose entries to modify from the resulting list.\n";} else {  print "Enter Criteria To Query On In The Form Below.&lt;P&gt;\nYou will then be   able to choose entries to delete from the resulting list.\n"}my $address_table = getAddressTableHTML(  );print qq`&lt;HR&gt;&lt;P&gt;$address_table`;if ($operation eq "ADD") {      print qq`      &lt;P&gt;      &lt;INPUT TYPE="submit" NAME="submit_add"       VALUE="Add This New Address"&gt;&lt;P&gt;      `; } elsif ($operation eq "UPDATE") {      print qq`      &lt;INPUT TYPE="checkbox" NAME="exactsearch"&gt;      &lt;STRONG&gt;Perform Exact Search&lt;/STRONG&gt;      &lt;P&gt;      &lt;INPUT TYPE="submit" NAME="submit_query_for_update"      VALUE="Query For Modification"&gt;      &lt;P&gt;      `;} else {      print qq`      &lt;INPUT TYPE="checkbox" NAME="exactsearch"&gt;      &lt;STRONG&gt;Perform Exact Search&lt;/STRONG&gt;      &lt;P&gt;      &lt;INPUT TYPE="submit" NAME="submit_query_for_delete"      VALUE="Query For List To Delete"&gt;      &lt;P&gt;      `;}# print the HTML footer.print qq`&lt;INPUT TYPE="reset" VALUE="Clear Form"&gt;&lt;/FORM&gt;&lt;/BODY&gt;&lt;/HTML&gt; `;} # end of displayNewUpdateDeleteScreensub displayErrorMessage {  my $cgi = shift;  my $error_message = shift;  print $cgi-&gt;header(  );  print qq`&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Error Message&lt;/TITLE&gt;&lt;/HEAD&gt;&lt;BODY BGCOLOR="WHITE"&gt;&lt;H1&gt;Error Occurred&lt;/H1&gt;&lt;HR&gt;$error_message&lt;HR&gt;&lt;/BODY&gt;&lt;/HTML&gt;`;} # end of displayErrorMessagesub getAddressTableHTML {return qq`&lt;TABLE&gt;&lt;TR&gt;  &lt;TD ALIGN="RIGHT"&gt;First Name:&lt;/TD&gt;  &lt;TD&gt;&lt;INPUT TYPE="text" NAME="fname"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;  &lt;TD ALIGN="RIGHT"&gt;Last Name:&lt;/TD&gt;  &lt;TD&gt;&lt;INPUT TYPE="text" NAME="lname"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;  &lt;TD ALIGN="RIGHT"&gt;Phone:&lt;/TD&gt;  &lt;TD&gt;&lt;INPUT TYPE="text" NAME="phone"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;  &lt;TD ALIGN="RIGHT"&gt;Department:&lt;/TD&gt;  &lt;TD&gt;&lt;INPUT TYPE="text" NAME="dept"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;  &lt;TD ALIGN="RIGHT"&gt;Location:&lt;/TD&gt;  &lt;TD&gt;&lt;INPUT TYPE="text" NAME="location"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;`;} # end of <a name="INDEX-2174" />get<a name="INDEX-2,175" /><a name="INDEX-2,176" />Address<a name="INDEX-2,177" /><a name="INDEX-2,178" />TableHTML</pre></blockquote><p>You probably noticed that the style of this CGI script is differentfrom other examples in this book. We have already seen scripts thatuse CGI.pm, Embperl, and HTML::Template. This script uses quotedHTML; you can compare it against other examples to help you choosethe style that you prefer.</p><p>Likewise, this CGI script is one long file. The advantage is that allof the logic is present within this file. The disadvantage is that itcan be difficult to read through such a long listing. We'lldiscuss the pros and cons of unifying applications versus breakingthem into components in <a href="ch16_01.htm">Chapter 16, "Guidelines for Better CGI Applications"</a>.</p></div></div><hr align="left" width="515" /><div class="navbar"><table border="0" width="515"><tr><td width="172" valign="top" align="left"><a href="ch10_03.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td width="171" valign="top" align="center"><a href="index.htm"><img src="../gifs/txthome.gif" alt="Home" border="0" /></a></td><td width="172" valign="top" align="right"><a href="ch11_01.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr><tr><td width="172" valign="top" align="left">10.3. Introduction to SQL</td><td width="171" valign="top" align="center"><a href="index/index.htm"><img src="../gifs/index.gif" alt="Book Index" border="0" /></a></td><td width="172" valign="top" align="right">11. Maintaining State</td></tr></table></div><hr align="left" width="515" /><img src="../gifs/navbar.gif" alt="Library Navigation Links" usemap="#library-map" border="0" /><p><font size="-1"><a href="copyrght.htm">Copyright &copy; 2001</a> O'Reilly &amp; Associates. All rights reserved.</font></p><map name="library-map"><area href="../index.htm" coords="1,1,83,102" shape="rect" /><area href="../lnut/index.htm" coords="81,0,152,95" shape="rect" /><area href="../run/index.htm" coords="172,2,252,105" shape="rect" /><area href="../apache/index.htm" coords="238,2,334,95" shape="rect" /><area href="../sql/index.htm" coords="336,0,412,104" shape="rect" /><area href="../dbi/index.htm" coords="415,0,507,101" shape="rect" /><area href="../cgi/index.htm" coords="511,0,601,99" shape="rect" /></map></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -