PHP表单处理的案例分析

news2024/11/30 10:43:19

目录

知识补充

实现过程

前端代码

后端代码

简单分析


知识补充

表单简介(来自Mr._Dang)

  action:提交的地址
  method:提交的方式
    get: 参数是在url中的,不安全,传输量比较少,不大于2KB。 默认是get
    post: 参数不在url中,相对比较安全。传输量没有限制。不过,服务器可能会对你传输的数据量进行限制。


input
  type:input元素的类型。会根据type的不同,呈现为不同的控件。
  name:提交的数据的名字
  
输入框
  type=text
  作用:创建一个允许用户输入的输入框。
  value:未输入之前的默认文本。
  placeholder:提示文本。
  maxlength:输入框最大输入字符长度。
  minlength:输入框最小的输入字符长度。
  autofocus:自动获取焦点   不需要书写属性值。
密码框
  password

单选
  radio
  属性:
    name:如果不设置name属性,浏览器不知道哪些单选框是一组,就不能起到单选的效果。我们需要给同一组的单选框添加一个相同的name属性值。
    checked:可以忽略属性值,表示当前单选默认选中。
    disabled 禁用 不仅仅是单选可用,别的input元素也可以使用。

多选
  checkbox
  name是必填项。而且同一组的多选框的name值必须相同。

按钮:
  value属性:按钮上的文字
  普通按钮
    button 配合js完成一些操作。
  提交按钮
    submit 将表单中的数据提交。
  重置按钮
    reset 重置表单中的数据

文件上传
  file
  文件上传时,需要在form表单中添加这样一个属性
        enctype="multipart/form-data"

label标签
  作用:为input元素添加标记。
    将label中的内容与input进行绑定,(input的id值),当鼠标点击label中的文本时,就会触发绑定的input元素。
  格式:
    <label for="要绑定的input元素的ID值">文本</label>

提交的数据形式: 键值对  =前面为键 =后面为值。
  account=张三四五六&sex=男

实现过程

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>validata</title>
    <style>
        #form{
            width: 600px;
            margin: 150px auto;
            padding: 10px;
            border: 1px solid #ddd;
        }
    </style>
    <!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <form id="form" action ="index.php" method="post">
        <div class="form-group">
          <label for="exampleInputEmail1">Email address</label>
          <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email" name="email">
        </div>
        <div class="form-group">
            <label for="exampleInputEmail1">Mobile</label>
            <input type="text" class="form-control" id="exampleInputEmail1" placeholder="Mobile" name="mobile">
          </div>
        <div class="form-group">
          <label for="exampleInputPassword1">Password</label>
          <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password" name="password">
        </div>
        <button type="submit" class="btn btn-default">提交</button>
      </form>
</body>
</html>

 

后端代码

<?php
$error=array();
if($_SERVER["REQUEST_METHOD"]==="POST")
{
if(empty($_POST["email"]))
{
    array_push($error,"注意,email为必填项");
}
else
{
    $email=checkValue($_POST["email"]);//规范处理
    if(!preg_match("/^\w+@\w+\.\w+$/",$email))
    array_push($error,"邮箱输入不合法");
}
   /* |w:数字 字母 下划线;
     +:可以有多个;
      ^:起始位置;
       $:结束位置;
    .:任意字符,需要转义一下
    \.:转义后为普通字符.
    \d:一个字符的范围[0-9]
    {n}:需要出现n个字符
    {n,}:需要出现n个及n个以上的字符

*/


if(empty($_POST["mobile"]))
{
    array_push($error,"注意,mobile为必填项");
}
else
{
    $mobile=checkValue($_POST["mobile"]);//规范处理
    if(!preg_match("/^1\d{10}$/",$mobile))
    array_push($error,"手机号输入不合法");
}
if(empty($_POST["password"]))
{
    array_push($error,"注意,password为必填项");
}
else
{
    $password=checkValue($_POST["password"]);//规范处理
    if(!preg_match("/^\w{6,}$/",$password))
    array_push($error,"密码输入不合法");
}
}
function checkValue($value)
{
$data=trim($value);//移除字符串两侧的空白字符
$data=htmlspecialchars($data);//把预定义的字符转化为html的实体(&,",',<,>)
return $data;
}
$message=<<<EOT
<script>alert('$error[0]');history.go(-1);</script>
EOT;
if(count($error)>0)
{
    echo $message;
}
else{
    echo "注册成功";
}
?>

简单分析

前端分析

采取css模板实现了通过提交邮箱、手机号和密码进行登录的功能,此时前端通过type类型先对邮箱进行简单处理,发现需要输入@以及@后必须有内容,如图

 

后端分析

