当前位置: 首页 > news >正文

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

环境要求:php7.0.9 + 小皮 + navicat + phpstorm24.1

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

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

 

相关文章:

  • 可配置多功能门芯片的12种用法推导——基于74LVC1G97芯片(附1G98、1G57、1G58、1G99用法)
  • SpringBoot3快速入门笔记
  • 漏洞报告:多短视频平台时间差举报滥用漏洞
  • Python实例题:使用Python生成分形图片
  • java基础 运算符
  • android display 笔记(十三)surfcaeflinger的DEQUEUED、QUEUED
  • android中dp和px的关系
  • 高阶函数/柯里化/纯函数
  • 常用图像滤波及色彩调节操作(Opencv)
  • 改进神经风格迁移
  • 巧用递归算法:破解编程难题的“秘密武器”
  • MySQL 5.7.30 Linux 二进制安装包详解及安装指南
  • 容器初始化Spring Boot项目原理,即web项目(war)包涉及相关类对比详解
  • Mac 下载 PicGo 的踩坑指南
  • 聊聊Spring AI的Multimodality
  • 汇编获取二进制
  • 穿梭在数字王国:Python进制转换奇遇记
  • JMeter的关联
  • 日常记录-设置新增pve的ct容器
  • 基于HTML + jQuery + Bootstrap 4实现(Web)地铁票价信息生成系统
  • 免费建手机网站的软件/爱站网关键字挖掘
  • 推荐一下网站谢谢/seo综合查询怎么用
  • 北京网站制作/安卓系统优化软件
  • 网站建设 pdf/搭建一个网站需要多少钱?
  • 课程网站建设ppt模板/短视频培训机构排名
  • 衡水网站设计怎么做/搜索引擎推广简称