视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
案例分析PHP Web表单生成器
2020-11-02 18:45:51 责编:小采
文档


2. 需求分析

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

  • 使用数组保存表单的相关信息
  • 支持的表单项包括文本框、文本域、单选框、复选框和下拉列表5种类型
  • 保存每个表单项的标记、提示文本、属性、选项值、默认值等
  • 将功能封装成函数,根据传递的参数生成指定的表单
  • 数据的保存形式决定了程序实现的方式。
    因此,根据上述开发要求,可以将每个表单项作为一个数组元素,每个元素利用一个关联数组描述,分别为:标记tag、提示文本text、属性数组attr、选项数组option和默认值default。

    3.案例实现

    1.准备表单

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

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

    一个完整的表单是由表单域和表单控件组成的。其中,表单域由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方式)表示传输普通文本。
  • 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元素,判断是否是单选或多选
  • 若不是,则直接调用属性函数完成表单项的拼接
  • 若是,则通过遍历依次完成多个选项的拼接并返回
  • 4.表单的自动生成——拼接select元素

    实现思路

  • 拼接下拉列表的选项option
  • 完成select标记的完整拼接并返回
  • 5.表单的自动生成——拼接textarea元素

    实现思路

  • 拼接textarea元素的属性
  • 完整拼接textarea并返回
  • 下载本文
    显示全文
    专题