先确定请求方式为前端设置好的post并用empty函数判断输入是否为空,然后对输入的内容进行规范处理(trim去除两侧的空白字符,htmlspecialchars把预定义的字符转化为html的实体),再通过正则表达式判定输入的值是否合法,不合法则通过alert('$error[0]');history.go(-1)进行弹窗提示错误信息并返回上一级登录页面。

 正则表达式进行格式

   /* |w:数字 字母 下划线;
     +:可以有多个;
      ^:起始位置;
       $:结束位置;
    .:任意字符,需要转义一下
    \.:转义后为普通字符.
    \d:一个字符的范围[0-9]
    {n}:需要出现n个字符
    {n,}:需要出现n个及n个以上的字符

*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django的在线作业批改系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

[附源码]Python计算机毕业设计SSM力高灯饰线上交易平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

一言不合就重构

hello&#xff0c;大家好呀&#xff0c;我是小楼。 前段时间不是在忙么&#xff0c;忙的内容之一就是花了点时间重构了一个服务的健康检查组件&#xff0c;目前已经慢慢在灰度线上&#xff0c;本文就来分享下这次重构之旅&#xff0c;也算作个总结吧。 背景 服务健康检查简介…

短视频创作,变现的建议、变现方式和举例,建议收藏反复阅读-上

先说今天的纲要&#xff0c;有兴趣可以继续看下去&#xff0c;今天主要针对短视频变现这件事的讨论&#xff0c;有三个建议&#xff0c;①变现标准低、②变现天花板高、③可主动变现。 我们在选择变现形式的时候&#xff0c;尽可能满足这三个条件或其中两个。 中间我们再讨论下…

【LeetCode】895.最大频率栈

题目描述 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。void push(int val) 将一个整数 val 压入栈顶。int pop() 删除并返回堆栈中出现频率最高的元素。 如果出现…

【问题思考总结】NAT的公有地址怎么转换为私有地址?【MAC地址和IP地址的转换】

问题起源 在做一道题的时候&#xff0c;涉及到了由内网到外网再到内网时的IP地址转换。在外网的时候&#xff0c;答案说的是不能够用私有IP地址作为源IP地址&#xff0c;然后疑问产生了&#xff1a;如果不能用私有IP地址作为目的地址&#xff0c;他又怎么能够找到那个主机呢&a…

[附源码]Python计算机毕业设计SSM乐多多宠物店网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022年11月30日 Fuzzy C-Means学习笔记

​ Fuzzy C-Means 模糊c均值聚类&#xff0c;它的一大优势就是引入了一个隶属度的概念&#xff0c;没有对样本进行非黑即白的分类&#xff0c;而是分类的时候乘上隶属度&#xff0c;直白点说就是他和某个中心有多像&#xff0c;到底是40%像还是70%像。 ​ 参考&#xff1a;在众…

CF27E (2000) (反素数)

https://codeforces.com/contest/27/problem/E 反素数&#xff1a; 若N < 2 ^ 31 引理1&#xff1a; 1 ~ N 中的反素数&#xff0c;就是 1 ~ N中约数个数最多的数中 最小 的一个。 引理2&#xff1a; 1 ~ N 中任何数的不同质因子都不会超过 10 个且所有质因子的质数都不会超…

真题集P91---2018年计专真题

真题集P91---2018年计专真题三(2)自由树直径思路代码四思路代码五思路代码三(2)自由树直径 思路 1、吉大出的题目&#xff0c;没规定是否是有权图&#xff0c;以及是否是有向图&#xff0c;所以这里默认&#xff0c;权值是1的无向图。 1、如果权值都一样&#xff0c;用邻接表存…

[附源码]Python计算机毕业设计Django的疫苗接种管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

AI绘画怎么操作

ai绘画的4个途径 1.小程序意间ai绘画 需要排队可以多用一点积分换vip通道会快一点,还有就是凌晨两三点的时候快 我一般是图5那样的参数,横图4:3 竖图3:4 2.draft.art网站AI绘画 直接用手机浏览器搜就可以,搜出来就是图6那样的界面点下面蓝色按钮,我是用的🍎自带的浏览…

精品基于JAVA的医院挂号系统的设计与实现SSM

《基于JAVA的医院挂号系统的设计与实现》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 前端技术&#xff1a;JavaScript、VUE.js&#xff08;2.X&#xff09;、css3 JDK版…

66 - C++中的类型识别

---- 整理自狄泰软件唐佐林老师课程 1. 类型识别 在面向对象中可能出现下面的情况&#xff1a; 基类指针指向子类对象基类引用成为子类对象的别名 这个时候就会出现问题&#xff1a;&#xff08;由于 赋值兼容性原则 &#xff09;没法通过一个父类指针判断指向的是父类对象还…

ZMQ之多线程编程

使用ZMQ进行多线程编程&#xff08;MT编程&#xff09;将会是一种享受。在多线程中使用ZMQ套接字时&#xff0c;你不需要考虑额外的东西&#xff0c;让它们自如地运作就好。 使用ZMQ进行多线程编程时&#xff0c;不需要考虑互斥、锁、或其他并发程序中要考虑的因素&#xff0c;…

安卓手机配哪款蓝牙耳机?最适合安卓手机的蓝牙耳机

蓝牙耳机火了之后&#xff0c;各个品牌就开始涌现&#xff0c;就连手机厂家也开始涉足蓝牙耳机领域。安卓手机这几年也是受到很多人的喜爱&#xff0c;那么安卓手机应该怎么选择蓝牙耳机呢&#xff1f;下面我们一起来看看当前值得入手的蓝牙耳机吧&#xff01; 第一款&#xf…

文章向大家介绍安卓逆向,解决app抓包抓不到的问题,主要包括安卓逆向,解决app抓包抓不到的问题使用实例、应用技巧

本文章向大家介绍安卓逆向&#xff0c;解决app抓包抓不到的问题&#xff0c;主要包括安卓逆向&#xff0c;解决app抓包抓不到的问题使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参考一下。 有时候app抓不到包&…

透视金融科技Q3财报:规模效应显现,深化小微服务覆盖面

面对复杂的经济环境&#xff0c;助力实体经济发展、服务小微企业仍是金融领域的挑战和机遇。 近日&#xff0c;在美上市的多家金融科技公司先后公布了截至2022年9月30日的2022年第三季度财报。在国内疫情多点散发、经济复苏承压背景下&#xff0c;金融科技企业们仍展现了强大的…

计算机毕业设计之java+ssm美味厨房点餐系统

项目介绍 本美味厨房点餐管理系统是针对目前美味厨房点餐管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的美味厨房点餐管理系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;…

HTML+CSS项目案例

文章目录1、成绩表2、青蒿素3、静夜思4、毕业季再见青春5、个人信息6、咖啡1、成绩表 案例演示&#xff1a;&#xff08;table、tr、td、th的练习&#xff09; 实现代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8">&…