📄 ch10_04.htm
字号:
my $dbh = shift; my @value_array = ( ); my @missing_fields = ( ); my $field; foreach $field (@FIELD_NAMES){ my $value = $cgi->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 > 0) { my $error_message = qq`<STRONG> Some Fields (` . join(",", @missing_fields) . qq`) Were Not Entered! Address Not Inserted. </STRONG>`; displayErrorMessage($cgi, $error_message); } else { my $sql = qq`INSERT INTO $TABLE $field_list VALUES $value_list`; my $sth = $dbh->prepare($sql) or die "Cannot prepare: " . $dbh->errstr( ); $sth->execute( ) or die "Cannot execute: " . $sth->errstr( ); $sth->finish( ); displayMaintenanceChoices($cgi,"Add Was Successful!"); }} # end of doAddsub doDelete { my $cgi = shift; my $dbh = shift; my $delete_criteria = $cgi->param("delete_criteria"); if (!$delete_criteria) { my $error_message = "<STRONG>You didn't select a record to delete!</STRONG>"; 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->prepare($sql) or die "Cannot prepare: " . $dbh->errstr( ); $sth->execute( ) or die "Cannot execute: " . $sth->errstr( ); $sth->finish( ); displayMaintenanceChoices($cgi,"Delete Was Successful!"); }} # end of doDeletesub doUpdate { my $cgi = shift; my $dbh = shift; my $update_criteria = $cgi->param("update_criteria"); if (!$update_criteria) { my $error_message = "<STRONG>You didn't select a record to update!</STRONG>"; displayErrorMessage($cgi, $error_message); } else { # build up set logic my $set_logic = ""; my %set_fields = ( ); my $field; foreach $field (@FIELD_NAMES) { my $value = $cgi->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->prepare($sql) or die "Cannot prepare: " . $dbh->errstr( ); $sth->execute( ) or die "Cannot execute: " . $sth->errstr( ); $sth->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->header( );# Prints out the headerprint qq`<HTML><HEAD><TITLE>Address Book Maintenance</TITLE></HEAD> <BODY BGCOLOR="FFFFFF"> <H1>$address_op</H1><HR><P><FORM METHOD=POST>`;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.<P>\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.<P>\nYou will then be able to choose entries to delete from the resulting list.\n"}my $address_table = getAddressTableHTML( );print qq`<HR><P>$address_table`;if ($operation eq "ADD") { print qq` <P> <INPUT TYPE="submit" NAME="submit_add" VALUE="Add This New Address"><P> `; } elsif ($operation eq "UPDATE") { print qq` <INPUT TYPE="checkbox" NAME="exactsearch"> <STRONG>Perform Exact Search</STRONG> <P> <INPUT TYPE="submit" NAME="submit_query_for_update" VALUE="Query For Modification"> <P> `;} else { print qq` <INPUT TYPE="checkbox" NAME="exactsearch"> <STRONG>Perform Exact Search</STRONG> <P> <INPUT TYPE="submit" NAME="submit_query_for_delete" VALUE="Query For List To Delete"> <P> `;}# print the HTML footer.print qq`<INPUT TYPE="reset" VALUE="Clear Form"></FORM></BODY></HTML> `;} # end of displayNewUpdateDeleteScreensub displayErrorMessage { my $cgi = shift; my $error_message = shift; print $cgi->header( ); print qq`<HTML><HEAD><TITLE>Error Message</TITLE></HEAD><BODY BGCOLOR="WHITE"><H1>Error Occurred</H1><HR>$error_message<HR></BODY></HTML>`;} # end of displayErrorMessagesub getAddressTableHTML {return qq`<TABLE><TR> <TD ALIGN="RIGHT">First Name:</TD> <TD><INPUT TYPE="text" NAME="fname"></TD></TR><TR> <TD ALIGN="RIGHT">Last Name:</TD> <TD><INPUT TYPE="text" NAME="lname"></TD></TR><TR> <TD ALIGN="RIGHT">Phone:</TD> <TD><INPUT TYPE="text" NAME="phone"></TD></TR><TR> <TD ALIGN="RIGHT">Department:</TD> <TD><INPUT TYPE="text" NAME="dept"></TD></TR><TR> <TD ALIGN="RIGHT">Location:</TD> <TD><INPUT TYPE="text" NAME="location"></TD></TR></TABLE>`;} # 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 © 2001</a> O'Reilly & 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 + -