📄 ch10_04.htm
字号:
<p>Finally, <tt class="literal">$CGI</tt><a name="INDEX-2165" /> is a CGI object that contains theinformation about data that was sent to the CGI script. In thisprogram, we will make heavy use of the parameters that are sent inorder to determine the logical flow of the program. For example, allthe <a name="INDEX-2166" />submitbuttons on a form will be labelled with the prefix"submit_" plus an action. This will be used to determinewhich button was pressed and hence which action we would like the CGIscript to perform.</p><blockquote><pre class="code">if ($CGI->param( "submit_do_maintenance" ) ) { displayMaintenanceChoices( $CGI );}elsif ( $CGI->param( "submit_update" ) ) { doUpdate( $CGI, $DBH );}elsif ( $CGI->param( "submit_delete" ) ) { doDelete( $CGI, $DBH );}elsif ( $CGI->param( "submit_add" ) ) { doAdd( $CGI, $DBH );}elsif ( $CGI->param( "submit_enter_query_for_delete" ) ) { displayDeleteQueryScreen( $CGI );}elsif ( $CGI->param( "submit_enter_query_for_update" ) ) { displayUpdateQueryScreen( $CGI );}elsif ( $CGI->param( "submit_query_for_delete" ) ) { displayDeleteQueryResults( $CGI, $DBH );}elsif ( $CGI->param( "submit_query_for_update" ) ) { displayUpdateQueryResults( $CGI, $DBH );}elsif ( $CGI->param( "submit_enter_new_address" ) ) { displayEnterNewAddressScreen( $CGI );}elsif ( $CGI->param( "submit_query" ) ) { displayQueryResults( $CGI, $DBH );}else { displayQueryScreen( $CGI );}</pre></blockquote><p>As we just described, we are using the<tt class="literal">$CGI</tt><a name="INDEX-2167" /> variable to determine the flow ofcontrol through the CGI script. This big<em class="emphasis">if</em><a name="INDEX-2168" /> block may look a bitmessy, but the reality is that you only need to go to one spot inthis program to see a description of what the entire program does.From this <em class="emphasis">if</em> block, we know that the programdeals with displaying the query screen by default, but based on otherparameters may display a <a name="INDEX-2169" /> <a name="INDEX-2,170" /> <a name="INDEX-2,171" /> <a name="INDEX-2,172" /> <a name="INDEX-2,173" />new address screen,update query screen, delete query screen, and various query resultscreens, as well as various data modification result screens.</p><blockquote><pre class="code">sub displayQueryScreen { my $cgi = shift; print $cgi->header( );print qq`<HTML><HEAD><TITLE>Address Book</TITLE></HEAD><BODY BGCOLOR = "FFFFFF" TEXT = "000000"><CENTER><H1>Address Book</H1> </CENTER><HR><FORM METHOD=POST><H3><STRONG>Enter Search criteria: </STRONG></H3><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><P><INPUT TYPE="checkbox" NAME="exactmatch"> <STRONG> Perform Exact Match</STRONG> (Default search is case sensitive against partial word matches) <P><INPUT TYPE="submit" name="submit_query" value="Do Search"><INPUT TYPE="submit" name="submit_do_maintenance" value="Maintain Database"><INPUT TYPE="reset" value="Clear Criteria Fields"></FORM><P><HR></BODY></HTML>`;} # end of displayQueryScreensub displayMaintenanceChoices { my $cgi = shift; my $message = shift; if ($message) { $message = $message . "\n<HR>\n"; } print $cgi->header( ); print qq`<HTML><HEAD><TITLE>Address Book Maintenance</TITLE></HEAD> <BODY BGCOLOR="FFFFFF"><CENTER><H1>Address Book Maintenance</H1><HR>$message<P><FORM METHOD=POST><INPUT TYPE="SUBMIT" NAME="submit_enter_new_address" VALUE="New Address"><INPUT TYPE="SUBMIT" NAME="submit_enter_query_for_update" VALUE="Update Address"><INPUT TYPE="SUBMIT" NAME="submit_enter_query_for_delete" VALUE="Delete Address"><INPUT TYPE="SUBMIT" NAME="submit_nothing" VALUE="Search Address"></FORM></CENTER><HR></BODY></HTML>`;} # end of displayMaintenanceChoicessub displayAllQueryResults { my $cgi = shift; my $dbh = shift; my $op = shift; my $ra_query_results = getQueryResults($cgi, $dbh); print $cgi->header( ); my $title; my $extra_column = ""; my $form = ""; my $center = ""; if ($op eq "SEARCH") { $title = "AddressBook Query Results"; $center = "<CENTER>"; } elsif ($op eq "UPDATE") { $title = "AddressBook Query Results For Update"; $extra_column = "<TH>Update</TH>"; $form = qq`<FORM METHOD="POST">`; } else { $title = "AddressBook Query Results For Delete"; $extra_column = "<TH>Delete</TH>"; $form = qq`<FORM METHOD="POST">`; } print qq`<HTML><HEAD><TITLE>$title</TITLE></HEAD><BODY BGCOLOR="WHITE">$center<H1>Query Results</H1><HR>$form<TABLE BORDER=1>`; print "<TR>$extra_column" . join("\n", map("<TH>" . $_ . "</TH>", @FIELD_DESCRIPTIONS)) . "</TR>\n"; my $row; foreach $row (@$ra_query_results) { print "<TR>"; if ($op eq "SEARCH") { print join("\n", map("<TD>" . $_ . "</TD>", @$row)); } elsif ($op eq "UPDATE") { print qq`\n<TD ALIGN="CENTER"> <INPUT TYPE="radio" NAME="update_criteria" VALUE="` . join("|", @$row) . qq`"></TD>\n`; print join("\n", map("<TD>" . $_ . "</TD>", @$row)); } else { # delete print qq`\n<TD ALIGN="CENTER"> <INPUT TYPE="radio" NAME="delete_criteria" VALUE="` . join("|", @$row) . qq`"></TD>\n`; print join("\n", map("<TD>" . $_ . "</TD>", @$row)); } print "</TR>\n"; } print qq"</TABLE>\n"; if ($op eq "UPDATE") { my $address_table = getAddressTableHTML( ); print qq`$address_table <INPUT TYPE="submit" NAME="submit_update" VALUE="Update Selected Row"> <INPUT TYPE="submit" NAME="submit_do_maintenance" VALUE="Maintain Database"> </FORM> `; } elsif ($op eq "DELETE") { print qq`<P> <INPUT TYPE="submit" NAME="submit_delete" VALUE="Delete Selected Row"> <INPUT TYPE="submit" NAME="submit_do_maintenance" VALUE="Maintain Database"> </FORM> `; } else { print "</CENTER>"; } print "</BODY></HTML>\n";}sub getQueryResults { my $cgi = shift; my $dbh = shift; my @query_results; my $field_list = join(",", @FIELD_NAMES); my $sql = "SELECT $field_list FROM $TABLE"; my %criteria = ( ); my $field; foreach $field (@FIELD_NAMES) { if ($cgi->param($field)) { $criteria{$field} = $cgi->param($field); } } # build up where clause my $where_clause; if ($cgi->param('exactmatch')) { $where_clause = join(" and ", map ($_ . " = \"" . $criteria{$_} . "\"", (keys %criteria))); } else { $where_clause = join(" and ", map ($_ . " like \"%" . $criteria{$_} . "%\"", (keys %criteria))); } $where_clause =~ /(.*)/; $where_clause = $1; $sql = $sql . " where " . $where_clause if ($where_clause); my $sth = $dbh->prepare($sql) or die "Cannot prepare: " . $dbh->errstr( ); $sth->execute( ) or die "Cannot execute: " . $sth->errstr( ); my @row; while (@row = $sth->fetchrow_array( )) { my @record = @row; push(@query_results, \@record); } $sth->finish( ); return \@query_results;} # end of getQueryResultssub displayQueryResults { my $cgi = shift; my $dbh = shift; displayAllQueryResults($cgi,$dbh,"SEARCH");} # end of displayQueryResultssub displayUpdateQueryResults { my $cgi = shift; my $dbh = shift; displayAllQueryResults($cgi,$dbh,"UPDATE");} # end of displayUpdateQueryResults sub displayDeleteQueryResults { my $cgi = shift; my $dbh = shift; displayAllQueryResults($cgi, $dbh, "DELETE");} # end of displayDeleteQueryResultssub doAdd { my $cgi = shift;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -