Day22 -php开发01--留言板+知识点(超全局变量 & 文件包含 & 数据库操作 &第三方插件)

知识点:会写(留言板 + 留言板后台)+ 超全局变量 + 三方插件的使用 + 文件包含

1、开启小皮并利用navicat新建一个数据库

注意:本地的服务mysql关闭后 才可打开小皮。属于是两个系统。

总结:库名demo01 ; 表名gbook

2、实例:html + php代码实现

2.1 单文件实现留言和留言显示功能
复制代码
<!-- html区域 利用的是adobe生成的  !注意html的注释格式 不是/ 或者# -->
<form id="form1" name="form1" method="post" action=""> <!-- action写空表示接收的是自己 -->
    <p>
  用户名:</p>
    <p>
      <input type="text" name="username">  <!-- name这指的是将以变量username去传递变量的值(用户输入的实际用户名) -->
  </p>
    <p>
  内容:</p>
    <p>
      <textarea name="content"></textarea> <!-- name这指的是将以变量content去传递变量的值(用户输入的实际评论内容) -->
  </p>

      <input type="submit" name="submit" id="submit" value="提交">

</form>

<?php

# 2.mysql相关部分
// 2.1 与mysql进行连接
$dbip = "localhost";
$dbuser = "root";
$dbpass = "123456";
$dbname = "demo01";

// 创建连接
$con = mysqli_connect($dbip, $dbuser, $dbpass, $dbname);

// 检测连接
if (!$con) {
    die("连接失败: " . mysqli_connect_error());
}
    # 1.php接收部分
    $u = @$_POST['username']; // 加@是为了防止提示空的报错。 由于上面表单给的是post方法,下面对应去用post
    if(isset($u)){    // 由于全局变量提取ip,导致哪怕不评论,也会抓取到ip,所以写一个if判断防止空抓ip和ua
        $c = @$_POST['content'];
        // echo $u;
        // echo $c;  # 1--确认php利用content和username变量接收到了来自前端用户所提交的用户名和内容后 进行数据库的配置

        # 2.3 *引入超全局变量* #
        $i = $_SERVER['REMOTE_ADDR']; //利用全局变量语法直接获得ip和ua头,不需要用户输入
        $ua = $_SERVER['HTTP_USER_AGENT'];

        // 2.2 确认mysql连接后,我们进行数据的插入
        $sql = "INSERT INTO gbook(username,content,ipaddr,uagent) VALUES('$u','$c','$i','$ua');"; //插入到表中

        // 2.4 执行mysql的插入语句
            if(mysqli_query($con, $sql)){  // 返回$sql语句生效后的查询结果
                echo "<script>alert('留言成功')</script>"; // html混编:写一个js提示框 给用户一个反馈

                // 2.5 写mysql的查询语句并执行,来进行留言查询
                $sql1 = "select * from gbook";
                $data = mysqli_query($con,$sql1);
                while ($row=mysqli_fetch_row($data))
                {
                    echo '<hr>';
                    echo '用户名:'.$row[0].'<br>'; //列名下标匹配  .的意思就是加
                    echo '内容:'.$row[1].'<br>';
                    echo 'ip地址:'.$row[2].'<br>';
                    echo 'ua头:'.$row[3].'<br>';

                }

            }else{
                echo "<script>alert('留言失败')</script>";
            }
    }
}

?>
2.2 加入留言板后台管理功能

加入一个留言板的后台管理功能:显示所有留言,并可进行删除

00x1 创建admin/gbook-admin.php

将负责留言查询的语句copy到admin-gbook中

于是发现,与mysql的连接又需要重新配置,那么就写一个config.php配置文件

00x2 创建配置文件config.php并做文件包含

注意:是在demo01根目录下 与gbook同级

于是乎,将配置mysql相关代码写入config.php中

那么我们在后台管理的文件gbook-admin就可直接包含config.php了无需重复配置mysql

include '../config.php'

00x3 删除功能实现
复制代码
echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";

在遍历打印留言时候,加载一个跳转删除功能的a标签

复制代码
$delstr = $_GET['del']; // 由于刚刚是href='gbook-admin.php?del 这种url类型提取数据 所以用get
$sql2 = "delete from gbook where username='$delstr';";
if(mysqli_query($con,$sql2)){
    echo "<script>alert('删除成功!')</script>";
}

