web表单生成

web表单生成

在项目的实际开发中,经常需要设计各种各样表单。直接编写HTML表单虽然简单,但修改、维护相对麻烦。
因此,可以利用PHP实现一个Web表单生成器,使其可以根据具体的需求定制不同功能的表单。具体实现需求如下:

  • 使用多维数组保存表单的相关信息
  • 支持的表单项包括文本框、文本域、单选框、复选框和下拉列表5种类型
  • 保存每个表单项的标记、提示文本、属性、选项值、默认值等
  • 将功能封装成函数,根据传递的参数生成指定的表单
    数据的保存形式决定了程序实现的方式。
    因此,根据上述开发要求,可以将每个表单项作为一个数组元素,每个元素利用一个关联数组描述,分别为:标记tag、提示文本text、属性数组attr、选项数组option和默认值default。
    在这里插入图片描述
    表单的主要功能:就是在网页上用于输入信息的区域,收集用户输入的信息,并将其提交给后端的服务器进行处理,实现用户与服务器的交互。
    一个完整的表单是由表单域和表单控件组成的。其中,表单域由form标记定义,用于实现用户信息的收集和传递。
<form action="form.php" method="post" enctype="multipart/form-data">
    <!-- 各种表单控件 -->
</form>

注:“ ”是HTML的注释标记,用于解释和说明。
在这里插入图片描述
action属性的值可以是绝对路径、相对路径,若省略该属性则表示提交给当前文件进行处理。
GET方式传递的表单在URL地址栏中可见。
相比GET方式,POST方式提交的数据是不可见的,在交互时相对安全。因此,通常情况下使用POST方式提交表单数据。
enctype属性的默认值为application/x-www-form-urlencoded,表示在发送表单数据前编码所有字符。除此之外还可以设置为multipart/form-data(POST方式)表示不进行字符编码,尤其是含有文件上传的表单必须使用该值;设置为text/plain(POST方式)表示传输普通文本。

<input type="text" name="user" value="test">	<!-- 文本框 -->
<input type="password" name="pwd" value="">	<!-- 密码框 -->
<input type="file" name="upload">         		<!-- 文件上传域 -->
<input type="hidden" name="id" value="2"> 	<!-- 隐藏域 -->
<input type="reset"  value="重置">         		<!-- 重置按钮 -->
<input type="submit" value="提交">        		<!-- 提交按钮 -->
  • type属性设置不同的值,即可得到不同的表单控件
  • name属性用于指定控件的名称,用以区分表单中多个相同的控件
  • value属性用于设置表单控件的默认值
<!-- 单选框 -->
<input type="radio" name="gender" value="m" checked> 男
<input type="radio" name="gender" value="w"> 女
<!-- 复选框 -->
<input type="checkbox" name="hobby[]" value="swimming"> 游泳
<input type="checkbox" name="hobby[]" value="reading"> 读书
<input type="checkbox" name="hobby[]" value="running"> 跑步
  • checked属性用于设置默认选中项
<textarea name="introduce" cols="5" rows="10">
<!-- 文本内容 -->
</textarea>
  • textarea控件适用于自我评价、评论等可能需要输入大量信息的功能
  • 属性cols和rows用于定义文本域的高度和宽度
<select name="area">
    <option selected>--请选择--</option>
    <option value="Beijing">北京</option>
    <option value="Shenzhen">深圳</option>
    <option value="Shanghai">上海</option>
</select>
  • select是定义下拉列表的标记
  • option是定义下拉列表中具体选项的标记
  • selected属性用于设置默认选中项

在编写表单控件时,为了提供更好的用户体验,经常将input控件与label标记联合使用,以扩大控件的选择范围。
根据案例的需求分析可知,表单项的相关数据统一保存到一个多维数组中。其中,利用数字键名区分不同的表单项,每个表单项又是一个二维的关联数组。

$elements = [
    0 => [],		// 第1个表单项数组
    1 => [],		// 第2个表单项数组
];
0 => [
    'tag' => 'input',
    'text' => '姓  名:',
    'attr' => ['type' => 'text', 'name' => 'user']
],
3 => [
    'tag' => 'input',
    'text' => '性  别:',
    'attr' => ['type' => 'radio', 'name' => 'gender'],
    'option' => ['m' => '男', 'w' => '女'],
    'default' => 'm'
 ],
4 => [
    'tag' => 'input',
    'text' => '爱  好:',
    'attr' => ['type' => 'checkbox', 'name' => 'hobby[]'],
    'option' => ['swimming' => '游泳', 'reading' => '读书', 'running' => '跑步'],
    'default' => ['swimming', 'reading']
],
5 => [
    'tag' => 'select',
    'text' => '住  址:',
    'attr' => ['name' => 'area'],
    'option' => ['' => '--请选择--', 'BJ'=>'北京', 'SH'=>'上海', 'SZ'=>'深圳']
],
6 => [
    'tag' => 'textarea',
    'text' => '自我介绍:',
    'attr' => ['name' => 'introduce', 'cols' => 50, 'rows' => 5]
],
7 => [
    'tag' => 'input',
    'attr' => ['type' => 'submit', 'value' => '提交']
]

实现思路

  • 按照指定的格式保存待生成表单的数据,如$elements数组
  • 自定义表单生成函数generate(),将函数的返回值输出到对应的HTML表单中
  • 为了方便处理用户提交的数据,将$elements中的每个表单项与指定的数组进行合并,使得每个表单项都含有键为tag、text、attr、option和default五个元素,且顺序相同。
  • 根据tag值,分别调用前缀为“generate_”的函数进行表单项的拼接
  • 每个表单项占据一行,并返回拼接好的表单
  • 定义函数generate_attr($attr, $items = ‘’)用于完成表单元素属性的拼接
  • $attr数组中元素的键为属性名称,元素的值为属性的值
  • 通过遍历完成属性与$items的拼接并返回,如type=“radio” name=“gender”
  • 根据是否含有option元素,判断是否是单选或多选
  • 若不是,则直接调用属性函数完成表单项的拼接
  • 若是,则通过遍历依次完成多个选项的拼接并返回
  • 拼接下拉列表的选项option
  • 完成select标记的完整拼接并返回
  • 拼接textarea元素的属性
  • 完整拼接textarea并返回
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值