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方法,下面对应去用postif(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连接成功  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/76546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制造一只电子喵 (qwen2.5:0.5b 微调 LoRA 使用 llama-factory)

AI (神经网络模型) 可以认为是计算机的一种新的 “编程” 方式. 为了充分利用计算机, 只学习传统的编程 (编程语言/代码) 是不够的, 我们还要掌握 AI. 本文以 qwen2.5 和 llama-factory 举栗, 介绍语言模型 (LLM) 的微调 (LoRA SFT). 为了方便上手, 此处选择使用小模型 (qwen2…

LeetCode 解题思路 37(Hot 100)

解题思路&#xff1a; 初始化&#xff1a; 初始化最大举行 max 和栈 stack。左右补零&#xff1a; 考虑柱子递增的边界情况&#xff0c; 初始化填充柱状图 newHeights。遍历处理&#xff1a; 对于每一根遍历到的柱子 newHeights[i]&#xff0c;若柱子高度小于栈口索引&#xf…

HTML — 过渡与动画

HTML过渡与动画是提升网页交互体验的核心技术&#xff0c;主要通过CSS实现动态效果。 过渡 CSS过渡&#xff08;Transition&#xff09;介绍 适用于元素属性变化时的平滑渐变效果&#xff0c;如悬停变色、尺寸调整。通过定义transition-property&#xff08;过渡属性&#xf…

跨站请求是什么?

介绍 跨站请求&#xff08;Cross-Site Request&#xff09;通常是指浏览器在访问一个网站时&#xff0c;向另一个域名的网站发送请求的行为。这个概念在 Web 安全中非常重要&#xff0c;尤其是在涉及到“跨站请求伪造&#xff08;CSRF&#xff09;”和“跨域资源共享&#xff…

Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用

前言 重学Top10的第二篇&#xff0c;希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造&#xff0c;是一种由服务端发起的恶意请求&#xff0c;SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理&#xff0c;执行攻击者构造…

Hibernate:让对象与数据库无缝对话的全自动ORM框架

一、为什么需要全自动ORM&#xff1f; 在手动编写SQL的时代&#xff0c;开发者需要在Java代码和数据库表之间来回切换&#xff1a; // Java对象 public class User {private Long id;private String name;// getters and setters }// SQL语句 SELECT * FROM user WHERE id ?…

C语言超详细指针知识(一)

通过前面一段时间C语言的学习&#xff0c;我们了解了数组&#xff0c;函数&#xff0c;操作符等的相关知识&#xff0c;今天我们将要开始进行指针的学习&#xff0c;这是C语言中较难掌握的一个部分&#xff0c;一定要认真学习&#xff01;&#xff01;&#xff01; 1.内存与地址…

程序化广告行业(70/89):ABTester系统助力落地页优化实践

程序化广告行业&#xff08;70/89&#xff09;&#xff1a;ABTester系统助力落地页优化实践 在程序化广告领域摸爬滚打多年&#xff0c;深知持续学习和知识共享的重要性。写这篇博客&#xff0c;就是希望能和大家一起深入探索程序化广告行业&#xff0c;共同学习、共同进步。今…

项目管理(高软56)

系列文章目录 项目管理 文章目录 系列文章目录前言一、进度管理二、配置管理三、质量四、风险管理五、真题总结 前言 本节主要讲项目管理知识&#xff0c;这些知识听的有点意思啊。对于技术人想创业&#xff0c;单干的都很有必要听听。 一、进度管理 二、配置管理 三、质量 四…

常见的后缀名

.exe .exe&#xff08;“executable”&#xff08;可执行的&#xff09;&#xff09;是 Windows 操作系统中最常见的可执行文件扩展名。此类文件包含了计算机能够直接运行的机器码指令。当用户双击 .exe 文件时&#xff0c;操作系统会读取其中的指令并执行相应的程序或任务。…

XILINX DDR3专题---(1)IP核时钟框架介绍

1.什么是Reference Clock&#xff0c;这个时钟一定是200MHz吗&#xff1f; 2.为什么APP_DATA是128bit&#xff0c;怎么算出来的&#xff1f; 3.APP &#xff1a;MEM的比值一定是1:4吗&#xff1f; 4.NO BUFFER是什么意思&#xff1f; 5.什么情况下Reference Clock的时钟源可…

Doris 安装部署、实际应用及优化实践:对比 ClickHouse 的深度解析

在实时分析、报表系统以及高并发 OLAP 查询等场景中&#xff0c;列式存储数据库因其卓越的查询性能逐渐成为主流。Doris 和 ClickHouse 是近年来最受欢迎的两款开源 OLAP 引擎&#xff0c;本文将系统介绍 Doris 的安装部署、应用场景及优化实践&#xff0c;并与 ClickHouse 做一…

OracleLinuxR5U5系统重启后启动数据库oracle23ai

1、切换到oracle用户 [rootOracleLinux-R9-U5 ~]# su oracle2、查看oracle是否配置了ORACLE_SID [oracleOracleLinux-R9-U5 root]$ cd ~ [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile3、输出内容如下&#xff1a; [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile # .ba…

【正点原子】STM32MP257 同构多核架构下的 ADC 电压采集与处理应用开发实战

在嵌入式系统中&#xff0c;ADC模拟电压的读取是常见的需求。如何高效、并发、且可控地完成数据采集与处理&#xff1f;本篇文章通过双线程分别绑定在 Linux 系统的不同 CPU 核心上&#xff0c;采集 /sys/bus/iio 接口的 ADC 原始值与缩放系数 scale&#xff0c;并在另一个核上…

电商用户购物行为分析:基于K-Means聚类与分类验证的完整流程

随着电商行业的快速发展,用户行为分析成为企业优化营销策略、提升用户体验的重要手段。通过分析用户的购物行为数据,企业可以挖掘出用户群体的消费特征和行为模式,从而制定更加精准的营销策略。本文将详细介绍一个基于Python实现的电商用户购物行为分析系统,涵盖数据预处理…

AMGCL库的Backends及使用示例

AMGCL库的Backends及使用示例 AMGCL是一个用于解决大型稀疏线性方程组的C库&#xff0c;它提供了多种后端(backends)实现&#xff0c;允许用户根据不同的硬件和性能需求选择合适的计算后端。 AMGCL支持的主要Backends 内置Backends: builtin - 默认的纯C实现block - 支持块状…

Express中间件(Middleware)详解:从零开始掌握(3)

实用中间件模式25例 1. 基础增强模式 请求属性扩展 function extendRequest() {return (req, res, next) > {req.getClientLanguage () > {return req.headers[accept-language]?.split(,)[0] || en;};next();}; } 响应时间头 function responseTime() {return (r…

05--MQTT物联网协议

一、MQTT的概念 MQTT 协议快速入门 2025&#xff1a;基础知识和实用教程 | EMQ 1.MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它…

数据结构与算法——链表OJ题详解(2)

文章目录 一、前言二、OJ续享2.1相交链表2.2环形链表12.2环形链表2 三、总结 一、前言 哦了兄弟们&#xff0c;咱们上次在详解链表OJ题的时候&#xff0c;有一部分OJ题呢up并没有整理完&#xff0c;这一个星期呢&#xff0c;up也是在不断的学习并且沉淀着&#xff0c;也是终于…

SQL Server AlwaysOn (SQL 查询数据详解及监控用途)

修正后的完整查询 SELECT ar.replica_server_name AS [副本名称],ar.availability_mode_desc AS [同步模式],DB_NAME(dbr.database_id) AS [数据库名称],dbr.database_state_desc AS [数据库状态],dbr.synchronization_state_desc AS [同步状态],dbr.synchronization_health_d…