但是这样子,会有一点小问题,由于是根据用户的username去匹配删除条件的,那么同一个用户多条留言可能一次性全部删掉了。(不知迪总25课程改善代码没有hahaha

测试,成功删除。

2.3 进一步利用函数封装功能
留言功能
复制代码
function add_gbook($con){
    $u = @$_POST['username'];
    if(isset($u)){
        $c = @$_POST['content'];
        $i = $_SERVER['REMOTE_ADDR'];
        $ua = $_SERVER['HTTP_USER_AGENT'];
        $sql = "INSERT INTO gbook(username,content,ipaddr,uagent) VALUES('$u','$c','$i','$ua');";
        if(mysqli_query($con, $sql)){
            echo "<script>alert('留言成功')</script>";
        }
    }
}
留言显示功能
复制代码
function show_gbook($con,$del){
    $sql1 = "select * from gbook";
    $data = mysqli_query($con,$sql1);
    while ($row=mysqli_fetch_row($data))
    {
        echo '<hr>';
        echo '用户名:'.$row[0].'<br>'; //列名下标匹配  .的意思就是加
        echo '内容:'.$row[1].'<br>';
        echo 'ip地址:'.$row[2].'<br>';
        echo 'ua头:'.$row[3].'<br>';
        if($del == 'del') {
            echo "<a href='gbook-admin.php?del=$row[0]'>删除</a>";
        }
    }
}

然后根据逻辑,先加再显示,进行函数的调用。

复制代码
add_gbook($con);
show_gbook($con);
2.4 再次优化后台管理文件(admin-gbook.php)

由于后台管理文件(admin-gbook.php)也有显示全部留言功能,可以再用一次文件包含,直接调用show_gbook功能,进行代码优化。

复制代码
include 'gbook.php'; // 是直接调用gbook中的show_gbook函数,实现显示全部留言功能
复制代码
show_gbook($con,'del');
2.5 利用ueditor第三方插件来实现上传图片的功能
00x1 将ueditor文件放入demo01文件夹下
00x2 调用

1)先导入插件包文件(写在form表单上方)

复制代码
<script src="/ueditor/ueditor.config.js">/*引入配置文件*/</script>
<script src="/ueditor/ueditor.all.js">/*引入源码文件*/</script>

2)确认需求是需要ed帮我生成一个富文本框(可上传图片)

于是我们将刚刚的文本框加一个id参数,值随意,与调用保持一致即可。

3)再调用ueditor进行生成(确保id参数一致,类比对暗号)

放在hrml的<form>表单下面即可。

复制代码
// 导入uitor的js脚本语句
<script>
    // 将脚本放在页面底部也可以确保DOM已加载
    var ue = UE.getEditor('hi-ueditor');
</script>

4)利用小皮建站本地ip,导入demo01文件夹

5)查看效果

成功提交

3、Day1-留言板php开发知识点串联:

1)超全局变量

PHP的全局变量是指在整个PHP脚本中都可以被访问到的变量。这些变量存储在PHP进程的内存中,并在整个脚本执行期间保持不变。全局变量的作用是在不同的函数和代码块中共享数据,从而使代码更加简洁和易于维护。

2.3 *引入全局变量*

i = _SERVER['REMOTE_ADDR'];

ua = _SERVER['HTTP_USER_AGENT'];

我们在实现提取ip、和ua头的时候 就利用的是全局变量。

PHP 超级全局变量 | 菜鸟教程

2)mysql-php相关

// 2.1 与mysql进行连接

$dbip = "localhost";

$dbuser = "root";

$dbpass = "123456";

$dbname = "demo01";

// 创建mysql连接

con = mysqli_connect(dbip, dbuser, dbpass, $dbname);

// 检测连接

if (!$con) {

die("连接失败: " . mysqli_connect_error());

}

// 确认mysql连接后,可进行数据的增删改查

sql = "INSERT INTO gbook(username,content,ipaddr,uagent) VALUES('u','c','i','$ua');";

其中mysql的增删改查语句:

// 执行mysql语句

if(mysqli_query(con, sql)){

echo "<script>alert('留言成功')</script>";

}

3)第三方的插件ueditor的使用

看上面实例 很详细。

4)文件包含的使用

使得代码更加简洁,文件包含可供其他地方去调用某片区域的代码/功能。

include '地址' ;

?4、可能出现关于sqli的失败问题:

主要是插件没有开启,根据下方操作可以正常开启。

将下载的php7.0.9环境进行配置的时候,将development / production 进行复制一份并重命名为php.ini作为php的实际配置文件。

搜索mysqli,将前面的;注释符号删掉即可。

在ini文件的上面[PHP]下方,我们加上ext的路径

mysql连接成功

相关推荐
点纭2 分钟前
C 语言 第八章 文件操作
c语言·开发语言
我姓徐1 小时前
C语言-基于AT-SPI无障碍服务操作工具
c语言·开发语言·ui自动化测试·无障碍服务·at-spi
Acrelgq231 小时前
从“被动跳闸”到“主动预警”:智慧用电系统守护老旧小区安全
安全
ricky_fan1 小时前
Leetcode39:组合总和——回溯算法
开发语言·c++·leetcode
nainaire1 小时前
学Qt笔记
开发语言·笔记·qt
不爱吃于先生1 小时前
Python基础语法速通(自用笔记)
开发语言·python
向宇it2 小时前
【unity游戏开发介绍之UGUI篇】UGUI概述和基础使用
开发语言·unity·c#·编辑器·游戏引擎
Aukum2 小时前
vulnhub:sunset decoy
linux·网络·笔记·安全·web安全·网络安全
qq_365911602 小时前
探索 MCP 和 A2A 协议: 本质上新协议都基于 HTTP的
开发语言
爱的叹息2 小时前
Java Lambda 表达式详解:发展史、语法、使用场景及代码示例
java·开发语言·python