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

📄 00000001.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
table&nbsp;is&nbsp;simply&nbsp;an&nbsp;index&nbsp;of&nbsp;tests&nbsp;so&nbsp;that&nbsp;the&nbsp;ID&nbsp;number&nbsp;of&nbsp;any&nbsp;test&nbsp;can&nbsp;be&nbsp;quickly&nbsp;obtained.&nbsp;Then&nbsp;we&nbsp;simultaneously&nbsp;create&nbsp;two&nbsp;new&nbsp;queries.&nbsp;The&nbsp;first&nbsp;is&nbsp;a&nbsp;CREATE&nbsp;TABLE&nbsp;query&nbsp;which&nbsp;defines&nbsp;our&nbsp;new&nbsp;test.&nbsp;The&nbsp;second&nbsp;is&nbsp;an&nbsp;INSERT&nbsp;query&nbsp;that&nbsp;populates&nbsp;our&nbsp;&nbsp;<BR>table&nbsp;with&nbsp;the&nbsp;maximum&nbsp;score&nbsp;for&nbsp;each&nbsp;question.&nbsp;These&nbsp;queries&nbsp;are&nbsp;then&nbsp;sent&nbsp;to&nbsp;the&nbsp;database&nbsp;server,&nbsp;completing&nbsp;the&nbsp;process&nbsp;(after&nbsp;sending&nbsp;a&nbsp;success&nbsp;page&nbsp;to&nbsp;the&nbsp;user).&nbsp;Later,&nbsp;after&nbsp;the&nbsp;students&nbsp;have&nbsp;taken&nbsp;the&nbsp;test,&nbsp;each&nbsp;student&nbsp;will&nbsp;get&nbsp;an&nbsp;entry&nbsp;in&nbsp;the&nbsp;&nbsp;<BR>test&nbsp;table.&nbsp;Then&nbsp;entries&nbsp;can&nbsp;then&nbsp;be&nbsp;compared&nbsp;to&nbsp;the&nbsp;maximum&nbsp;values&nbsp;to&nbsp;determine&nbsp;the&nbsp;student's&nbsp;score.&nbsp;<BR>&nbsp;<BR>Msql.pm&nbsp;<BR>The&nbsp;Msql.pm&nbsp;module&nbsp;is&nbsp;the&nbsp;original&nbsp;Perl&nbsp;interface&nbsp;to&nbsp;mSQL.&nbsp;While&nbsp;it&nbsp;has&nbsp;been&nbsp;replaced&nbsp;by&nbsp;the&nbsp;DBI&nbsp;modules,&nbsp;there&nbsp;are&nbsp;still&nbsp;many&nbsp;sites&nbsp;that&nbsp;depend&nbsp;on&nbsp;this&nbsp;old&nbsp;interface.&nbsp;To&nbsp;illustrate&nbsp;the&nbsp;use&nbsp;of&nbsp;Msql.pm,&nbsp;we&nbsp;will&nbsp;continue&nbsp;the&nbsp;teacher's&nbsp;aide&nbsp;example.&nbsp;<BR>&nbsp;<BR>Since&nbsp;we&nbsp;need&nbsp;classes&nbsp;in&nbsp;which&nbsp;to&nbsp;give&nbsp;the&nbsp;tests,&nbsp;let's&nbsp;examine&nbsp;the&nbsp;table&nbsp;of&nbsp;subjects.&nbsp;The&nbsp;table&nbsp;structure&nbsp;looks&nbsp;like&nbsp;this:&nbsp;<BR>&nbsp;<BR>CREATE&nbsp;TABLE&nbsp;subject&nbsp;(&nbsp;<BR>&nbsp;&nbsp;id&nbsp;INT&nbsp;NOT&nbsp;NULL,&nbsp;<BR>&nbsp;&nbsp;name&nbsp;CHAR(500),&nbsp;<BR>&nbsp;&nbsp;teacher&nbsp;CHAR(100)&nbsp;<BR>)&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>CREATE&nbsp;UNIQUE&nbsp;&nbsp;INDEX&nbsp;idx1&nbsp;ON&nbsp;subject&nbsp;(&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;teacher&nbsp;<BR>)&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>CREATE&nbsp;SEQUENCE&nbsp;ON&nbsp;subject&nbsp;<BR>The&nbsp;id&nbsp;number&nbsp;is&nbsp;a&nbsp;unique&nbsp;identifier&nbsp;for&nbsp;the&nbsp;class,&nbsp;while&nbsp;the&nbsp;name&nbsp;and&nbsp;teacher&nbsp;fields&nbsp;are&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;course&nbsp;and&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;teacher&nbsp;respectively.&nbsp;There&nbsp;is&nbsp;also&nbsp;an&nbsp;index&nbsp;of&nbsp;all&nbsp;three&nbsp;of&nbsp;the&nbsp;fields&nbsp;that&nbsp;speeds&nbsp;up&nbsp;queries.&nbsp;Finally,&nbsp;we&nbsp;define&nbsp;a&nbsp;&nbsp;<BR>sequence&nbsp;for&nbsp;the&nbsp;table.&nbsp;The&nbsp;ID&nbsp;numbers&nbsp;are&nbsp;generated&nbsp;by&nbsp;this&nbsp;sequence.&nbsp;<BR>&nbsp;<BR>The&nbsp;CGI&nbsp;program&nbsp;to&nbsp;access&nbsp;and&nbsp;manipulate&nbsp;this&nbsp;data&nbsp;must&nbsp;to&nbsp;several&nbsp;things.&nbsp;<BR>&nbsp;<BR>Search&nbsp;for&nbsp;a&nbsp;subject&nbsp;in&nbsp;the&nbsp;database.&nbsp;&nbsp;<BR>Show&nbsp;the&nbsp;subject&nbsp;that&nbsp;is&nbsp;the&nbsp;result&nbsp;of&nbsp;a&nbsp;search.&nbsp;&nbsp;<BR>Add&nbsp;a&nbsp;new&nbsp;subject&nbsp;to&nbsp;the&nbsp;database.&nbsp;&nbsp;<BR>Change&nbsp;the&nbsp;values&nbsp;of&nbsp;a&nbsp;subject&nbsp;in&nbsp;the&nbsp;database.&nbsp;&nbsp;<BR>With&nbsp;the&nbsp;power&nbsp;of&nbsp;Perl&nbsp;and&nbsp;mSQL,&nbsp;we&nbsp;can&nbsp;easily&nbsp;consolidate&nbsp;all&nbsp;of&nbsp;these&nbsp;functions&nbsp;into&nbsp;one&nbsp;file,&nbsp;subject.cgi.&nbsp;We&nbsp;can&nbsp;do&nbsp;this&nbsp;by&nbsp;separating&nbsp;each&nbsp;operation&nbsp;into&nbsp;its&nbsp;own&nbsp;function.&nbsp;The&nbsp;main&nbsp;portion&nbsp;of&nbsp;the&nbsp;program&nbsp;will&nbsp;be&nbsp;a&nbsp;switchboard&nbsp;of&nbsp;sorts&nbsp;that&nbsp;directs&nbsp;&nbsp;<BR>incoming&nbsp;requests&nbsp;to&nbsp;the&nbsp;proper&nbsp;function.&nbsp;We&nbsp;will&nbsp;describe&nbsp;the&nbsp;actions&nbsp;themselves&nbsp;later.&nbsp;<BR>&nbsp;<BR>#&nbsp;Each&nbsp;of&nbsp;the&nbsp;different&nbsp;parts&nbsp;of&nbsp;the&nbsp;script&nbsp;is&nbsp;selected&nbsp;via&nbsp;the&nbsp;&nbsp;<BR>#&nbsp;'action'&nbsp;<BR>#&nbsp;parameter.&nbsp;If&nbsp;no&nbsp;'action'&nbsp;is&nbsp;supplied,&nbsp;the&nbsp;default()&nbsp;function&nbsp;is&nbsp;<BR>#&nbsp;called.&nbsp;<BR>#&nbsp;Otherwise&nbsp;the&nbsp;appropriate&nbsp;function&nbsp;is&nbsp;called.&nbsp;<BR>&amp;default&nbsp;if&nbsp;not&nbsp;param('action');&nbsp;<BR>#&nbsp;This&nbsp;trick&nbsp;comes&nbsp;from&nbsp;Camel&nbsp;2&nbsp;and&nbsp;approximates&nbsp;the&nbsp;'switch'&nbsp;<BR>#&nbsp;feature&nbsp;of&nbsp;C.&nbsp;<BR>foreach[AO4]&nbsp;(param('action'))&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;/view/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;view;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/add$/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;add;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/add2/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;add2;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/add3/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;add3;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/add4/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;add4;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/schange$/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;schange;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/schange2/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;schange2;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/lchange$/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;lchange;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/lchange2/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;lchange2;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/lchange3/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;lchange3;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;/delete/&nbsp;and&nbsp;do&nbsp;{&nbsp;&amp;delete;&nbsp;last;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;&amp;default;&nbsp;<BR>}&nbsp;<BR>TIP:&nbsp;The&nbsp;&quot;add,&quot;&nbsp;&quot;schange,&quot;&nbsp;and&nbsp;&quot;lchange&quot;&nbsp;entries&nbsp;must&nbsp;have&nbsp;an&nbsp;anchoring&nbsp;&quot;$&quot;&nbsp;in&nbsp;the&nbsp;regular&nbsp;expression&nbsp;so&nbsp;that&nbsp;they&nbsp;do&nbsp;not&nbsp;match&nbsp;the&nbsp;other&nbsp;functions&nbsp;similar&nbsp;to&nbsp;them.&nbsp;Without&nbsp;the&nbsp;&quot;$&quot;,&nbsp;&quot;add&quot;&nbsp;would&nbsp;also&nbsp;match&nbsp;add2,&nbsp;add3&nbsp;and&nbsp;add4.&nbsp;An&nbsp;alternative&nbsp;method&nbsp;&nbsp;<BR>would&nbsp;be&nbsp;to&nbsp;place&nbsp;&quot;add,&quot;&nbsp;&quot;schange,&quot;&nbsp;and&nbsp;&quot;lchange&quot;&nbsp;after&nbsp;the&nbsp;other&nbsp;functions.&nbsp;That&nbsp;way&nbsp;they&nbsp;would&nbsp;only&nbsp;be&nbsp;called&nbsp;if&nbsp;none&nbsp;of&nbsp;the&nbsp;others&nbsp;matched.&nbsp;However,&nbsp;this&nbsp;method&nbsp;could&nbsp;cause&nbsp;trouble&nbsp;if&nbsp;other&nbsp;entries&nbsp;are&nbsp;added&nbsp;later.&nbsp;A&nbsp;third&nbsp;method&nbsp;would&nbsp;be&nbsp;to&nbsp;&nbsp;<BR>completely&nbsp;disambiguate&nbsp;all&nbsp;of&nbsp;the&nbsp;entries&nbsp;using&nbsp;/^view$/,&nbsp;/^add$/,&nbsp;etc.&nbsp;This&nbsp;involves&nbsp;slightly&nbsp;more&nbsp;typing&nbsp;but&nbsp;removes&nbsp;all&nbsp;possibility&nbsp;of&nbsp;error.&nbsp;<BR>&nbsp;<BR>Now&nbsp;all&nbsp;we&nbsp;have&nbsp;to&nbsp;do&nbsp;is&nbsp;fill&nbsp;in&nbsp;the&nbsp;details&nbsp;by&nbsp;implementing&nbsp;each&nbsp;function.&nbsp;<BR>&nbsp;<BR>The&nbsp;default&nbsp;function&nbsp;prints&nbsp;out&nbsp;the&nbsp;initial&nbsp;form&nbsp;seen&nbsp;by&nbsp;the&nbsp;user.&nbsp;This&nbsp;is&nbsp;the&nbsp;form&nbsp;that&nbsp;allows&nbsp;the&nbsp;user&nbsp;to&nbsp;choose&nbsp;which&nbsp;action&nbsp;to&nbsp;perform.&nbsp;This&nbsp;function&nbsp;is&nbsp;called&nbsp;if&nbsp;the&nbsp;CGI&nbsp;program&nbsp;is&nbsp;accessed&nbsp;without&nbsp;any&nbsp;parameters,&nbsp;as&nbsp;with&nbsp;&nbsp;<BR><A HREF="http://www.myserver.com/teach/subject.cgi,">http://www.myserver.com/teach/subject.cgi,</A>&nbsp;or&nbsp;if&nbsp;the&nbsp;ACTION&nbsp;parameter&nbsp;does&nbsp;not&nbsp;match&nbsp;any&nbsp;of&nbsp;the&nbsp;existing&nbsp;functions.&nbsp;An&nbsp;alternative&nbsp;method&nbsp;would&nbsp;be&nbsp;to&nbsp;create&nbsp;a&nbsp;function&nbsp;that&nbsp;prints&nbsp;out&nbsp;an&nbsp;error&nbsp;if&nbsp;the&nbsp;ACTION&nbsp;parameter&nbsp;is&nbsp;unknown.&nbsp;<BR>&nbsp;<BR>sub&nbsp;default&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;print&nbsp;header,&nbsp;start_html('title'=&gt;'Subjects','BGCOLOR'=&gt;'white');&nbsp;<BR>&nbsp;&nbsp;&nbsp;print&nbsp;&lt;&lt;END_OF_HTML;&nbsp;<BR>&lt;h1&gt;Subjects&lt;/h1&gt;&nbsp;<BR>&lt;p&gt;Select&nbsp;an&nbsp;action&nbsp;and&nbsp;a&nbsp;subject&nbsp;(if&nbsp;applicable).&nbsp;<BR>&lt;FORM&nbsp;ACTION=&quot;subject.cgi&quot;&nbsp;METHOD=POST&gt;&nbsp;<BR>&lt;p&gt;&lt;SELECT&nbsp;NAME=&quot;action&quot;&gt;&nbsp;<BR>&lt;OPTION&nbsp;VALUE=&quot;view&quot;&gt;View&nbsp;a&nbsp;Subject&nbsp;<BR>&lt;OPTION&nbsp;value=&quot;add&quot;&gt;Add&nbsp;a&nbsp;Subject&nbsp;<BR>&lt;OPTION&nbsp;value=&quot;schange&quot;&gt;Modify&nbsp;a&nbsp;Subject&nbsp;<BR>&lt;OPTION&nbsp;value=&quot;lchange&quot;&nbsp;SELECTED&gt;Modify&nbsp;a&nbsp;Class&nbsp;List&nbsp;<BR>&lt;OPTION&nbsp;value=&quot;delete&quot;&gt;Delete&nbsp;a&nbsp;Subject&nbsp;<BR>&lt;/select&gt;&nbsp;&nbsp;<BR>END_OF_HTML&nbsp;<BR>&nbsp;&nbsp;&nbsp;#&nbsp;See&nbsp;'sub&nbsp;print_subjects'&nbsp;below.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&amp;print_subjects;&nbsp;<BR>&nbsp;&nbsp;&nbsp;print&nbsp;&lt;&lt;END_OF_HTML;&nbsp;<BR>&lt;p&gt;&nbsp;<BR>&lt;INPUT&nbsp;TYPE=SUBMIT&nbsp;VALUE=&quot;&nbsp;Perform&nbsp;Action&nbsp;&quot;&gt;&nbsp;&nbsp;<BR>&lt;INPUT&nbsp;TYPE=RESET&gt;&nbsp;<BR>&lt;/form&gt;&lt;/body&gt;&lt;/html&gt;&nbsp;<BR>HTML&nbsp;<BR>&nbsp;&nbsp;<BR>}&nbsp;<BR>There&nbsp;are&nbsp;five&nbsp;main&nbsp;actions:&nbsp;&quot;view,&quot;&nbsp;&quot;add,&quot;&nbsp;&quot;schange&quot;&nbsp;(change&nbsp;the&nbsp;information&nbsp;about&nbsp;a&nbsp;subject),&nbsp;&quot;lchange&quot;&nbsp;(change&nbsp;the&nbsp;class&nbsp;list&nbsp;for&nbsp;a&nbsp;subject),&nbsp;and&nbsp;&quot;delete&quot;.&nbsp;For&nbsp;illustration,&nbsp;we&nbsp;will&nbsp;examine&nbsp;the&nbsp;&quot;add&quot;&nbsp;action&nbsp;in&nbsp;detail&nbsp;here.&nbsp;The&nbsp;&quot;add&quot;&nbsp;action&nbsp;is&nbsp;broken&nbsp;&nbsp;<BR>up&nbsp;into&nbsp;four&nbsp;separate&nbsp;functions&nbsp;because&nbsp;interaction&nbsp;with&nbsp;the&nbsp;user&nbsp;is&nbsp;required&nbsp;up&nbsp;to&nbsp;four&nbsp;times.&nbsp;Hidden&nbsp;variables&nbsp;are&nbsp;used&nbsp;to&nbsp;pass&nbsp;information&nbsp;from&nbsp;form&nbsp;to&nbsp;form&nbsp;until&nbsp;the&nbsp;class&nbsp;is&nbsp;finally&nbsp;created.&nbsp;<BR>&nbsp;<BR>The&nbsp;first&nbsp;add&nbsp;function&nbsp;generates&nbsp;the&nbsp;form&nbsp;used&nbsp;to&nbsp;enter&nbsp;the&nbsp;initial&nbsp;information&nbsp;about&nbsp;the&nbsp;class,&nbsp;including&nbsp;its&nbsp;name,&nbsp;the&nbsp;teacher's&nbsp;name,&nbsp;and&nbsp;the&nbsp;number&nbsp;of&nbsp;students&nbsp;in&nbsp;the&nbsp;class.&nbsp;<BR>&nbsp;<BR>sub&nbsp;add&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;my&nbsp;(%fields);&nbsp;<BR>&nbsp;&nbsp;&nbsp;foreach&nbsp;('name','size','teacher')&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(param($_))&nbsp;{&nbsp;$fields{$_}&nbsp;=&nbsp;param($_);&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{&nbsp;$fields{$_}&nbsp;=&nbsp;&quot;&quot;;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;print&nbsp;header,&nbsp;start_html('title'=&gt;'Add&nbsp;a&nbsp;Subject','BGCOLOR'=&gt;'white');&nbsp;<BR>&nbsp;&nbsp;&nbsp;print&nbsp;&lt;&lt;END_OF_HTML;&nbsp;<BR>&lt;H1&gt;Add&nbsp;a&nbsp;Subject&lt;/h1&gt;&nbsp;<BR>&lt;form&nbsp;METHOD=POST&nbsp;ACTION=&quot;subject.cgi&quot;&gt;&nbsp;<BR>&lt;p&gt;&nbsp;<BR>Subject&nbsp;Name:&nbsp;&lt;input&nbsp;size=40&nbsp;name=&quot;name&quot;&nbsp;value=&quot;$fields{'name'}&quot;&gt;&lt;br&gt;&nbsp;<BR>Teacher's&nbsp;Name:&nbsp;&lt;input&nbsp;size=40&nbsp;name=&quot;teacher&quot;&nbsp;value=&quot;$fields{'teacher'}&quot;&gt;&lt;br&gt;&nbsp;<BR>Number&nbsp;of&nbsp;Students&nbsp;in&nbsp;Class:&nbsp;&lt;input&nbsp;size=5&nbsp;name=&quot;size&quot;&nbsp;value=&quot;$fields{'size'}&quot;&gt;&nbsp;<BR>&lt;p&gt;&nbsp;<BR>&lt;INPUT&nbsp;TYPE=HIDDEN&nbsp;NAME=&quot;action&quot;&nbsp;VALUE=&quot;add2&quot;&gt;&nbsp;<BR>&lt;INPUT&nbsp;TYPE=SUBMIT&nbsp;VALUE=&quot;&nbsp;Next&nbsp;Page&nbsp;&quot;&gt;&nbsp;&nbsp;<BR>&lt;INPUT&nbsp;TYPE=RESET&gt;&nbsp;<BR>&lt;/form&gt;&nbsp;<BR>&lt;p&gt;&nbsp;<BR>&lt;A&nbsp;HREF=&quot;subject.cgi&quot;&gt;Go&lt;/a&gt;&nbsp;back&nbsp;to&nbsp;the&nbsp;main&nbsp;Subject&nbsp;page.&lt;br&gt;&nbsp;<BR>&lt;A&nbsp;HREF=&quot;.&quot;&gt;Go&lt;/a&gt;&nbsp;to&nbsp;the&nbsp;Teacher's&nbsp;Aide&nbsp;Home&nbsp;Page.&nbsp;<BR>&lt;/body&gt;&lt;/html&gt;&nbsp;<BR>END_OF_HTML&nbsp;<BR>&nbsp;&nbsp;<BR>}&nbsp;<BR>The&nbsp;function&nbsp;checks&nbsp;to&nbsp;see&nbsp;if&nbsp;any&nbsp;of&nbsp;the&nbsp;fields&nbsp;have&nbsp;preassigned&nbsp;values.&nbsp;This&nbsp;adds&nbsp;extra&nbsp;versatility&nbsp;to&nbsp;the&nbsp;function&nbsp;in&nbsp;that&nbsp;it&nbsp;can&nbsp;now&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;template&nbsp;for&nbsp;classes&nbsp;with&nbsp;default&nbsp;values--perhaps&nbsp;generated&nbsp;by&nbsp;another&nbsp;CGI&nbsp;program&nbsp;somewhere.&nbsp;<BR>&nbsp;<BR>The&nbsp;values&nbsp;from&nbsp;the&nbsp;first&nbsp;part&nbsp;of&nbsp;the&nbsp;add&nbsp;process&nbsp;are&nbsp;passed&nbsp;back&nbsp;to&nbsp;CGI&nbsp;program&nbsp;into&nbsp;the&nbsp;add2&nbsp;function.&nbsp;The&nbsp;first&nbsp;thing&nbsp;that&nbsp;add2&nbsp;does&nbsp;is&nbsp;check&nbsp;whether&nbsp;the&nbsp;class&nbsp;already&nbsp;exists.&nbsp;If&nbsp;it&nbsp;does,&nbsp;an&nbsp;error&nbsp;message&nbsp;is&nbsp;sent&nbsp;to&nbsp;the&nbsp;user&nbsp;and&nbsp;he&nbsp;or&nbsp;she&nbsp;can&nbsp;change&nbsp;&nbsp;<BR>the&nbsp;name&nbsp;of&nbsp;the&nbsp;class.&nbsp;<BR>&nbsp;<BR>If&nbsp;the&nbsp;class&nbsp;does&nbsp;not&nbsp;already&nbsp;exist,&nbsp;the&nbsp;function&nbsp;checks&nbsp;how&nbsp;many&nbsp;students&nbsp;were&nbsp;entered&nbsp;for&nbsp;the&nbsp;class.&nbsp;If&nbsp;none&nbsp;were&nbsp;entered,&nbsp;the&nbsp;class&nbsp;is&nbsp;created&nbsp;without&nbsp;any&nbsp;students.&nbsp;The&nbsp;students&nbsp;can&nbsp;be&nbsp;added&nbsp;later.&nbsp;If&nbsp;the&nbsp;number&nbsp;of&nbsp;students&nbsp;was&nbsp;specified,&nbsp;the&nbsp;class&nbsp;&nbsp;<BR>is&nbsp;created&nbsp;and&nbsp;a&nbsp;form&nbsp;is&nbsp;displayed&nbsp;where&nbsp;the&nbsp;user&nbsp;can&nbsp;enter&nbsp;the&nbsp;information&nbsp;about&nbsp;each&nbsp;student.&nbsp;<BR>&nbsp;<BR>

⌨️ 快捷键说明

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