环境要求: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头的时候 就利用的是全局变量。
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连接成功