上回:後端開發技術教學(二) 條件指令、循環結構、定義函數 -CSDN博客
必要資源:
trae中文版下載網址: TRAE - The Real AI Engineer
phpStudy 2018 : phpStudy - Windows 一键部署 PHP 开发环境 · 小皮出品
目錄
[1.1 get & post](#1.1 get & post)
[1.2 提交流程](#1.2 提交流程)
[2.1 _GET](#2.1 _GET)
[2.2 _POST](#2.2 _POST)
[3.1 表單製作](#3.1 表單製作)
[3.1.1 數據為圖片](#3.1.1 數據為圖片)
[3.2 數據處理](#3.2 數據處理)
[3.2.1 空格刪除](#3.2.1 空格刪除)
[3.2.2 密碼加密](#3.2.2 密碼加密)
[3.2.3 臨時存儲至統一變量](#3.2.3 臨時存儲至統一變量)
[3.2.4 其他字符串處理函數](#3.2.4 其他字符串處理函數)
[3.2.4.1 輸出特殊字符](#3.2.4.1 輸出特殊字符)
[3.3 數據儲存](#3.3 數據儲存)
上期我們講解了一些PHP的結構指令及定義函數,那麼這期我們就來說說服務器是怎麼接收用戶提交的數據的。
一、表單提交
在學習表單提交之前首先需要理解甚麼是get、post和url。
1.1 get & post
=> 兩個用於請求收集數據的語句。
特性 | GET | POST |
---|---|---|
數據位置 | URL 參數(可見) | HTTP 請求正文(不可見) |
安全性 | 低(適合非敏感數據) | 高(適合密碼、個人信息) |
使用場景 | 搜索、分頁等簡單操作 | 註冊、登錄、數據提交 |
PHP 獲取方式 | $_GET['參數名'] |
$_POST['參數名'] |
- get: 即url(網址)中的"?",'?'後面的就是GET收集到的數據。

- post: 隱藏在請求主體中(要抓包才能看到內容)。
1.2 提交流程
=> 這邊用在csdn更改用戶資料作例子。
**i.)**用戶發送更改資料的請求給服務器。

ii.) 服務器把上傳數據的頁面發送給用戶(包括get或post請求)

iii.) 用戶把新數據發送給服務器
iv.) 服務器收到儲存數據的臨時文件 (臨時文件++存在時間非常短++)
**v.)**服務器馬上把數據存儲起來
**vi.)**服務器響應(資料更新成功)
二、超全局變量
超全局變量是指已經預定義的變量,類似於系統已經定義的函數,分別在於這次是變量。
2.1 $_GET
=> 專門用於儲存從GET請求中收集到的數據,收集到的數據會以數組的方式儲存 ( [標]=>[值] ),
若是不知道數組大家可以先稍微看一下上期的文章哈。

=> 比如我在表單(get請求)上的name欄填寫了111。password欄填寫了111111

=> 提交之後就會自動填寫到url中(?標=值 & 標=值),以數組的方式儲存。
php
//提交後,get請求收集到的數據會存到$_GET變量中
print_r($_GET); //因為是數組所以要用print_r()
::輸出:Array([username]=>111 [passsword]=>111111)
//也可以單獨引出數據
echo $_GET["username"]; //因為是字符,所以用echo
::輸出:111

2.2 $_POST
跟$_GET大差不差,分別只在於:
- post提交的數據,不會顯示在url上(不可見)。
- post提交的數據會存於$_POST中。
=> post會用於傳輸個人資料等敏感訊息(數據不顯示,需抓包才能看到)
三、實際操作
接收上傳數據主要有3個步驟: 表單製作、數據處理、存儲數據。
3.1 表單製作
* 要是看不懂下面的代碼,可以稍微看一看++前端篇1++(文末鏈接)
html
<form action="" method="get"> //以get的方式接收數據
name:<input type="text" name="username"><br> //下標="username",值=輸入的數值
password:<input type="password" name="password"><br> //下標="password"
<input type="submit" value="上傳">
</form>
//POST也是同理可證
<form action="" method="post"> //只是數據接收方式不同而己
* input 中的name參數等於甚麼,下標就是甚麼

3.1.1 數據為圖片
若要上傳文件類的數據,所用的代碼就與字符串的不一樣。首先就要滿足2個條件
-
method屬性=表單提交方式必須為POST
-
enctype屬性=form表單屬性,用以規範表單數據的編碼方式enctype="multipart/form-data"
=> 默認的編碼方式無法上傳2進制文件,會轉義特殊字符。
html
<form action="數據要提交到的網址" method="post" enctype="multipart/form-data">
<input type="file">
</form>
::$_FILES變量默認接收上傳檔案
**$_FILES的下標是定死的,不像name和password一樣是自定義的
::分別是[name], [type], [tmp_name], [error], [size]
[name]=文件原始名
[type]=MIME類型
[tmp_name]=臨時存儲路徑
[error]=文件是否上傳成功
[size]=文件大小(KB)
3.2 數據處理
=> 密碼需要通過加密儲存,用戶名可能有多餘的空格需要刪除,又或者會有中文亂碼的問題。還要將同一類數據賦值到統一變數中,方便存儲。
3.2.1 空格刪除
把名字旁多餘的空格刪除。

=> 會把"111"左邊的所有空格刪除
php
//get和post都是一樣的
trim($_POST["username"]); //把值兩邊的空格刪掉
trim($_GET["username"]); //從收集的數據中,找到標為"username"的值
echo trim(" HI ");
::輸出:HI
3.2.2 密碼加密
把密碼加密成32位密文,確保安全存儲。
php
//get和post都是一樣的
md5($_GET["password"]); //從收集的數據中,找到標為"password"的值
md5($_POST["password"]); //把值加密成32位密文
3.2.3 臨時存儲至統一變量
因為存儲命令中需要輸入具體的值,將其賦值到統一變量中就不用每次都重新手動輸入不同的值。
php
$username=trim($__POST['username']); //把空格刪除後把值賦到$username變量中
$username=trim($__GET['username']); //每次接收 用戶名 數據,都會存到$username變量中
$password=md5($_POST["password"]); //把數據加密後把值賦到$password變量中
$password=md5($_GET["password"]); //每次接收 密碼 數據,都會存到$password變量中
//get和post都是一樣的
3.2.4 其他字符串處理函數
這裡只跟大家講功能哈,怎麼個用法大家用的時侯查一下就好,不用特別記。
- ltrim()
=> 刪除字符串左邊的空白字符,或指定字符
- rtrim()
=> 刪除字符串右邊的空白字符,或指定字符
- trim()
=> 刪除字符串兩邊的空白字符,或指定字符
- strlen()
=> 獲取字符串的長度
- substr()
=> 字符串截取
- str_replace()
=> 字符串替代
- strtolower()
=> 將字符串(英文)轉為小寫(a,b,c)
- strtoupper()
=> 將字符串轉為大寫(A,B,C)
- strip_tags()
=> 刪除字符串的<html>、<xml>、<php>、<js>標籤
- htmlspecialchars()
=> 把一些預定義字符轉換為HTML實體字符
php
echo htmlspecialchars("<hr>"); //<hr>本來是具有換行功能的
::輸出:<hr> //<hr>失去換行了功能,會直接輸出
::後面講數據庫的時侯會細說
3.2.4.1 輸出特殊字符
字符如空格符、大小於符是不能直接輸出的,不然在網頁上顯示不出來。
html
= 表示空格符
& = 表示 & 符號
< = 表示 < (小於符)
> = 表示 > (大於符)
3.3 數據儲存
=> 收集到的數據會統一存儲到指定的文件中
php
$username=trim($__POST['username']); //刪掉空格後,把數據存儲到$username變量中
$password=md5($_POST["password"]); //把密碼加密儲存到$password變量中
file_put_contents(<儲存到哪個文件>.<數據1>." ".<數據2>."\n");
//name和password一起保存到同一文件中
//帳號和密碼之間用空格隔開
//接一個換行符(換行以存儲另一組數據)
::假設:
$username="xiaofong";
$password=(123456);
file_put_contents('1.txt',$username." ".$password."\n");
::輸出(在1.txt文件中):xiaofong 123456(換行)
四、小結
大家只需要記住它們的功能和運作邏輯就可以了,實操可以讓AI幫忙寫代碼,具體的之前已經說過了,這裡就不多說了。接我們會開始研究後端python、數據庫mysql以及分析漏洞哈。大家敬請期待了。
post抓包:如何使用burpsuite實現0元購? -CSDN博客
trae AI寫代碼:後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客
前端HTML: