後端開發技術教學(三) 表單提交、數據處理

上回:後端開發技術教學(二) 條件指令、循環結構、定義函數 -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 复制代码
&nbsp; =  表示空格符
&amp;  =  表示 & 符號
&lt;   =  表示 < (小於符)
&gt;   =  表示 > (大於符)

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:

前端開發技術教學(一) -CSDN博客

前端開發技術教學(二) -CSDN博客

相关推荐
倔强的皮皮虾8 分钟前
sharding proxy 实战读写分离,分库分表
后端
ONE_Gua10 分钟前
魔改chromium源码——解除 iframe 的同源策略
前端·后端·浏览器
现在没有牛仔了10 分钟前
举例说明什么是Redis缓存击穿,以及如何解决。
java·redis·后端
用户15129054522010 分钟前
mysql8的collate问题和修改
前端
wave77712 分钟前
spring的bean加载方式-如何解决循环依赖-什么是三级缓存-源码走读
后端
倔强的皮皮虾13 分钟前
docker + jenkins 自动化部署
后端
用户15129054522014 分钟前
JSON字符串和java对象的互转【json-lib】
后端
用户15129054522015 分钟前
Abp VNext 入门——让ABP跑起来
后端
用户15129054522016 分钟前
Git使用详细教程(4):git rm使用详解
后端
bobz96517 分钟前
pyside 配合 QT designer
后端