PHP与数据库的交互

huangxin0506 2024-7-24 211 7/24

PHP与数据库的交互

1 静态网页:

纯文本,没有任何与后端交互的地方

PHP与数据库的交互

2 动态网页:

可以与后端交互,比如留言板,搜索 等

document.lastModified 是 JavaScript 中的一个属性,用于返回当前文档的最后修改日期和时间。这个属性通常用于网页开发中,以显示或检查网页的最后修改时间。

在网页控制台中输入document.lastModified判断网页是否为动态网页。

PHP与数据库的交互

比如搜索:

传参 -> PHP处理 -> 到数据库获取 -> 显示数据

很核心的一点就是PHP控制MYSQL的操作其实是要使用到MySqli扩展的,是PHP自带的一个,当看到一个函数有Mysqli_ 前缀的时候,一般都属于是mysqli的扩展

3 编写交互实例代码遇到的问题

问题1 :使用旧版本的phpstudy,实现PHP——连接MySQL报错mysql_connect(): Server sent charset (255) unknown to the client.

解决办法:使用最新版的phpstudy小皮面板

问题2:连接mysql时,phpstudy小皮面板数据库与本机mysql冲突,导致小皮面板中的MySQL环境不能启动

PHP与数据库的交互

解决办法:Win+r输入services.msc,找到本地原有的mysql服务,右键停止

PHP与数据库的交互

4 交互实例代码

4.1 实现登录功能

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>这是一个登陆测试网页</title>
		
	</head>
<body>
    <form method="get">
    	账号:<input type="text" name="user"  />
    	密码:<input type="password" name="pass" />
    	<input type="submit" value="登录"/>
    </form>
</body>

</html>
<?php
	header("Content-Type: text/html; charset=utf-8");
	$conn = mysqli_connect('127.0.0.1','root','root','userinfo');
	$user=$_REQUEST['user'];
	$pass=$_REQUEST['pass'];
	$sql="select * from users where user='$user' and pass='$pass'";
	$result=mysqli_query($conn,$sql);
	var_dump($result);echo "<br>";
	$row = mysqli_fetch_array($result);
	var_dump($row);
	if($row){
        echo '<script>alert("登录成功")</script>';
    }else{
        echo '<script>alert("登录失败")</script>';
    }
	
?>

PHP与数据库的交互

4.1.1 mysqli_query()函数

mysqli_query() 是 PHP 中用于执行 MySQL 数据库查询的函数。它是 mysqli 扩展的一部分,通常用于在 PHP 脚本中与 MySQL 数据库进行交互。该函数可以执行各种类型的 SQL 查询,例如 SELECT、INSERT、UPDATE 和 DELETE。

返回值:

1. 对于 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,mysqli_query() 返回一个 mysqli_result 对象,您可以用它来遍历结果集。

2. 对于其他查询(例如 INSERT、UPDATE、DELETE),它返回布尔值 true 表示成功,false 表示失败。

4.1.2 mysqli_fetch_array()函数

mysqli_fetch_array() 是 PHP 中用于从结果集中获取一行数据的函数。它返回一个数组,该数组包含结果集中的一行数据,可以通过字段名或字段索引来访问数组中的数据。

返回值:

成功时,返回一个包含一行数据的数组。如果没有更多行可供检索,返回 null。

登录功能中需要使用SELECT查询,所以需要将mysqli_query()函数和mysqli_fetch_array()函数结合使用。

4.1.3  在 PHP 中,单引号 (' '):不会解析字符串中的变量。它们会被视为普通的文本。

双引号 (" "):会解析字符串中的变量。变量名会被替换为其对应的值。

4.2 实现注册功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>这是一个账号注册网页</title>
</head>
<body>
    <form action="register.php" method="post">
        注册账号:<input type="text" name="user" >
        注册密码:<input type="password" name="pass" >
        <input type="submit" value="注册" >
    </form>
</body>
</html>
<?php

// 连接到数据库
$conn = mysqli_connect('127.0.0.1', 'root', 'root', 'userinfo');


// 只在表单提交时执行数据库操作
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 获取表单数据
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    // 输入验证
    if (empty($user) || empty($pass)) {
        echo '<script>alert("用户名和密码不能为空"); window.location.href="register.php";</script>';
    } else {
        // 创建 SQL 语句
        $sql = "INSERT INTO users (user, pass) VALUES ('$user', '$pass')";
        
        // 执行 SQL 语句
        $result = mysqli_query($conn, $sql);
        
        // 检查 SQL 执行结果
        if ($result) {
            echo '<script>alert("注册成功"); window.location.href="register.php";</script>';
        } else {
            echo '<script>alert("注册失败");</script>';
        }
    }
}
?>

