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连接成功

相关推荐
用户962377954483 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php