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

相关推荐
先鱼鲨生4 小时前
【Qt】初识Qt
开发语言·qt
chao_7895 小时前
QT开发工具对比:Qt Creator、Qt Designer、Qt Design Studio
开发语言·qt
满怀10155 小时前
【ICMP协议深度解析】从网络诊断到安全实践
网络·tcp/ip·安全·icmp·网络诊断
珊瑚里的鱼7 小时前
LeetCode 102题解 | 二叉树的层序遍历
开发语言·c++·笔记·算法·leetcode·职场和发展·stl
码上飞扬7 小时前
Java大师成长计划之第12天:性能调优与GC原理
java·开发语言
Wabi_sabi_x7 小时前
C++设计模式:面向对象的八大设计原则之一
开发语言·c++·设计模式
万叶学编程7 小时前
鸿蒙移动应用开发--ArkTS语法进阶实验
开发语言·javascript·ecmascript
chilling heart8 小时前
JAVA---继承
java·开发语言·学习
黄雪超8 小时前
JVM——JVM是怎么实现invokedynamic的?
java·开发语言·jvm
绿龙术士8 小时前
C#与西门子PLC通信:S7NetPlus和HslCommunication使用指南
开发语言·c#