PHP 登录注册附带邮箱手机号验证

2023-11-05

原创 请勿转载


前言

php简单的登录页面与注册页面(有邮箱手机号验证)
源码在github上:https://github.com/XYFAE/php-


一、配置数据库文件

导入数据库信息

<?php
//数据库信息
define('DB_HOST','localhost');//Mysql数据库服务器
define('DB_USER','root');//Mysql数据库用户名
define('DB_PASSWORD','666');//Mysql数据库密码
define('DB_DATABASE','userlogin');//Mysql数据库名
define('DB_PORT','3306');//Mysql数据库端口
?>

配置数据库使用函数

<?php

function Connect($host=DB_HOST,$user=DB_USER,$password=DB_PASSWORD,$database=DB_DATABASE,$port=DB_PORT){
	$link = @mysqli_connect($host, $user, $password, $database, $port);
	if(mysqli_connect_errno()){
		exit(mysqli_connect_error());
	}
	mysqli_set_charset($link,'utf8');
	return $link;
}
function Execute($link,$query){
	$result=mysqli_query($link,$query);
	if(mysqli_errno($link)){
		exit(mysqli_error($link));
	}
	return $result;
}
?>

二、登录注册代码段

1.登录

登录的代码段(login.php):

<?php
require_once 'dbconfig/mysql_PDO.php'; //导入上面写好的配置文件
require_once 'dbconfig/mysql.php';
$conn=Connect();
header('Content-type:text/html; charset=utf-8');
session_start();

if(isset($_POST['login'])){

    $username = trim($_POST['username']); 
    $password = trim($_POST['password']);

    if(($username == '') || ($password == '')){

        echo "用户名或密码不能为空,3秒后跳转到登录页面,请重新登录";
        header('refresh:3;url=login.html');
        exit;
    }
    $password = md5($password);
    $sql ="select * from users where users = '{$username}' and pass = '{$password}'";
    $exec = Execute($conn,$sql);
    //$result = mysqli_fetch_array($exec);
    if (mysqli_num_rows($exec) !== 1) {
        echo "<script>alert('账号或密码错误');</script>";
        header('refresh:0;url=login.html');
        exit;
    }

    $_SESSION['username'] = $username;
    $_SESSION['islogin'] = 1;
    echo "登录成功,3秒后跳转到个人中心,请稍等";
    header('refresh:3;url=index.php');
    exit;
    //$_SESSION['id'] = $result['id'];

    if ($_POST['remember'] == "yes") {
        setcookie('username', $username, time() + 7 * 24 * 60 * 60);
        setcookie('code', md5($username . md5($password)), time() + 7 * 24 * 60 * 60);
    }  else {
        // 没有勾选则删除Cookie
        setcookie('username', '', time() - 999);
        setcookie('code', '', time() - 999);
    } 
    

    header('location:index.php');

}

2.注册

注册代码段(register.php):

<?php
require_once 'dbconfig/mysql_PDO.php'; //导入上面写好的配置文件
require_once 'dbconfig/mysql.php';
$conn = Connect();
header('Content-type:text/html; charset=utf-8');
session_start();

if (isset($_POST['reg'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $rpassword = $_POST['rpassword'];
    $email = $_POST['email'];
    $phone = $_POST['phonenumber'];

    // 判断输入内容是否为空
    if (($username == '') || ($password == '') || ($rpassword == '') || ($phone == '')) {
        echo "<script>alert('用户名、密码、邮箱、手机号、不能为空,请重新注册')</script>";
        header('refresh:1;url=regi
        ster.html');
        exit;
    }
    //判断邮件是否合法&是否被注册
    if (preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $_POST['email'])) {
        $sql = "select * from users where email ='{$email}'";
        $exec = Execute($conn, $sql);
        if (mysqli_num_rows($exec) > 0) {
            echo "<script>alert('邮箱已被注册');</script>";
            header('refresh:1;url=register.html');
            exit;
        }
    } else {
        echo "<script>alert('邮箱格式不正确,请重新注册')</script>";
        header('refresh:1;url=register.html');
        exit;
    }

    //判断手机号是否合法&是否被注册
    if (preg_match("/^1[34578]\d{9}$/", $phone)) {
        $sql = "select * from users where phone='{$phone}'";
        $exec = Execute($conn, $sql);
        if (mysqli_num_rows($exec) > 0) {
            echo "<script>alert('手机号已被注册');</script>";
            header('refresh:1;url=register.html');
            exit;
        }
    } else {
        echo "<script>alert('手机号格式不正确,请重新注册')</script>";
        header('refresh:1;url=register.html');
        exit;
    }

    //验证两次密码是否一致
    if ($password != $rpassword) {
        echo "<script>alert('两次输入的密码不一致'</script>";
        header('refresh:1;url=register.html');
        exit;
    }
    //手机号验证
    function checkPhoneNumber($phone_number){
        //@2017-11-25 14:25:45 https://zhidao.baidu.com/question/1822455991691849548.html
        //中国联通号码:130、131、132、145(无线上网卡)、155、156、185(iPhone5上市后开放)、186、176(4G号段)、175(2015年9月10日正式启用,暂只对北京、上海和广东投放办理),166,146
        //中国移动号码:134、135、136、137、138、139、147(无线上网卡)、148、150、151、152、157、158、159、178、182、183、184、187、188、198
        //中国电信号码:133、153、180、181、189、177、173、149、199
        $g = "/^1[34578]\d{9}$/";
        $g2 = "/^19[89]\d{8}$/";
        $g3 = "/^166\d{8}$/";
        if(preg_match($g, $phone_number)){
            return true;
        }else  if(preg_match($g2, $phone_number)){
            return true;
        }else if(preg_match($g3, $phone_number)){
            return true;
        }
 
        return false;
    }
    if(checkPhoneNumber($phone)!==true){
        echo "<script>alert('手机号码格式不正确,请重新注册')</script>";
        header('refresh:1;url=register.html');
    }

    // 判断用户名是否存在
    $sql = "select * from users where users='{$username}'";
    $exec = Execute($conn, $sql);
    $pass = mysqli_fetch_row($exec);
    if ($pass) {
        echo "<srcipt>alert('用户已存在')</script>";
        header('refresh:1;url=register.html');
        exit;
    }

    // 创建用户
    $password = md5($password);
    $sql = "insert into users(users,pass,email,phone) values('{$username}','{$password}','{$email}','{$phone}')";
    $exec = Execute($conn, $sql);
    if ($exec) {
        echo "<script>alert('注册成功')</script>";
        header('refresh:1;url=index.php');
        $_SESSION['username'] = $username;
        $_SESSION['islogin'] = 1;
        exit;
    }else{
        echo "?";
    }


}

3.主页

主页代码段(index.php)

<?php
header('Content-type:text/html; charset=utf-8');
// 开启Session
session_start();

// 首先判断Cookie是否有记住了用户信息
if (isset($_COOKIE['username'])) {
    # 若记住了用户信息,则直接传给Session
    $_SESSION['username'] = $_COOKIE['username'];   
    $_SESSION['islogin'] = 1;
}
if (isset($_SESSION['islogin'])) {
    // 若已经登录
    echo "你好! " . $_SESSION['username'] . ' ,欢迎来到个人中心!<br>';
    echo "<a href='logout.php'>注销</a>";
} else {
    // 若没有登录
    echo "您还没有登录,请<a href='login.html'>登录</a>";
}

4.注销

<?php
header('Content-type:text/html; charset=utf-8');
// 注销后的操作
session_start();
// 清除Session
$username = $_SESSION['username']; //用于后面的提示信息
$_SESSION = array();
session_destroy();

// 清除Cookie
setcookie('username', '', time() - 999);
setcookie('code', '', time() - 999);

// 提示信息
echo "欢迎下次光临, " . $username . '<br>';
echo "<a href='login.html'>重新登录</a>";


总结

如果代码有问题 欢迎评论 ,所有代码都在github上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 登录注册附带邮箱手机号验证 的相关文章

  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • PHP 中给定日期的下一个工作日

    有人有一个 PHP 代码片段来计算给定日期的下一个工作日吗 例如 需要如何转换 YYYY MM DD 才能找到下一个工作日 例子 对于 03 04 2011 DD MM YYYY 下一个工作日是 04 04 2011 对于 2011 年 4
  • Stripe 支付网关使用 PayumBundle 创建定期付款

    我在用支付包 https github com Payum PayumBundle将 Stripe 支付网关集成到我的 symfony2 应用程序中 我可以创建成功的直接付款 但无法创建定期付款 因为捆绑包的文档非常差 我的问题是如何使用
  • mongodb从不同数据库中选择

    我有大约 200 个 mongodb 数据库 每个数据库都有一个名为 Group 的集合 在该集合中有一个名为 meldingId 的字段 是否可以进行一个 mongodb 查询来查找不同数据库中的所有值 我设法通过 selectDB da
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • 在 PHP 中重新定义常量

    是否可以在 php 中重新定义由define功能 我有一个包含多个常量的类 其中包含用户数据 我正在尝试为多个用户使用该类 define ALLEGRO ID id define ALLEGRO LOGIN login define ALL
  • 简单搜索:使用 CodeIgniter 将表单变量传递到 URI

    我的每个页面上都有一个搜索表单 如果我使用表单助手 它默认为 POST 我希望搜索词显示在 URI 中 http example com search KEYWORD 我已经在谷歌上搜索了大约一个小时 但没有结果 我只找到了有关如何进行的文
  • 在我的 php 网络服务器内副本中启用 mysqli

    正如这里所讨论的 mysqli 直接运行时有效 但通过 js ajax 运行时无效 https stackoverflow com questions 31523601 mysqli works when run directly but
  • 获取特定月份/年份的第一天

    有没有比以下更好的方法返回特定月份 年份的第一天的日期 month date m year date Y from date Y m d mktime 0 0 0 month 1 year 这在计算上并不完全优雅 但我喜欢它 因为它非常可读
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • 自动生成PHP代码的策略?

    我正在开发一个框架 在后端创建 ER 图后 该框架可以动态地对自身的各个部分进行编程 作为一名 PHP 新手 我想知道是否还有比打开一个纯 xyz php 文本文件然后将动态生成的代码添加到该文件更奇特的事情 是的 尝试一下Zend Cod
  • NetBeans 代码模板 ${date}?

    我在 Eclipse 中有这个代码模板 自 日期 起 当输入时我得到这样的东西 自2009年8月4日起 但是当我添加相同的模板时 自 日期 起 到 NetBeans 它输出 自日期以来 有人可以帮忙吗 还没有答案吗 这在 Netbeans
  • Laravel 计划命令一旦启动就停止?

    我已经为 laravel 5 1 项目设置了预定命令 它有效 命令已经启动 但愚蠢的是我没有考虑如何停止它 通常您不想停止它 但该命令正在向数据库表中插入近 50 万行 而我只是想确保我可以在不登录服务器的情况下启动它 显然我需要在某个时候
  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de

随机推荐

  • AMR 文件解析及编解码流程

    CONTENT AMR简介 AMR 话音质量评定 AMR 文件结构解析 AMR 帧结构解析 AMR 帧读取算法 AMR 解码原理及流程 AMR 模式选择自适应机制 一 AMR 简介 基于新的网络和新的要求 无论是从节省传输频带资源 还是保持
  • Java学习之线程安全问题,关于synchronized 和 Lock 的使用

    1 Lock 解决线程安全问题的方式三 Lock锁 JDK5 0新加 synchronized 与 Lock的区别 相同点 都是解决线程的安全问题 不同点 1 Lock是显示锁 手动开启和关闭锁 synchronized是隐式锁 出了 作用
  • 智能算法系列之遗传算法

    本博客封面由ChatGPT Midjourney共同创作而成 文章目录 前言 1 算法思想 2 细节梳理 2 1 DAN编码 2 2 种群初始化及超参选择 2 3 适应度函数 2 4 选择 交叉 交配 与变异 2 5 终止条件 3 算法实现
  • MDK 出现#68-D: integer conversion resulted in a change of sign

    出现这种情况 原因如下 1 出现了无符号转换成有符号数 但是数据的最高位是符号位 可能会导致数字的值突变 2 有符号数被转换成了无符号数 经常在代码中会定义状态 错误的宏定义 出现 1等等负数 然而程序的返回值类型是 uint8 t uin
  • mfc 窗口初始化以及销毁过程

    1 模式对话框的创建过程 1 DoModal 重载函数 重载DoModal 成员函数 2 PreSubclassWindow 重载函数 允许首先子分类一个窗口 3 OnCreate 消息响应函数 响应WM CREATE消息 发送此消息以告诉
  • 机器学习实战 决策树(附数据集)

    运行环境 Anaconda Jupyter Notebook Python版本为 3 6 6 数据集 lense txt 提取码 9wsp 1 决策树 决策树也是最经常使用的数据挖掘算法 长方形代表判断模块 decision block 椭
  • 网络安全实验室4.注入关

    4 注入关 1 最简单的SQL注入 url http lab1 xseclab com sqli2 3265b4852c13383560327d1c31550b60 index php 查看源代码 登录名为admin 最简单的SQL注入 登
  • Could not autowire. No beans of 'OrderService' type found. less... (Ctrl+F1) Inspection info:Checks

    解决方法 步骤如下 把最后一个 去掉 点击ok就好了 当然还有一点就是 sevice类的前面加上 service注解
  • BRAM资源不够用?不怕!这里有FPGA BRAM省资源小秘招!

    FPGA的BRAM和LUT等资源都是有限的 在FPGA开发过程中 可能经常遇到BRAM或者LUT资源不够用的情况 一般建议BRAM和LUT资源的消耗不要超过80 当然高端一点的FPGA芯片也可以放宽到90 超过这个限制 可能就会出现时序违例
  • wifi中断攻击

    前言 wifi攻击包括wifi中断攻击 wifi密码爆破 wifi钓鱼等 本文章持续更新以上内容 先以wifi中断攻击为始 硬件为ESP8266 还买了一个无线网卡用作后续wifi密码爆破 网上某宝十几块钱就能玩 我买的是带Micro接口
  • Git的简述

    Git 文章目录 Git Git概述 版本控制工具 集中式管理控制工具 分步式管理控制工具 控制机制 Git和代码托管中心 安装Git软件 Git常用命令 Git概述 Git是一个免费的 开源的分步式版本控制系统 可以快速的处理从小型到大型
  • 输入一个url会发生什么事情?

    输入一个url会发生什么事情 1 输入解析 1 1 如果输入的是非url结构的字符串 则会使用默认浏览器的搜多引擎搜索这个字符串 1 2如果输入是url结构的字符串 url将通过进程建通信发送给网络进程 网络进程会进行DNS解析得到对应的I
  • 数据库基础 (关系数据库)

    14 34 属性 表的列 域 属性的范围 笛卡尔积 所有集合所有数X一遍 目或度 关系表属性的数量 候选码 唯一属性标识 主码 主键 外码 外键 主属性 候选码里的都叫主属性 全码 所有属性都是候选码 称为全码 关系的三种形式 基本关系 基
  • 国标GB28181视频监控平台EasyGBS视频无法播放,抓包返回ICMP是什么原因?

    国标GB28181视频平台EasyGBS是基于国标GB T28181协议的行业内安防视频流媒体能力平台 可实现的视频功能包括 实时监控直播 录像 检索与回看 语音对讲 云存储 告警 平台级联等功能 国标GB28181视频监控平台部署简单 可
  • 大数据手册(Spark)--Spark基础知识(PySpark版)

    文章目录 Spark 初始化 弹性分布式数据集 RDD DataFrame Spark安装配置 Spark基本概念 Spark基础知识 PySpark版 Spark机器学习 PySpark版 Spark流数据处理 PySpark版 Spar
  • Python-netfilterqueue(白帽)[netfilterqueue怎么安装在kali中?][iptables怎么用]

    一 环境安装 前要 使用python3 6以上版本安装netfilterqueue会出现报错无法安装 1 安装python3 6 前提 本机已有python3 9 在此前提下安装python3 6 问题 中间有什么报错无法进行 一般是小问题
  • C语言自动抓取淘宝商品详情网页数据,实现轻松高效爬虫

    你是否曾经遇到过需要大量获取网页上的数据 但手动复制粘贴又太过费时费力 那么这篇文章就是为你而写 今天我们将会详细讨论如何使用C语言实现自动抓取网页上的数据 本文将会从以下8个方面进行逐步分析讨论 1 HTTP协议的基本原理 在开始之前 我
  • Java 自动单元测试生成框架

    推广博客 Java 自动单元测试生成框架
  • STC15单片机自带的AD功能的使用

    一 什么是ADC DAC ADC Analog to Digital Converter的缩写 意思是模 数转换器 实现把模拟信号转变为数字量的设备称为模 数 A D 转换器 简称ADC 实现把数字量转变为模拟量的设备称为数 模 D A 转
  • PHP 登录注册附带邮箱手机号验证

    原创 请勿转载 PHP 登录注册页面 前言 一 配置数据库文件 二 登录注册代码段 1 登录 2 注册 3 主页 4 注销 总结 前言 php简单的登录页面与注册页面 有邮箱手机号验证 源码在github上 https github com