PHP与数据库的交互PHP与数据库的交互

4.2.1 针对于上述注册功能代码需要注意只能使用POST方法

(1)上述代码将html和php结合成一个php代码,因为php代码中可以包含html代码,反之则不行。

(2)在使用 GET 方法时,因为直接运行php代码,且浏览器会将表单数据附加到 URL 中,因此在提交表单时,URL 中会包含 user 和 pass 参数。如果这些参数为空,empty($user) || empty($pass) 的条件会一直满足,从而触发弹窗。

(3)当使用 POST方法 时,数据不会出现在 URL 中,而是通过请求体发送。这意味着 URL 不会包含 user 和 pass 参数,由于没有在 URL 中传递数据,$_POST['user'] 和 $_POST['pass'] 只有在表单提交后才会包含值。因此,只有在实际提交了表单数据后才会检查是否为空,避免了不断触发弹窗的问题。

(4)如果将html和php代码分开则不用考虑这种情况。

4.2.2 POST和GET方法的区别

(1)get请求一般用来请求获取数据;post请求一般作为发送数据到后台,传递数据,创建数据

(2)get请求也可以传参到后台,但是传递的参数则显示在地址栏,安全性低,且参数的长度也有限制(2048字符)

post请求则是将传递的参数放在request body中,不会在地址栏显示,安全性比get请求高,参数没有长度限制

4.3 完整代码

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后台登录管理</title>
    <style>
        .login {
            position: absolute;
            left: 520px;
            top: 200px;
            height: 350px;
            width: 500px;
            background-color: #fff;
            border: 1px solid darkgray ;
            box-shadow: #fff 0px 20px 100px;
        }

        h1 {
            font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
            text-align: center;
        }

        .main {
            width: 60%;
            height: 30px;
            margin: 20px 10px 10px;
        }

        .main::placeholder {
            font-size: 15px;
            font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
        }

        form {
            text-align: center;
        }

        .account {
            font-size: 20px;
            font-family: Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
        }

        .radio {
            margin: 30px 30px 30px;
        }

        .submit {
            margin-top: 20px;
            height: 30px;
            width: 100px;
            color: cadetblue;
            background-color: #fff;
        }

        
    </style>
</head>
<body style="background-color: darkgray;">
    <div class="login">
        <h1>后台登录管理</h1>
        <form action="login(1).php" method="post">
            <span class="account"><b>账号: </b><input type="text" name="user" placeholder="请输入账号" class="main"></span></br>
            <span class="account"><b>密码: </b><input type="password" name="pass" placeholder="请输入密码" class="main"></span></br>
            <span class="radio"><b>登录:</b><input type="radio" name="main" value="login"></span>
            <span class="radio"><b>注册:</b><input type="radio" name="main" value="create"></span></br>
            <input type="submit" value="提交" class="submit">
        </form>
    </div>
</body>
</html>

php代码

<?php
// 设置编码
header("Content-Type: text/html;charset=utf-8");

@$_user = $_POST['user'];
@$_pass = $_POST['pass'];
@$_main = $_POST['main'];

function get_index () {
    $url = "index.html";  
    echo "<script type='text/javascript'>"."window.location.href='$url'"."</script>";  
}

if ($_main == '') {
    echo '<script>alert("请选择操作类型")</script>';
    get_index();
    exit;
}

if (empty($_user) || empty($_pass)) {
    echo '<script>alert("用户名和密码不能为空")</script>';
    get_index();
    exit;
}
// 创建数据库链?
$conn = mysqli_connect('127.0.0.1', 'root', 'root', 'userinfo');

if ($_main == 'login') {
    @$sql = "select * from users where user='$_user' and pass='$_pass'";
    @$result = mysqli_query($conn, $sql);
    @$row = mysqli_fetch_array($result);
    if ($row) {
        echo '<script>alert("登录成功")</script>';
    }else {
        echo '<script>alert("账号或密码错误")</script>';
    }
    get_index();
} else {
    @$sql = "insert into users (user,pass) value ('$_user', '$_pass')";
    echo $sql;
    $result = mysqli_query($conn, $sql);
    @$row = mysqli_fetch_array($result);
    echo '<script>alert("注册成功!")</script>';
    get_index();
}

?>

效果图:

PHP与数据库的交互

登陆成功:

PHP与数据库的交互

注册成功:

PHP与数据库的交互

账号或密码错误:

PHP与数据库的交互

注册账号用户名和密码为空:

PHP与数据库的交互

未选择操作类型:

PHP与数据库的交互

 

- THE END -

huangxin0506

7月24日15:05

最后修改:2024年7月24日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论