PHP和Mysql前后端交互效果实现

news2024/11/24 20:33:18

一、连接数据库基本函数

  1. mysqli_connect();
    1. 作用:创建数据库连接,打开一个新的mysql的连接。
    2. 传参顺序:数据库地址、数据库账号、数据库密码
<?php
 echo mysqli_connect("localhost",'root','root')
?>  
/*
  结果:
      Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in C:\Users\Administrator\Desktop\网络安全\php\project_01\php_connect.php:2 Stack trace: #0 {main} thrown in C:\Users\Administrator\Desktop\网络安全\php\project_01\php_connect.php on line 2
  */
  1. 寻错
    1. 翻译错误为:致命错误:未捕获错误:调用未定义的函数mysqli_connect()
    2. 出现错误原因:未配置php.ini
  2. 解决方法
    1. 参考:https://blog.csdn.net/sxudong2010/article/details/83277285
  3. 重新测试连接
<?php
$conn=mysqli_connect("localhost","root","root");
if($conn){
    echo"ok";
}else{
    echo"error";
}
//phpinfo();
?>  
  1. 效果图:

image.png

  1. mysqli_select_db()
    1. 作用:选择需要的数据库
    2. 传参顺序:mysqli对象,数据库名
mysqli_select_db($conn, "php"); #选择名为php的数据库
  1. mysqli_query()
    1. 作用:可以对数据库中的表进行增删改查
    2. 传参顺序:mysqli对象,SQL语句
# 修改编码
mysqli_query($conn, "SET NAMES utf8");
# $GLOBALS是将conn变量赋予全局属性
# 查询user表中userName字段为abc的数据
# 返回值为:mysqli_result对象
mysqli_query($GLOBALS["conn"], "select * from user where userName = abc")



  1. mysqli_fetch_row()和mysqli_fetch_all()
    1. 区别:
      1. row()只返回一条数据,适合有条件的查询,(如返回Array时,为一维数组)
      2. all()返回查询到的所有数据,使用列表展示功能,(如返回Array时,为二维数组)
    2. 作用,接收查询数据并并以多种形式返回,
    3. 传参顺序:mysqli_result对象
# 参数为:mysqli_query()函数返回的 mysqli_result对象
# 返回结果为:Array
echo mysqli_fetch_all( mysqli_query($GLOBALS["conn"], "select * from user "))
echo mysqli_fetch_row( mysqli_query($GLOBALS["conn"], "select * from user where userName=123"))

二、案例实现

1、功能说明

该案例主要功能为用户登录和修改密码功能

2、涉及知识

  1. php变量作用域的范围
  2. php对于Session的存储、修改和销毁
  3. php对于字符串Base64编码和解码的应用
  4. php对于字符串判空、去空、去特殊值的处理
  5. php对于Mysql的如何连接、选择数据库、增删改查等功能

3、页面分布

  1. index.php:登录页
  2. index.php:个人中心页
  3. register.php:注册页
  4. db.php:对于数据库一系列操作
  5. utril.php:工具方法
  6. style.css:页面通用css样式

4、db.php

<?php
# 创建一次新的mysql连接
$conn = mysqli_connect("localhost", "root", "root") or dir("数据库连接失败");
# var_dump($conn);
#连接上名为php的数据库
mysqli_select_db($conn, "php");
# 修改编码
mysqli_query($conn, "SET NAMES utf8");
/*
 *
 * 判断用户是否存在
 * $name:用户名
 * return:返回存在的数据数组
 * */
function isQueryUserName($name){
   return mysqli_fetch_row( mysqli_query($GLOBALS["conn"], "select * from user where userName = '$name'"));
}
/*
 * 更新密码
 * $userName:用户名
 * $password :密码
 * */
function updatePassword($userName,$password){
    $password = base64_encode($password);

   return mysqli_query($GLOBALS['conn'], "update user set password = '$password' where userName = '$userName'");
}


?>

5、util.php

<?php
/*判断数据是否为空
 * */
function isEmpty($value){
    return !empty($value)?true:false;
}
/*
 * 去除多余格式
 * trim:去除左右两边空格
 * stripslashes:去除反斜杠
 * htmlspecialchars:把预定义的字符转换为 HTML 实体
 * 预定义的字符是:
         (和号)成为 &amp;
        " (双引号)成为 &quot;
        ' (单引号)成为 '
        < (小于)成为 &lt;
        > (大于)成为 &gt;&
 *
 * */
