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

一、连接数据库基本函数

  1. mysqli_connect();
    1. 作用:创建数据库连接,打开一个新的mysql的连接。
    2. 传参顺序:数据库地址、数据库账号、数据库密码
php 复制代码
<?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 复制代码
<?php
$conn=mysqli_connect("localhost","root","root");
if($conn){
    echo"ok";
}else{
    echo"error";
}
//phpinfo();
?>  
  1. 效果图:
  1. mysqli_select_db()
    1. 作用:选择需要的数据库
    2. 传参顺序:mysqli对象,数据库名
php 复制代码
mysqli_select_db($conn, "php"); #选择名为php的数据库
  1. mysqli_query()
    1. 作用:可以对数据库中的表进行增删改查
    2. 传参顺序:mysqli对象,SQL语句
php 复制代码
# 修改编码
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对象
php 复制代码
# 参数为: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 复制代码
<?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 复制代码
<?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

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 复制代码
<?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. 效果

8、index.php

  1. 代码
php 复制代码
<?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. 效果

9、register.php

  1. 注:注册页面并为实现注册功能,大致功能代码与index.php页面类似。
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>
相关推荐
HumoChen991 小时前
MySQL tinyint(1)类型数据在经过flink cdc同步到doris后只有0/1问题定位与解决
数据库·mysql·flink
阿乾之铭2 小时前
MySQL数据查询(基础)
数据库·sql·mysql
Jason-河山2 小时前
PHP爬虫APP程序:打造智能化数据抓取工具
开发语言·爬虫·php
TuringSnowy2 小时前
SQL_having_pandas_filter
数据库·笔记·sql·mysql·pandas
stark张宇4 小时前
lnmp - BasicAuth、Mysql、Linux的用户管理、ssh免密登录
linux·后端·mysql
alien爱吃蛋挞4 小时前
MySQL之基础篇
数据库·笔记·mysql
爱学的小涛4 小时前
【MySQL】常见的SQL优化方式(一)
数据库·笔记·后端·sql·mysql
cesske4 小时前
php学习基础语法学习
php
csdndddsd5 小时前
workerman和swoole性能对比分析
后端·php·swoole