- 浏览: 354430 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (238)
- j2ee (22)
- mysql (14)
- hibernate (2)
- struts (3)
- spring (7)
- php (28)
- cakephp (12)
- pattern (0)
- 数据结构 (0)
- python (17)
- redis (1)
- sql (2)
- ibatis (1)
- jquery (3)
- 测试 (3)
- linux (37)
- solr (3)
- oracle (5)
- jira (5)
- 版本控制 (3)
- xp (1)
- IDE (3)
- apache (4)
- hadoop (2)
- freemarker (2)
- maven (5)
- 项目管理 (2)
- UML (1)
- Django (6)
- 正则 (1)
- Scrapy (1)
- 文档管理 (3)
- 项目集成 (8)
- MQ (3)
- 架构 (1)
- HTML (1)
- IT (1)
- 云 (0)
- 应用服务器 (4)
- win 7 (1)
- thrift (1)
- 学习 (3)
- OpenStack (3)
- sqlserver (1)
- javascript (1)
- zabbix (3)
- IOS (1)
- rabbitmq (1)
- springcloud (2)
最新评论
-
xushenkun4:
至今仍然有这个bug,0.9.1无法传输中文utf8。
thrift使用出现诡异问题 -
feiniao2029:
[i][/i][u][/u]引用
spring 配置init方法 -
wt811004:
非常感谢朋友慷慨指导
dotproject项目管理工具使用 -
hackpro:
这将是一个经典,就像大话西游...
javaeye怀旧 -
raymond2006k:
个人更偏好 Velocity。我觉得还有个对比点,就是编程方式 ...
jsp freemarker velocity 比较
一、关于这篇文章
由于近期用cakephp开发一个boss后台,找了一下关于php方面的资料,自己添加一部分,记录下这篇文章。
二、基本的语法内容(摘录部分)
2.1 创建表单的开始和结束语句
这个是一对form的开始和结尾方法,构成一个完整的form。
当不带任何参数的时候,form->create生成了一个post方法的action为当前controller的add方法的form,并且生成了一个很奇怪的隐藏input,名字是_method,暂时还不知道是干啥子用的。form->end就生成了一个结尾。这显然不是我们所需要的。form->end负责着生成最后的提交按钮的说。
所以我们最需要的形式是:
在上面的例子里面,type=“get”的时候,不会生成对应的<fieldset>里面的隐藏域,其他的“post、put、 delete ” 都会生成这个很奇怪的隐藏域,不知道到底是做啥子用途的。get的时候method会是get,其他的时候都是post,只不过隐藏域会有所不同。还有这个form的url生成的参数的时候,“&”会被2次转义成“&amp;”。很是奇怪的说。
对于上传附件表单,里面还增加 ‘ENCTYPE’=>’multipart/form-data’ 选项。
这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。
这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。
2.2、输入input
这个里面主要的是第一个参数id,会生成input的id,而且默认的name是data[id],会涉及到以后的取值问题哦。label就是 input前面的字了,对于非英文状态的页面很是管用,在第二个array中的id和name都是可以指定的。这个需要注意。还可以指定 maxLength="3"使之获得最大长度的属性。
输入框不含lable、div
2.3、输入password
这个东东有够邪门的,单独运行还不行。而出现的普通的输入框, 可以选择
1、放在form->create和end中间,并且在create中指定了第一个参数,从第二个参数中指定id或者name覆盖第一个参数都不行。是不是很邪门。
2、或者单独运行的话,用type=>’password’来强制变成password类型,不期待他的自动识别。
注:自动识别的话,需要设置第一个参数为 ‘psword’, ‘passwd’, ‘password’ 三个中的某个值,还不一定会识别成功。hoho。真是崩溃。
2.4、输入textarea
这个里面和password一样,只写一个参数的时候,识别不出来,出来的是普通的input。而强制制定了type=textarea后,将能正确识别,或者指定rows或者cols中的某个值,也是能识别出来的。但是我的习惯是不写rows和cols,而是通过css指定其高度宽度什么的。所以,就出现了最后的那中写法,先清空rows和cols,再指定type。hoho。到现在为止,我觉得有必要的话,需要重写个formhelper了。
2.5、上传文件框file
文件上传的框框,我可不喜欢有label和div跟着,设置label和div都为false,就没有对应的输出了。真是不错的主意。其他的里面也可以用这个办法去掉默认的label和div。这个是很常用的。
2.6、下拉框select
不过这种写法没有办法指定value,所以要改进一下。增加options,value=>text。
当然可以增加个选项,’multiple’=>true 或者 ‘multiple’=>’multiple’ 使之变成多选。
当没有options的时候,可以强制’type’=>’select’使之呈现为下拉框。
当然还可以指定’selected’=>options中的vlaue值,使select有默认值,这个函数也很不错,不用自己写循环了。 hoho~。官方还出了个专门用于select制定默认值的参数。 ‘default’=>value ,例如下例中的’selected’=>18就可以是’default’=>18,所以貌似这个参数也是个垃圾参数。
default可以用于radio、select。但是selected不可以用于radio,但是可以用于select和 Cakephp特有的时间类型。
官方对于select还有个垃圾参数选项,叫做empty。用于设置每个select的最开始的那个“请选择”的空值的option,但是完全可以通过设置options的第一个值为”=>’请选择’来达到同样的效果,并且官方提供的empty选项还会替换options中的值为空的 option,如:
2.7、单选框radio
单选框radio和select的写法基本上一致,就是type=‘radio’就行了。所有属性几乎一致。
和select相比,radio能使用default,不能使用selected、multiple、empty。而且对于radio,label 一定不要false掉,label在选择东西的时候还是很有用途的。
对于“legend”选项,当不设为false的时候会多个<fieldset><legend>Field</legend>……</field>出来,很是令人崩溃。
2.8、多选框checkbox
多选框和其他的东东很不一样,居然不是通过设置type来获得的,居然是通过设置select的multiple属性来获得的。而且最终出来的代码也不是很理想,有着多余的div,并且js事件也无法获得。所以到时候也许需要对应的css和js进行控制了。
而且会生成个多余的hidden东东,很奇怪的说。
2.9、隐藏域hidden
2.10、提交按钮submit
图像组成的submit
普通按钮button
由于近期用cakephp开发一个boss后台,找了一下关于php方面的资料,自己添加一部分,记录下这篇文章。
二、基本的语法内容(摘录部分)
2.1 创建表单的开始和结束语句
$form->create(string $model = null, array $options = array()) $form->end( $options = NULL )
这个是一对form的开始和结尾方法,构成一个完整的form。
echo $form->create(); echo $form->end();
<form id="AddForm" method="post" action="/test/tests/add"> <fieldset style="display:none;"> <input type="hidden" name="_method" value="POST" /> </fieldset> </form>
当不带任何参数的时候,form->create生成了一个post方法的action为当前controller的add方法的form,并且生成了一个很奇怪的隐藏input,名字是_method,暂时还不知道是干啥子用的。form->end就生成了一个结尾。这显然不是我们所需要的。form->end负责着生成最后的提交按钮的说。
所以我们最需要的形式是:
echo $form->create("", array( "type"=>"get", "id"=>"a", "name"=>"b", "onsubmit"=>"javascript:chk()", "url"=>array( 'controller'=>'ControllerName', 'action'=>'ActionName', '?'=>array( "id"=>5, "category"=>3, "category2"=>5 ) ) ) ); echo $form->end("提交");
<form id="a" name="b" onsubmit="javascript:chk()" method="post" action="/test/ControllerName/ActionName?id=5&amp;category=3&amp;category2=5"> <fieldset style="display:none;"> <input type="hidden" name="_method" value="DELETE" /> </fieldset> <div class="submit"> <input type="submit" value="提交" /> </div> </form>
在上面的例子里面,type=“get”的时候,不会生成对应的<fieldset>里面的隐藏域,其他的“post、put、 delete ” 都会生成这个很奇怪的隐藏域,不知道到底是做啥子用途的。get的时候method会是get,其他的时候都是post,只不过隐藏域会有所不同。还有这个form的url生成的参数的时候,“&”会被2次转义成“&amp;”。很是奇怪的说。
对于上传附件表单,里面还增加 ‘ENCTYPE’=>’multipart/form-data’ 选项。
这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。
这个form的结束语句还可以写成下面的形式,可以定制的选项就更多了。
echo $form->end( array( 'label' => '提交', 'name' => 'Whatever', 'div' => array( 'class' => 'good' ) ) );
<div class="good"> <input type="submit" name="Whatever" value="提交" /> </div> </form>
2.2、输入input
echo $form->input('birthday', array( 'name'=>'birthday_name', 'id'=>'birthday_id_overwrite', 'label' => '生日', 'value'=>"20090310" ) );
<div class="input text"> <label for="birthday_id_overwrite">生日</label> <input name="birthday_name" type="text" id="birthday_id_overwrite" value="20090310" /></div>
这个里面主要的是第一个参数id,会生成input的id,而且默认的name是data[id],会涉及到以后的取值问题哦。label就是 input前面的字了,对于非英文状态的页面很是管用,在第二个array中的id和name都是可以指定的。这个需要注意。还可以指定 maxLength="3"使之获得最大长度的属性。
echo $form->input('birthday');
<div class="input text"> <label for="birthday">Birthday</label> <input name="data[birthday]" type="text" value="" id="birthday" /> </div>
输入框不含lable、div
echo $form->input('birthday', array('lable'=>false,'div'=>false));
<input name="data[birthday]" type="text" value="" id="birthday" />
2.3、输入password
echo $form->input('password',array('value'=>'fdsa','label'=>'邪门的密码框'));
<div class="input text"> <label for="password">邪门的密码框</label> <input name="data[password]" type="text" value="fdsa" id="password" /> </div>
这个东东有够邪门的,单独运行还不行。而出现的普通的输入框, 可以选择
1、放在form->create和end中间,并且在create中指定了第一个参数,从第二个参数中指定id或者name覆盖第一个参数都不行。是不是很邪门。
2、或者单独运行的话,用type=>’password’来强制变成password类型,不期待他的自动识别。
注:自动识别的话,需要设置第一个参数为 ‘psword’, ‘passwd’, ‘password’ 三个中的某个值,还不一定会识别成功。hoho。真是崩溃。
echo $form->create('123',array('name'=>'456','id'=>'123')); echo $form->input('password',array('value'=>'fdsa','label'=>'邪门的密码框')); echo $form->end();
<form name="456" id="123" method="post" action="/test/123s/add"> <fieldset style="display:none;"> <input type="hidden" name="_method" value="POST" /> </fieldset> <div class="input password"> <label for="123Password">邪门的密码框</label> <input type="password" name="data[123][password]" value="fdsa" id="123Password" /> </div> </form>
2.4、输入textarea
echo $form->input('textarea'); echo $form->input('textarea',array('rows' => '5', 'cols' => '5')); echo $form->input('textarea',array('type' =>'textarea')); echo $form->input('textarea',array('cols' null,'rows'=>null,'type'=>'textarea'));
<div class="input text"> <label for="textarea">Textarea</label> <input name="data[textarea]" type="text" value="" id="textarea" /> </div> <div class="input text"> <label for="textarea">Textarea</label> <textarea name="data[textarea]" cols="5" rows="5" id="textarea" > </textarea> </div> <div class="input textarea"> <label for="textarea">Textarea</label> <textarea name="data[textarea]" cols="30" rows="6" id="textarea" ></textarea> </div> <div class="input textarea"> <label for="textarea">Textarea</label> <textarea name="data[textarea]" cols="" rows="" id="textarea" > </textarea>
这个里面和password一样,只写一个参数的时候,识别不出来,出来的是普通的input。而强制制定了type=textarea后,将能正确识别,或者指定rows或者cols中的某个值,也是能识别出来的。但是我的习惯是不写rows和cols,而是通过css指定其高度宽度什么的。所以,就出现了最后的那中写法,先清空rows和cols,再指定type。hoho。到现在为止,我觉得有必要的话,需要重写个formhelper了。
2.5、上传文件框file
echo $form->input('file_upload',array('type'=>'file','label'=>false,'div'=>false));
文件上传的框框,我可不喜欢有label和div跟着,设置label和div都为false,就没有对应的输出了。真是不错的主意。其他的里面也可以用这个办法去掉默认的label和div。这个是很常用的。
<input type="file" name="data[file_upload]" value="" id="file_upload" />
2.6、下拉框select
echo $form->input('field', array('options' => array(1,2,3,4,5),'label'=>false,'div'=>'false));
<select name="data[field]" id="field"> <option value="0">1</option> <option value="1">2</option> <option value="2">3</option> <option value="3">4</option> <option value="4">5</option> </select>
不过这种写法没有办法指定value,所以要改进一下。增加options,value=>text。
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', '10'=>'唐山', '18'=>'上海', '30'=>'美国' ), 'label'=>false, 'div'=>false, 'onchange'=>'javascript:alert(this.value)' ) );
<select name="data[field]" onchange="javascript:alert(this.value)" id="field"> <option value="5"> 北京</option> <option value="10">唐山</option> <option value="18">上海</option> <option value="30">美国</option> </select>
当然可以增加个选项,’multiple’=>true 或者 ‘multiple’=>’multiple’ 使之变成多选。
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', '10'=>'唐山', '18'=>'上海', '30'=>'美国' ), 'label'=>false, 'div'=>false, 'multiple'=>true ) );
当没有options的时候,可以强制’type’=>’select’使之呈现为下拉框。
1.echo $form->input( 'field', array( 'type'=>'select', 'label'=>false, 'div'=>false ) );
当然还可以指定’selected’=>options中的vlaue值,使select有默认值,这个函数也很不错,不用自己写循环了。 hoho~。官方还出了个专门用于select制定默认值的参数。 ‘default’=>value ,例如下例中的’selected’=>18就可以是’default’=>18,所以貌似这个参数也是个垃圾参数。
default可以用于radio、select。但是selected不可以用于radio,但是可以用于select和 Cakephp特有的时间类型。
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', '10'=>'唐山 ', '18'=& gt;'上海', '30'=>'美国' ), 'selected'=>18, 'label'=>false, 'div'=>false ) );
官方对于select还有个垃圾参数选项,叫做empty。用于设置每个select的最开始的那个“请选择”的空值的option,但是完全可以通过设置options的第一个值为”=>’请选择’来达到同样的效果,并且官方提供的empty选项还会替换options中的值为空的 option,如:
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', ''=>'请选择', '10'=>'唐山', '18'=>'上海', '30'=>'美国' ), 'selected'=>18, 'label'=>false, 'div'=>false, 'empty'=>'chooseone' ));
<select name="data[field]" id="field"> <option value="5"> 北京</option> <option value="">chooseone</option> <option value="10">唐山</option> <option value="18" selected="selected">上海</option> <option value="30">美国</option> </select>
2.7、单选框radio
单选框radio和select的写法基本上一致,就是type=‘radio’就行了。所有属性几乎一致。
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', '10'=>'唐山', '18'=>'上海', '30'=>'美国' ), 'type'=>'radio', 'default'=>10, 'legend'=>false, 'div'=>false, 'onchange'=>'javascript:alert(this.value)' ) );
和select相比,radio能使用default,不能使用selected、multiple、empty。而且对于radio,label 一定不要false掉,label在选择东西的时候还是很有用途的。
对于“legend”选项,当不设为false的时候会多个<fieldset><legend>Field</legend>……</field>出来,很是令人崩溃。
2.8、多选框checkbox
多选框和其他的东东很不一样,居然不是通过设置type来获得的,居然是通过设置select的multiple属性来获得的。而且最终出来的代码也不是很理想,有着多余的div,并且js事件也无法获得。所以到时候也许需要对应的css和js进行控制了。
echo $form->input( 'field', array( 'options' => array( '5'=>'北京', '10'=>'唐山', '18'=>'上海', '30'=>'美国' ), 'type'=>'select', 'multiple'=>'checkbox', 'default'=>array("5","18"), 'label'=>false, 'div'=>false ) );
<input type="hidden" name="data[field]" value="" /> <div class="checkbox"> <input type="checkbox" name="data[field][]" checked="checked" value="5" id="Field5" /> <label for="Field5" class="selected">北京</label> </div> <div class="checkbox"> <input type="checkbox" name="data[field][]" value="10" id="Field10" /> <label for="Field10">唐山</label> </div> <div class="checkbox"> <input type="checkbox" name="data[field][]" checked="checked" value="18" id="Field18" /> <label for="Field18" class="selected">上海</label></div> <div class="checkbox"> <input type="checkbox" name="data[field][]" value="30" id="Field30" /> <label for="Field30">美国</label> </div>
而且会生成个多余的hidden东东,很奇怪的说。
2.9、隐藏域hidden
echo $form->input( '', array( 'type'=>'hidden', 'id'=>'test_id', 'name'=>'test_name', 'value'=>'test_value', 'label'=>false, 'div'=>false ) );
<input type="hidden" name="test_name" id="test_id" value="test_value" />
2.10、提交按钮submit
echo $form->submit('提交',array("div"=>false));
<input type="submit" value="提交" />
图像组成的submit
echo $form->button('',array('type'=>'image','src'=>'test.jpg'));
<input type="image" value="" src="test.jpg" />
普通按钮button
echo $form->button('按钮',array('class'=>'class_name'));
<input type="button" value="按钮" class="class_name" />
发表评论
-
MAC 安装php+nginx支持oci8等
2015-07-15 10:41 14741. 安装 php brew install php55 ... -
浏览器自动识别编码问题
2012-06-27 17:03 861由于web应用页面编码使用的gbk,但web服务器php的编码 ... -
PHP PACK UNPACK用法
2011-01-25 10:02 1585Pack 与unpack使用说明: ... -
百万级PHP网站架构方案
2010-11-04 18:09 1394在了解过世界最大的PHP ... -
PHP unzip 解压文件
2010-11-03 14:19 9541.unzip <?php $zip ... -
Php防止重复提交问题总结
2010-10-28 14:46 2573用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一 ... -
借用Google API 写一个查看天气预报的类
2010-10-28 13:09 996<? //- Describe: //- Autho ... -
php当前日期的加减操作
2010-10-26 09:29 1961<?php echo "Today:" ... -
PHP 的命令行模式
2010-09-17 10:31 1242PHP 的命令行模式 从版本 4.3.0 开始,PHP 提供 ... -
php soap 错误处理(精简版)
2010-09-17 10:27 19761.使用soap $client = &qu ... -
php soap client 链接问题
2010-09-16 16:04 23401.说明 php 调用jira的soap接口代码: ... -
Handling data in a PHP JSON Object
2010-09-08 14:16 1150Trends data from Twitter Search ... -
php 和 js 保留2位小数
2010-08-24 10:25 27931.php保留两位小数例子 四舍五入 A.nu ... -
zlib 文件操作
2010-08-23 13:44 994<?php //Extracting the co ... -
php pathinfo()函数用法详解
2010-08-23 12:59 1205摘要: php pathinfo()函数用法详解,pathin ... -
Date and Time in PHP
2010-08-18 13:39 856Displaying the current date and ... -
Php学习《五》 ------ 基本知识摘录
2010-08-17 15:31 9551.php中文字符串长度及定长截取问题 使用str_len( ... -
Php学习《四》 ------ 文件上传
2010-08-03 17:29 799通过 PHP,可以把文件上传到服务器。 创建一个文件上传表单 ... -
Php学习《三》 ------ 文件处理
2010-08-03 17:16 793fopen() 函数用于在 PHP 中 ... -
Php学习《二》 ------循环
2010-08-03 17:09 801循环 在您编写代码时,您经常需要让相同的代码块运行很多次。您 ...
相关推荐
开发者可以通过安装和配置插件来快速增加新特性。 **缓存(Caching)** 为了提高性能,CakePHP 提供了多种缓存策略,包括文件系统、内存(如APC)和数据库等。 **总结** CakePHP 1.2 API 中文文档覆盖了框架的...
7. **表单处理**:介绍如何创建和验证表单数据,以及如何利用CakePHP的FormHelper来生成HTML表单元素。 8. **组件(Component)**:组件是一组可重用的控制器逻辑,手册会教你如何创建和使用它们来扩展控制器功能。...
Controller部分,CakePHP提供了一套强大的组件(Component)和行为(Behavior)系统,组件可以看作是可复用的功能模块,而行为则是对Model的扩展,增加了数据操作的灵活性。例如,AuthComponent用于用户认证,...
4. **辅助方法和组件**:CakePHP提供了许多内置的辅助方法和组件,如FormHelper和HtmlHelper,它们能帮助开发者快速生成HTML表单和元素,减少重复代码。 5. **验证**:CakePHP内置了强大的验证机制,可以方便地对...
API中包含关于FormHelper的使用,帮助开发者轻松创建和处理表单。 6. 测试与调试:CakePHP 1.2提供了内置的测试框架和调试工具,如PHPUnit集成,方便开发者进行单元测试和功能测试,以及DebugKit,用于实时查看应用...
- 使用FormHelper生成表单元素,并提交到相应的Controller。 - 在Controller的对应方法中,接收到POST数据后,使用ORM(对象关系映射)的save()方法将数据保存到数据库。 2. **读取(Read)**: - Controller...
本节简要介绍了本书的结构和覆盖的主题,包括安装CakePHP、设置本地开发环境、运行MySQL数据库、使用PHPMyAdmin和其他MySQL管理工具、搭建第一个CakePHP应用以及如何修改和扩展应用的设计。 #### 七、安装CakePHP ...
学习视图助手(Helper)的使用,如 FormHelper 和 HtmlHelper,以方便生成表单和HTML元素。 6. **蛋糕哲学**:理解 CakePHP 的“约定优于配置”原则,这使得项目具有良好的结构和可维护性。学习 CakePHP 的命名规范...
蛋糕PHP的ORM(对象关系映射)系统,如ActiveRecord,允许开发者用面向对象的方式来操作数据库,无需编写SQL语句。了解模型如何与数据库表关联,以及如何执行CRUD(创建、读取、更新、删除)操作,是蛋糕PHP的核心...
此外,CakePHP 的助手函数如 htmlHelper、formHelper 等,为创建 HTML 元素和表单提供了极大的便利。 控制器层是 MVC 三者中核心的协调者,它负责接收 HTTP 请求,处理数据,然后调度模型和视图。在 CakePHP 2.1.2 ...
《CakePHP手册(Doc打印版)》是一份详尽的开发者指南,专为那些使用CakePHP框架进行Web应用开发的专业人士准备。CakePHP是一个基于MVC(Model-View-Controller)设计模式的开源PHP框架,它旨在简化开发过程,提高...
通过`FormHelper`,你可以方便地创建表单元素,并利用`validate`功能进行客户端和服务器端的验证。 ### 8. 模板和布局 模板用于显示特定页面内容,布局则包裹整个应用程序的外观。布局文件通常为`Layout/default....
CakePHP的`FormHelper`和`Validator`类可以帮助我们在客户端和服务器端进行表单验证,显示错误消息。 9. **CRUD操作**:用户管理通常还包括用户数据的创建、读取、更新和删除(CRUD)。使用CakePHP的`Crud`组件或...
1. **表单设计**:使用视图助手,可以快速创建Bootstrap4风格的表单,如`FormHelper::input()`可以生成带有Bootstrap4样式的输入字段。 2. **导航栏构建**:通过`NavbarHelper`,可以方便地创建响应式的Bootstrap4...
CakePHP 2.x 的安装通常通过Composer完成,开发者可以使用Git克隆仓库或下载ZIP文件。在配置阶段,需要修改app/Config/core.php 和 app/Config/config.php 文件以设定数据库连接、错误处理和应用行为。 2. MVC架构...
6. **助手(Helpers)**:CakePHP提供了一系列助手类,如HtmlHelper和FormHelper,帮助开发者快速创建HTML元素和表单。 7. **安全**:掌握CakePHP的安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防御...
蛋糕PHP 3支持自动验证和处理表单数据,通过`FormHelper`可以在视图中轻松创建表单,而控制器则负责处理提交的数据。 11. **错误处理和调试** 蛋糕PHP 3提供了一个强大的错误和异常处理机制,以及详细的日志记录...
- **辅助类**:为了简化视图层的操作,CakePHP引入了辅助类的概念,例如FormHelper和HtmlHelper等,这些辅助类可以帮助开发者更方便地处理表单和HTML元素。 #### 五、编程应用逻辑 在本章节中,作者将详细讲解如何...