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

一、连接数据库基本函数

  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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cloudflare 错误 1006、1007、1008 解决方案 | 如何修复

根据不完全统计&#xff0c;使用 Cloudflare 的网站比例已经接近 20%。因此&#xff0c;在日常工作中&#xff0c;比如进行网页抓取时&#xff0c;您可能经常会遇到一些因 Cloudflare 而产生的困难。例如&#xff0c;遇到 Cloudflare 错误 1006、1007 和 1008&#xff0c;这些错…

通过Stream流对集合进行操作

Stream Api是JDK8提供的新特性&#xff0c;可以更为方便地对集合进行操作&#xff0c;比如我今天遇到的一个场景&#xff1a; 将本地的一个视频文件分成多块上传到Minio服务器&#xff0c;现在上传功能已经完成&#xff0c;需要调用minioClient对已经上传的文件重新合并成一个新…

for循环结构

循环&#xff1a; 循环是一个重复执行一个代码的结构。只要满足循环的条件&#xff0c;会一直执行这个代码。 循环条件&#xff1a;在一定范围之内&#xff0c;按照指定的次数来执行循环。 循环体&#xff1a;在指定的次数内&#xff0c;执行的命令序列。只要条件满足&#…

C# 设置PDF表单不可编辑、或提取PDF表单数据

PDF表单是PDF中的可编辑区域&#xff0c;允许用户填写指定信息。当表单填写完成后&#xff0c;有时候我们可能需要将其设置为不可编辑&#xff0c;以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…

怎么改图片尺寸更方便?在线图片改大小的使用方法

图片怎么快速改尺寸呢&#xff1f;在网上传图或者做其他用途时&#xff0c;经常会对图片的尺寸有要求&#xff0c;当拍摄或者制作的图片太大或者太小时&#xff0c;都会导致图片的无法正常使用&#xff0c;那么就需要按照规定将图片改大小之后才能正常使用。 在遇到图片修改大…

调用腾讯智能云实现人脸融合

目录 1. 作者介绍2. 人脸识别内容介绍2.1 人脸识别简介2.2 技术原理 3. 实现流程及代码实现3.1 实现流程3.2 代码实现3.2.1 图片为url格式3.2.2 图片为base64格式 3.3 完整代码3.4 问题分析 1. 作者介绍 杨煜星&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c…

周四 A股震荡走低,行情总结

文章正文 周四&#xff0c;A股全日震荡走低&#xff0c;上证指数收跌0.28%&#xff0c;深成指跌近0.创业板指跌0.09%。猪肉、有色金属、中药、磷化工、煤炭、房地产、白酒行业跌幅靠前。科特估概念股掀起20cm涨停潮&#xff0c;半导体、机器人、消费电子、光伏、虚拟电厂概念股…

网络安全等级保护基本要求 第1部分:安全通用要求

基本要求 第三级 安全物理环境 物理位置选择 a) 机房场地应选择在具有防震、防风和防雨等能力的建筑内&#xff1b; b) 机房场地应避免设在建筑物的顶层或地下室&#xff0c;否则应加强防水和防潮措施 物理访问控制 a) 机房出入口应配置电子门禁系统&#xff0c;控制、鉴…

电表抄表软件是什么?

一、电表抄表软件的概念和作用 电表抄表软件&#xff0c;是一种致力于电力企业定制的数字化工具&#xff0c;用以远程控制搜集、管理方法与分析电表数据信息。它取代了传统人工抄表方法&#xff0c;大大提高了工作效率&#xff0c;降低了人为失误&#xff0c;并且能实时监控系…

Ubuntu下使用`sysbench`来测试CPU性能

使用 sysbench 来测试 CPU 性能是一个常见的方法。sysbench 是一个模块化的跨平台基准测试工具&#xff0c;常用于评估系统的各个组件&#xff08;例如 CPU、内存、I/O 子系统等&#xff09;的性能。 下面是如何使用 sysbench 来测试 CPU 性能的基本步骤&#xff1a; 1. 安装…

HTML LocalStorage

文章目录 关于HTML本地存储localStorage介绍用法如何获取localStorage中存储的所有值浏览器中查看Local Storage页面输出 关于HTML本地存储 Window.localStorage localStorage介绍 只读的localStorage 属性允许你访问一个Document 源&#xff08;origin&#xff09;的对象 S…

vue富文本wangeditor加@人功能(vue2 vue3都可以)

依赖 "wangeditor/editor": "^5.1.23", "wangeditor/editor-for-vue": "^5.1.12", "wangeditor/plugin-mention": "^1.0.0",RichEditor.vue <template><div style"border: 1px solid #ccc; posit…

表 达式树

》》》可以借助 LINQPad工具 using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Transactions;namespace EFDemo {public cla…

深入解析TF-IDF算法:文本分析的基石与力量

在信息爆炸的时代文本数据无处不在&#xff0c;从新闻报道到社交媒体帖子&#xff0c;从学术论文到产品评论&#xff0c;大量的文本信息需要被有效地分析和利用。在这样的背景下TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;算法作为一种简单而有效…

【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b

类似于 【AI基础】第三步&#xff1a;纯天然保姆喂饭级-安装并运行chatglm2-6b&#xff0c;有一些细节不一样。 此系列文章列表&#xff1a; 【AI基础】第一步&#xff1a;安装python开发环境-windows篇_下载安装ai环境python 【AI基础】第一步&#xff1a;安装python开发环境-…

C++:十大排序

目录 时间复杂度分析 选择排序 引言 算法思想 动图展示 代码实现 (升序) 优化 代码实现 分析 冒泡排序 引言 算法思想 动图展示 代码实现 插入排序 引言 算法思想 动图展示 代码实现 计数排序 引言 算法思想 动图展示 代码实现 桶排序 引言 算法思…

OpenCV计算形状之间的相似度ShapeContextDistanceExtractor类的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 1.功能描述 ShapeContextDistanceExtractor是OpenCV库中的一个类&#xff0c;主要用于计算形状之间的相似度或距离。它是基于形状上下文&#xff08;Shape Co…

vue页面和 iframe多页面无刷新方案和并行存在解决方案

面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…

C语言| 数组

直接定义一个数组&#xff0c;并给所有元素赋值。 数组的下标从0开始&#xff0c;下标又表示数组的长度。 【程序代码】 #include <stdio.h> int main(void) { int a[5] {1, 2, 3, 4, 5}; int i; for(i0; i<5; i) { printf("a[%d] %d\…

EulerOS 安装docker 拉取opengauss 镜像

#下载docker包 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.9.tgz #解压 tar zxf docker-18.09.9.tgz #移动解压后的文件夹到/usr/bin mv docker/* /usr/bin #写入docker.service cat >/usr/lib/systemd/system/docker.service <<E…