function outFormat($value){
    $value = trim($value);
    $value = stripslashes($value);
    $value = htmlspecialchars($value);
    return $value;
    }

//    echo base64_encode("admin"); // 编码
   #  echo base64_decode("dmFyaW4="); // 解码
/*
 * 匹配8位由大写或小写或数字
 * */
function passwordReg($password){
    return preg_match("/^[a-zA-Z0-9]{8}$/", $password);
}

6、style.css

*{
  padding:0px;
  margin:0px;
}
.box{
  margin: 100px auto;
  background: linear-gradient(135deg, #d3e4f5, #0088a9, #00c9a7, #92d5c6, #ebf5ee)  repeat-x  ;
  width:600px;
  height:500px;
  border:1px solid #f5f5f5;
  border-radius: 15px;
  box-shadow: 10px 10px 10px #f5f5f5;
  color: white;
}
h2{
  text-align: center;
  margin: 20px 0px;
}
label{
  margin: 20px 0px;
  display: inline-table;
}
form{
  text-align: center;
}
input{
  color: black;
}

7、login.php

  1. 代码
<?php
  # 开启session
  session_start();
# 包含
include './db.php';
include './util.php';
$userName=$password='';
# 检测
if(isset($_POST['loginSubmit'])){
  $userName =outFormat( $_POST['userName']);
  $password =outFormat($_POST['password']);
  # 判空
  if(isEmpty($userName) && isEmpty($password)){
    # 查询
    $userInfoArray= isQueryUserName($userName);
    # 比对数据
    if($userInfoArray!=null&&  $userInfoArray[1]== $userName && base64_decode($userInfoArray[2])== $password){
      echo "<script>alert('登录成功!');</script>";
      # 存session
      $_SESSION["userName"]=$userName;
      //               echo  $_SESSION["userName"];
      echo "<script>window.location.href='index.php';</script>";
    }else{
      echo "<script>alert('用户信息错误,请重试!');</script>";
    }
  }else{
    echo "<script>alert('请将信息填写完整!');</script>";
  }
}
  ?>
  <!DOCTYPE html>
  <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Login</title>
      <link href="./style.css" type="text/css" rel="stylesheet">
    </head>
    <body>
      <div class="box">
        <h2>登录</h2>
        <form action="./login.php" method="POST">
          <label > 用户名:<input type="text" name="userName" value="<?php echo $userName?>"></label>
          <br>
          <label >&nbsp;&nbsp; &nbsp;码:<input type="password" name="password" value="<?php echo $password?>"></label>
          <br>
          <input type="submit" name="loginSubmit" value="登录" style="width:60px;height: 30px;color: black;margin-top: 100px">
          <br>
          <p style="margin-top: 20px;color: black;font-size: 14px"><a href="#" style="color: green">注册</a>
          </p>
        </form>
      </div>

    </body>
  </html>
  1. 效果

image.png

8、index.php

  1. 代码
<?php
    session_start();
    
    include './db.php';
    include './util.php';
    $userName=$password=$confirmPassword='';
    $userName=$_SESSION['userName'];
    if($userName==null){
        echo "<script>window.location.href='login.php';</script>";
    }
    $password= base64_decode(isQueryUserName($userName)[2]);
    if(isset($_POST['updateSubmit'])){
        $password = $_POST['password'];
        $confirmPassword = $_POST['confirmPassword'];
        echo $password;
        echo $confirmPassword;
        if(isEmpty($password)&& isEmpty($confirmPassword)){
            if(passwordReg($password) && $password == $confirmPassword){
                if (updatePassword($userName, $password)==true) {
                    echo "<script>alert('用户密码更新成功 ')</script>";
                    session_destroy();
                    echo "<script>window.location.href='login.php';</script>";
                }
            }else{
                echo "<script>alert('密码格式错误,请重试!')</script>";
            }
        }else{
            echo "<script>alert('请将信息填写完整')</script>";
        }
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>个人中心</title>
    <link href="./style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div class="box">
    <h2>个人中心</h2>
    <form action="#" method="post">

        <label > 欢迎您,<span style="font-weight: bold" ><?php echo $userName?></span></label>
        <br>
        <label >&nbsp;&nbsp; &nbsp;码:<input type="password" name="password" value="<?php echo  $password?>"></label>
        <br>
        <label > 确认密码:<input type="password" name="confirmPassword" value="<?php echo  $confirmPassword ?>"></label>
        <br>
       <input type="submit" name="updateSubmit" value="修改" style="width:60px;height: 30px;color: black;margin-top: 100px">
        <br>


    </form>
</div>

</body>
</html>
  1. 效果

image.png

9、register.php

  1. 注:注册页面并为实现注册功能,大致功能代码与index.php页面类似。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <link href="./style.css" type="text/css" rel="stylesheet">

</head>
<body>
<div class="box">
    <h2>注册</h2>
    <form action="#" method="post">
        <label > 用户名:<input type="text" name="userName" value="用户名"></label>
        <br>
        <label >&nbsp;&nbsp; &nbsp;码:<input type="password" name="password" value="密码"></label>
        <br>
       <input type="submit" name="loginSubmit" value="登录" style="width:60px;height: 30px;color: black;margin-top: 100px">
        <br>
        <p style="margin-top: 20px;color: black;font-size: 14px"><a href="#" style="color: green">注册</a>
        </p>

    </form>
</div>

</body>
</html>

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

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

相关文章

基于springboot实现中山社区医疗综合服务平台系统项目【项目源码+论文说明】

基于springboot实现中山社区医疗综合服务平台系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;居民信息因为其管理内容繁杂&…

数智技术教学解决方案

前言 随着大数据、云计算、人工智能等技术的迅猛发展&#xff0c;教育领域正迎来一场深刻的变革。这场变革不仅仅是教学方式的转变&#xff0c;更是教育理念、教学模式乃至教育生态系统的重塑。唯众作为教育技术领域的领军企业&#xff0c;深刻认识到数智技术在教学中的重要性&…

2024大交通场景空间策展洞察报告

来源&#xff1a;邻汇吧&万一商管 近期历史回顾&#xff1a; 2024国内工商业储能市场研究报告.pdf 2023幸福企业白皮书.pdf 2024年欧亚地区移动经济报告.pdf 内容供应链变革 2023人工智能与首席营销官&#xff08;CMO&#xff09; AI科技对PC产业的影响.pdf 金融业数据应用…

基于YOLO检测算法(单检测器网络+多视频输入)设计与实现

在单摄像头目标检测的基础上&#xff0c;实现单网络多线程的实时目标检测。 1&#xff0c;应用场景 在安防领域&#xff0c;YOLO的多摄像头实时目标检测应用具有以下特点和优势&#xff1a; 实时性能&#xff1a; YOLO算法以非常高的速度运行&#xff0c;能够实现实时目标检测…

ComfyUI 集成混元DIT(comfyui-hydit)

最近腾讯官方推出了ComfyUI插件comfyui-hydit 。是一个专门为腾讯的 Hunyuan-DiT 模型设计的自定义节点和工作流。本文主要介绍如何通过ComfyUI来运行腾讯新出的支持中文提示词的混元文生图大模型Hunyuan-DiT 环境准备 插件 从腾讯混元DIT 源码库获取插件源码&#xff1a; h…

深圳某老牌地产公司曝3小时裁所有员工

大家好&#xff01; 我是老洪&#xff0c;今日&#xff0c;我偶然间瞥见一则新闻&#xff0c;心头一震&#xff0c;惊讶之情难以言表。 据多家权威媒体纷纷报道&#xff0c;近日&#xff0c;深圳一家历史悠久的地产巨头&#xff0c;竟然在短短三小时内&#xff0c;果断地挥别了…

算法课程笔记——线段树维护哈希

算法课程笔记——线段树维护哈希 提前空出来

苹果AI时代:Apple Intelligence能否守护隐私与未来?

最近&#xff0c;苹果展示了其人工智能底牌&#xff0c;推出了Apple Intelligence(重新定义AI)&#xff0c;这是一套基础模型&#xff0c;将极大地改变苹果消费者使用其产品的方式。 虽然仍需在实际中证明自己&#xff0c;但它是一个强有力的演示&#xff0c;至少从普通用户的…

防火墙对于企业究竟起到哪些作用?

在当今数字化时代&#xff0c;企业网络安全已成为关乎企业生存与发展的战略要务。防火墙作为网络安全的基石&#xff0c;对于构建企业网络的安全防护体系至关重要。本文将深入剖析防火墙在企业网络安全中的多重价值&#xff0c;并结合具体案例&#xff0c;探讨如何科学运用防火…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第40课-实时订阅后端数据 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

pdf格式转成jpg图片,pdf格式如何转jpg

pdf转图片的方法&#xff0c;对于许多人来说可能是一个稍显陌生的操作。然而&#xff0c;在日常生活和工作中&#xff0c;我们有时确实需要将pdf文件转换为图片格式&#xff0c;以便于在特定的场合或平台上进行分享、展示或编辑。以下&#xff0c;我们将详细介绍一个pdf转成图片…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战系列教程前言总结

本系列教程的初衷 目前Github和技术社区中有不少功能强大&#xff0c;界面美观的Vue3ElementPlus通用后台管理系统&#xff0c;但这些系统对初学者都不太友好&#xff0c;导致大家学习路径比较陡峭。于是自己写了这个系列&#xff0c;手把手从头开发一个通用后台管理系统的雏形…

Unity 踩坑记录 用自定义类 创建的List不显示在 inspector面板

在 自定义类上面添加 【Serializable 】 扩展&#xff1a; 1&#xff1a;Serializable 序列化的是可序列化的类或结构。并且只能序列化非抽象非泛型的自定义的类 2&#xff1a;SerializeField是强制对私有字段序列化

内网穿透方法有哪些?路由器端口映射外网和软件方案步骤

公网IP和私有IP不能互相通讯。我们通常在局域网内部署服务器和应用&#xff0c;当需要将本地服务提供到互联网外网连接访问时&#xff0c;由于本地服务器本身并无公网IP&#xff0c;就无法实现。这时候就需要内网穿透技术&#xff0c;即内网映射&#xff0c;内网IP端口映射到外…

【StableDiffusion】Prompts 提示词语法;高阶用法;写作顺序是什么,先写什么后写什么

Prompt 写作顺序 第一步&#xff1a;画质词画风词 第一步先写“画质词”和“画风词” 画质词如下&#xff1a; 画风词如下&#xff1a; 第二步&#xff1a;画面主体描述 人物性别、年龄、发型、发色、情绪表情、衣服款式、衣服颜色、动作、饰品、身材、五官微调 第三步&…

探索Gitcode上的热门开源项目:ChatTTS

随着开源程序的发展&#xff0c;越来越多的程序员开始关注并加入开源大模型的行列。开源行业和开源项目对于每个人来说都有不同的关注点&#xff0c;今天&#xff0c;我将向大家推荐一个热门的开源项目——ChatTTS。 ChatTTS是一个基于深度学习技术的开源语音合成项目。它可以将…

你是否还为不理解nextLine()、next()的程序逻辑而苦恼?

如果你在使用nextLine()或者next&#xff08;&#xff09;无法正确输入字符串&#xff0c; 或者输入了&#xff0c;但是没有显示字符串&#xff0c;那么很好你找对文章了&#xff01; 看了这篇文章你讲直到这两个方法的运行逻辑&#xff0c;并知道自己的问题出在了哪里。 目…

【Python机器学习系列】建立KMeans模型实现航空客户聚类分群(案例+源码)

这是我的第301篇原创文章。 一、引言 在企业的客户关系管理中&#xff0c;对客户分类&#xff0c;区分不同价值的客户。针对不同价值的客户提供个性化服务方案&#xff0c;采取不同营销策略&#xff0c;将有限营销资源集中于高价值客户&#xff0c;实现企业利润最大化目标。广泛…

Covalent 承诺向 Consensys Builders Scale 提供 250 万美元资助

作为 Web3.0 领域主要的模块化数据基础设施层 Covalent Network&#xff08;CQT&#xff09;承诺向「Consensys Builders Scale 计划」提供 250 万美元的资助&#xff0c; 用于助力 Consensys 生态的发展。这一重大举措体现了 Covalent Network&#xff08;CQT&#xff09;的使…

ETL可视化工具 DataX -- 简介( 一)

引言 DataX 系列文章&#xff1a; ETL可视化工具 DataX – 安装部署 ( 二) 1.1 DataX 1.1.1 Data X概览 DataX 是阿里云DataWorks数据集成的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServ…