PHP Web表单生成器案例分析


Posted in PHP onJune 02, 2020

本文实例讲述了PHP Web表单生成器。分享给大家供大家参考,具体如下:

1.实例:

PHP Web表单生成器案例分析

2. 需求分析

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

  • 使用多维数组保存表单的相关信息
  • 支持的表单项包括文本框、文本域、单选框、复选框和下拉列表5种类型
  • 保存每个表单项的标记、提示文本、属性、选项值、默认值等
  • 将功能封装成函数,根据传递的参数生成指定的表单

数据的保存形式决定了程序实现的方式。
因此,根据上述开发要求,可以将每个表单项作为一个数组元素,每个元素利用一个关联数组描述,分别为:标记tag、提示文本text、属性数组attr、选项数组option和默认值default。

PHP Web表单生成器案例分析

3.案例实现

1.准备表单

表单的主要功能:就是在网页上用于输入信息的区域,收集用户输入的信息,并将其提交给后端的服务器进行处理,实现用户与服务器的交互。
例如:购物结算、信息搜索等都是通过表单实现的。

2.准备表单——创建表单

一个完整的表单是由表单域和表单控件组成的。其中,表单域由form标记定义,用于实现用户信息的收集和传递。

<form action="form.php" method="post" enctype="multipart/form-data">
  <!-- 各种表单控件 -->
</form>

“<!-- ?>”是HTML的注释标记,用于解释和说明。

PHP Web表单生成器案例分析

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

3.准备表单—表单控件

//input控件
<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控件
<!-- 单选框 -->
<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控件
<textarea name="introduce" cols="5" rows="10">
<!-- 文本内容 -->
</textarea>
  • textarea控件适用于自我评价、评论等可能需要输入大量信息的功能
  • 属性cols和rows用于定义文本域的高度和宽度
//select控件
<select name="area">
  <option selected>--请选择--</option>
  <option value="Beijing">北京</option>
  <option value="Shenzhen">深圳</option>
  <option value="Shanghai">上海</option>
</select>
  • select是定义下拉列表的标记
  • option是定义下拉列表中具体选项的标记
  • selected属性用于设置默认选中项

4.准备表单—label标记

在编写表单控件时,为了提供更好的用户体验,经常将input控件与label标记联合使用,以扩大控件的选择范围。
例如,选择性别时,单击提示文字“男”或“女”,也可选中相应的单选按钮。

使用label标记包裹单选按钮和提示文本,即可实现单击label标记里的内容时,相应的表单控件就会被选中。

<label><input type="radio" name="gender" value="m">男</label>
<label><input type="radio" name="gender" value="w">女</label>

5.多维数组

根据案例的需求分析可知,表单项的相关数据统一保存到一个多维数组中。其中,利用数字键名区分不同的表单项,每个表单项又是一个二维的关联数组。

// 利用多维数组保存表单元素
[
  0 => [],	// 表单项---单选按钮
  1 => [],	// 表单项
  2 => [],	// 表单项---文本框
  3 => [],	// 表单项
  ……
];
// 每个表单项的数组结构
0 => [
  'tag' => '', 	// 标记----input、textarea、select
  'text' => '', 	// 提示文本----label标签内显示的内容
  'attr' => [],	// 属性数组----表单元素的属性,如type
  'option' => [], 	// 选项数组----单选框或复选框中的每个选项
  'default' => ''	// 默认值----默认值
],
//准备表单数组
// $elements数组保存整个表单
$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'
 ],

option利用关联数组保存具体的单选项,键名m、w为单选框的value属性值,对应的值“男”、“女”为该单选项的提示信息
default的值为option关联数组中的一个键名,表示默认选中哪一项

//复选框
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' => '提交']
]

表单的自动生成

1.表单的自动生成——读取$elements数组

实现思路

  • 为了方便处理用户提交的数据,将$elements中的每个表单项与指定的数组进行合并,使得每个表单项都含有键为tag、text、attr、option和default五个元素,且顺序相同。
  • 根据tag值,分别调用前缀为“generate_”的函数进行表单项的拼接
  • 每个表单项占据一行,并返回拼接好的表单

2.表单的自动生成——拼接表单元素的属性

实现思路

  • 定义函数generate_attr($attr, $items = ‘')用于完成表单元素属性的拼接
  • $attr数组中元素的键为属性名称,元素的值为属性的值
  • 通过遍历完成属性与$items的拼接并返回,如type=“radio” name=“gender”

3.表单的自动生成——拼接input元素

实现思路

  • 根据是否含有option元素,判断是否是单选或多选
  • 若不是,则直接调用属性函数完成表单项的拼接
  • 若是,则通过遍历依次完成多个选项的拼接并返回
    PHP Web表单生成器案例分析

4.表单的自动生成——拼接select元素

实现思路

  • 拼接下拉列表的选项option
  • 完成select标记的完整拼接并返回PHP Web表单生成器案例分析

5.表单的自动生成——拼接textarea元素

实现思路

  • 拼接textarea元素的属性
  • 完整拼接textarea并返回
    PHP Web表单生成器案例分析

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
php 浮点数比较方法详解
May 05 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 #PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 #PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 #PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 #PHP
PHP实现本地图片转base64格式并上传
May 29 #PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 #PHP
php生成短网址/短链接原理和用法实例分析
May 29 #PHP
You might like
一篇不错的PHP基础学习笔记
2007/03/18 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
python实现rsa加密实例详解
2017/07/19 Python
python语言中with as的用法使用详解
2018/02/23 Python
详解Python3的TFTP文件传输
2018/06/26 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
python创建文本文件的简单方法
2020/08/30 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
入党自我鉴定范文
2013/10/04 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
一个都不能少观后感
2015/06/04 职场文书
食堂管理制度范本
2015/08/04 职场文书