1.实例:

2. 需求分析

在项目的实际开发中,经常需要设计各种各样表单。直接编写HTML表单虽然简单,但修改、维护相对麻烦。

因此,可以利用PHP实现一个Web表单生成器,使其可以根据具体的需求定制不同功能的表单。具体实现需求如下:

使用多维数组保存表单的相关信息

支持的表单项包括文本框、文本域、单选框、复选框和下拉列表5种类型

保存每个表单项的标记、提示文本、属性、选项值、默认值等

将功能封装成函数,根据传递的参数生成指定的表单

数据的保存形式决定了程序实现的方式。

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

3.案例实现

1.准备表单

表单的主要功能:就是在网页上用于输入信息的区域,收集用户输入的信息,并将其提交给后端的服务器进行处理,实现用户与服务器的交互。

例如:购物结算、信息搜索等都是通过表单实现的。

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

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

type属性设置不同的值,即可得到不同的表单控件

name属性用于指定控件的名称,用以区分表单中多个相同的控件

value属性用于设置表单控件的默认值

//input控件

游泳

读书

跑步

checked属性用于设置默认选中项

//textarea控件

textarea控件适用于自我评价、评论等可能需要输入大量信息的功能

属性cols和rows用于定义文本域的高度和宽度

//select控件

--请选择--

北京

深圳

上海

select是定义下拉列表的标记

option是定义下拉列表中具体选项的标记

selected属性用于设置默认选中项

4.准备表单—label标记

在编写表单控件时,为了提供更好的用户体验,经常将input控件与label标记联合使用,以扩大控件的选择范围。

例如,选择性别时,单击提示文字“男”或“女”,也可选中相应的单选按钮。

使用label标记包裹单选按钮和提示文本,即可实现单击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元素,判断是否是单选或多选

若不是,则直接调用属性函数完成表单项的拼接

若是,则通过遍历依次完成多个选项的拼接并返回

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

实现思路

拼接下拉列表的选项option

完成select标记的完整拼接并返回

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

实现思路

拼接textarea元素的属性

完整拼接textarea并返回

用php实现一个简易的web表单生成器,PHP—Web表单生成器相关推荐

  1. 用php实现一个简易的web表单生成器,网络编程PHP Web表单生成器案例分析

    本文实例讲述了PHP Web表单生成器.分享给大家供大家参考,具体如下: 1.实例: 2. 需求分析 在项目的实际开发中,经常需要设计各种各样表单.直接编写HTML表单虽然简单,但修改.维护相对麻烦. ...

  2. 一个简易实用的web权限管理模块的应用与实现

    本文介绍一个简易实用的web权限管理模块的应用与实现. 先介绍数据模型和应用界面,后继对实现细节做选择性阐述. 数据表关系如下: 该图标明了登陆用户.角色.部门(机构).用户组.角色和模块功能之间的关 ...

  3. 如何搭建一个简易的Web框架

    Web框架本质 什么是Web框架, 如何自己搭建一个简易的Web框架?其实, 只要了解了HTTP协议, 这些问题将引刃而解. 简单的理解:  所有的Web应用本质上就是一个socket服务端, 而用户 ...

  4. PHP服务器脚本实例,Shell脚本实现的一个简易Web服务器例子分享_linux shell

    这篇文章主要介绍了Shell脚本实现的一个简易Web服务器例子分享,本文实现的Web服务器非常简单实用,可以在你不想安装nginx.apache等大型WEB服务器时使用,需要的朋友可以参考下 假设你想 ...

  5. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...

    [实例简介] JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统 [实例截图] [核心代码] f48fd612-281d-454e-97d3-20c8f775879f └── Prod ...

  6. python建立一个简单的server_使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  7. sql 2008 每次打开一个表都要登录_如何实现一个简易的orm

    什么是orm? ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写.不负责任的总结就是 ...

  8. 用mysql + node搭建一个简易工作列表网站

    初衷 增删改查是web开发最常见的操作,那么接下来这篇文章将演示如何用node + mysql做一个简易的网站. 需要的知识 本教程不涉及express等web框架,但请确保您对node + mysq ...

  9. Spring Security和 JWT两大利器来打造一个简易的权限系统。

    写在前面 关于 Spring Security Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求.在Java EE领域,成熟的安全框架解决方案一般有 A ...

最新文章

  1. 【Pyhon 3】: 170104:优品课堂: GUI -tkinter
  2. 云计算的服务模型 SaaS PaaS IaaS
  3. mix2s 升级android p,小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?...
  4. 没人脉,没资源,没背景的人,最好的出路是什么?
  5. Nitro-LM保护Flex/AIR应用的安全
  6. php 中 的含义
  7. hdfs居然无法正常停止
  8. c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
  9. 计算机应用基础教程清华大学,清华大学出版社-图书详情-《大学计算机应用基础教程(第3版)》...
  10. 对象转为json形式
  11. 随机生成游戏建筑物的算法
  12. 哈希表,设计哈希集合,
  13. 学计算机平面设计的基础知识,新手学习平面设计2要点_计算机平面设计
  14. Python 英文的月份转数字及数字转英文
  15. SparkConf 配置的概念和用法
  16. 图解ARP协议(三)ARP防御篇-如何揪出内鬼并优雅的还手
  17. 家庭理财属于计算机的什么应用领域,家庭理财的管理信息系统
  18. LTE系统名词解释及上下行过程
  19. 哪些你不知道的神回复?
  20. JavaScript二级联动

热门文章

  1. C# WinForm 技巧十: 开发工具
  2. CentOS上使用libtld
  3. asp.net的一个不错日期控件
  4. Silverlight Downloads
  5. CDN视频存储解决方案
  6. 什么是SD-Branch的应用特性?—Vecloud微云
  7. 写在树莓派专栏的开篇
  8. 通过DLL使两个工程公用部分代码
  9. Anaconda 环境下 对Tushare进行测试
  10. github创建项目,并提交本地文件