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.pswp.cn/pingmian/76546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76546.shtml
英文地址,請注明出處:http://en.pswp.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…