当前位置: 首页 > news >正文

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

上回:後端開發技術教學(二) 條件指令、循環結構、定義函數 -CSDN博客

必要資源:

trae中文版下載網址: TRAE - The Real AI Engineer

phpStudy 2018 : phpStudy - Windows 一键部署 PHP 开发环境 · 小皮出品

目錄

一、表單提交

        1.1  get & post

        1.2 提交流程

二、超全局變量

        2.1  $_GET

        2.2  $_POST

三、實際操作

        3.1  表單製作

        3.1.1  數據為圖片

        3.2  數據處理

        3.2.1  空格刪除

        3.2.2  密碼加密

        3.2.3  臨時存儲至統一變量

        3.2.4  其他字符串處理函數

                3.2.4.1  輸出特殊字符

        3.3  數據儲存

四、小結


        上期我們講解了一些PHP的結構指令及定義函數,那麼這期我們就來說說服務器是怎麼接收用戶提交的數據的。

一、表單提交

        在學習表單提交之前首先需要理解甚麼是get、post和url。

        1.1  get & post

=> 兩個用於請求收集數據的語句。

特性GETPOST
數據位置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中(?標=值 & 標=值),以數組的方式儲存。

//提交後,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(文末鏈接)

<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進制文件,會轉義特殊字符。

<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"左邊的所有空格刪除

//get和post都是一樣的
trim($_POST["username"]);    //把值兩邊的空格刪掉
trim($_GET["username"]);     //從收集的數據中,找到標為"username"的值echo trim("    HI    ");
::輸出:HI

   

        3.2.2  密碼加密

        把密碼加密成32位密文,確保安全存儲。

//get和post都是一樣的
md5($_GET["password"]);    //從收集的數據中,找到標為"password"的值
md5($_POST["password"]);   //把值加密成32位密文

        3.2.3  臨時存儲至統一變量

        因為存儲命令中需要輸入具體的值,將其賦值到統一變量中就不用每次都重新手動輸入不同的值。

$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實體字符

echo htmlspecialchars("<hr>");    //<hr>本來是具有換行功能的
::輸出:<hr>                       //<hr>失去換行了功能,會直接輸出::後面講數據庫的時侯會細說

                3.2.4.1  輸出特殊字符

                字符如空格符、大小於符是不能直接輸出的,不然在網頁上顯示不出來。

&nbsp; =  表示空格符
&amp;  =  表示 & 符號
&lt;   =  表示 < (小於符)
&gt;   =  表示 > (大於符)

        3.3  數據儲存

=> 收集到的數據會統一存儲到指定的文件中

$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博客

http://www.lryc.cn/news/614583.html

相关文章:

  • vscode EIDE 无法编译,提示 “文件名、目录名或卷标语法不正确;
  • WPF 表格中单元格使用下拉框显示枚举属性的一种方式
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • Ignite内部事件总线揭秘
  • Android 之 OOM的产生和解决办法
  • K-Means 聚类
  • 嵌入式第二十三课 !!!树结构与排序(时间复杂度)
  • AD布线时,如何设置线宽和线间距?简单
  • OpenAI 时隔多年再开源!GPT-OSS 120B/20B 发布,支持本地部署,消费级 GPU 即可运行
  • 五十六、【Linux系统nginx服务】nginx虚拟主机实现
  • InfluxDB 权限管理与安全加固(一)
  • leetcode热题——有效的括号
  • 安全合规1--实验:ARP欺骗、mac洪水攻击、ICMP攻击、TCP SYN Flood攻击
  • C++AVL树
  • windows自动获取wsl IP,并开启端口转发。
  • 供应链项目中产品的ABC XYZ分类法弊端(十)
  • 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC
  • [科普] AI加速器架构全景图:从GPU到光计算的算力革命
  • 【0基础3ds Max】主工具栏介绍(上)
  • [链表]142. 环形链表 II
  • Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害数值模拟与预警中的应用(388)
  • 大模型性能测试实战指南:从原理到落地的全链路解析
  • 【Day 19】Linux-网站操作
  • 小程序难调的组件
  • Vite 深度解析:现代前端开发引擎
  • AI 记忆管理系统:工程实现设计方案
  • Introducing Visual Perception Token into Multimodal Large Language Model论文解读
  • 脚本统计MongoDB集合结构信息
  • 关于数据结构6-哈希表和5种排序算法
  • WSL安装MuJoco报错——FatalError: gladLoadGL error