摘要:用到對數據進行刪除,具體請看的編寫相關姿勢有發送請求字符串模板頁面元素內容賦值請求返回到這,整體結構就完成了。
前言
整體結構的介紹在對php語法有一定了解之后開始,這是第一個php練手項目,涵蓋的知識有
公共部分的引用
表單的提交
請求的接收與響應
interface+implements的使用
基于文件的所處理的增刪改查
json的格式化與字符串序列化
項目地址message board
ps:本文不詳細介紹知識點,只是大概描述下心得,閱讀者如果有心閱讀可以參看相關代碼學習,由于本人前端出身,對前端相關姿勢也只是一筆帶過,但是會給出相應關鍵字或鏈接;
root │ addMess.php │ delMess.php │ index.php │ show.php │ ├─commom_view │ head.html │ ├─common │ lyfile.php │ ├─css │ bootstrap.min.css │ └─data liuyan.txt
編寫過程 公共部分php相關求情直接放在根目錄下,commom_view存放視圖相同部分,引入了bs的樣式文件存放在css中,數據txt文件存放在data文件夾下,common文件夾下存放data的liuyan.txt文件夾讀取相關方法;
1. 首先編寫公共頭部包含標題,相關功能頁面鏈接,為了讓整體頁面好看一點引入了[bs3](http://www.bootcss.com/),然后在各個頁面通過```include (filepath)```的方式進行引入操作; 2. 對整體了解,lyfile需要實現的功能有:新增、刪除、展現,先寫接口方法addItem、delItem、getAll; 3. 編寫類LyFile實現接口中定義的三個方法(未真正編寫代碼)在需要引入的頁面同樣通過 include 的方式進行引入。首頁
1. 首頁就是一張表單,用做相關信息的提交;新增完成頁面
1. 表單提交后跳轉到addMess頁面,做的主要是提交信息的存儲以及,當前所提交信息的展示; 2. 用到addItem方法進行數據添加,具體請看[lyfile的編寫](#lyfile); 3. 頁面相關姿勢有:post請求參數的獲取:```$_POST[varitename]```,登錄人IP獲取:```$_SERVER["REMOTE_ADDR"]```、日期格式化:```date( string $format [, int $timestamp ] )```、數組鍵值對初始化方式:```array(key=>value)```、字符串拼接:"....{$varita}..."回車換行符不會打斷整體字符串只以《"》為標識;留言展示頁面
1. 查看留言要做的是從數據文件拿到相應的數據,然后通過循環進行渲染 2. 用到getAll()對數據進行提取,具體請看[lyfile的編寫](#lyfile); 3. 頁面相關姿勢有:foreach數組循環便利、break跳出數組循環刪除留言
1. 在展示頁上,咱們對留言進行刪除,這里沒有直接采用href跳鏈的通過get請求的形式進行,因為這里需要做的只是刪除某條數據然后刷新列表的局部操作,不適合跳轉鏈接。 2. 用到delMess()對數據進行刪除,具體請看[lyfile的編寫](#lyfile); 3. 相關姿勢有:$.ajax發送請求、es6字符串模板、頁面元素內容賦值、php請求返回echo xxx;
..到這,整體結構就完成了。
lyfile的編寫interface的必要性lyfile是我花的時間比較多的一塊,因此多帶帶拉出來講,前三段主要說個人對自己書寫方式的必要性;
* 鍛煉對項目所需要功能的整體把握能力; * 實現者可以通過interface的描述對功能進行逐個實現,不受其他干擾; * 調用者可以通過interface相關介紹,了解接口調用方式; * interface雖然可以繼承,但他不是類。使用類的必要性
* 提高復用性,自身調用相關參數采用$this->xxx進行調用,調用者通過實例化相關類,調用相關方法; * 安全性,只有提供相關接口的方法才能進行調用,否則不能調用; * 延展性,當需要添加新的接口時,之需要在內部再進行新增相應方法即可,不受其他接口影響;內部變量
* file_path 因為所有的文件都存儲在liuyan.txt文件上,因此file_path就保存該文件的路徑 * 常量 ERRORCODE、SUCCCODE靜態標識錯誤和正確狀態,避免再代碼中使用-1,0標識,提高代碼可讀性addItem
* 首先了解其要做的事:1、獲取數據,2、添加相應的id(為啥這么干將在delItem進行說明),3、再lyfile.txt寫入; * 新增數據獲取是通過調用處傳過來的,在此不進行贅述; * 添加id:這里采用獲取最后一條留言的id值(不是索引值),在其基礎上+1以此來保持id的唯一性,具體功過代碼來說明; * 一條數據放在一行的形式進行存儲;
public function addItem($write_data){ //1.獲取最后一行數據的id并+1 $lastId = $this->getLastId(); $write_data["id"] = $lastId+1; //在文件末尾寫入的方式打開文件 $handle = fopen($this->file_path,"a"); //數組轉字符串 $ly = $this->itemString($write_data); //字符串寫入 $str = fwrite($handle,$ly); //關閉文件 fclose($handle); } //獲取最后一行的id private function getLastId(){ //獲取所有文件內容 $lyData = $this->getAll(); //計算行數 $lyLen = count($lyData); //當沒有數據時,返回位置-1; if($lyLen == 0)return -1; //否則返回相應的id; return $lyData[$lyLen-1]["id"]; } //獲取所有文件的內容 public function getAll(){ //逐行讀取文件,以數組的形式返回,每一項為item字符串; $all_item = file($this->file_path); //聲明返回的變量數組 $dataArr = array(); //便利讀組的文件字符數組 foreach($all_item as $item){ //將字符串轉化成數組的形式(注意json_decode第二個參數,不加則返回的是一個對象),并加入到返回的變量數組中。 array_push($dataArr,json_decode($item,true)); } return $dataArr; } //數組轉化成字符串并加入換行符,這里不做贅述 private function itemString($item_data){ $item_str = json_encode($item_data); $item_str .=" "; return $item_str; }getAll
delItem機智的同學早已發現,在上面已經實現了這個函數,那么咱們就可以愉快的拿起來用了,不用再重復寫了。
這要干的就是1、通過id找到相應的項,2、找到就刪除并返回成功碼,否則返回錯誤碼
public function delItem($id){ //獲取所有的數據 $allLy = $this->getAll(); //初始化要刪除的索引 $delIndex = -1; //找到需要刪除的ID所對應的對象 foreach($allLy as $curIndex =>$lyItem){ //如果找到相應的id就對$delIndex進行賦值 if($lyItem["id"] == $id){ $delIndex = $curIndex; break; } } //如果沒找到索引號,直接退出并返回錯誤碼(對象內常量的引用是self ::CONSTVAR) if($delIndex==-1)return self ::ERRORCODE; //刪除數組中索引位置的元素; array_splice($allLy, $delIndex ,1); // 將新的數組元素寫入到文件中 if($this->allWrite($allLy)==self ::SUCCCODE)return self ::SUCCCODE; //讀寫出現錯誤 return self ::ERRORCODE; } //新的數組元素寫入 private function allWrite($allLy){ //以覆蓋的方式寫入文件 $handle = fopen($this->file_path,"w"); //初始化寫入字符串 $writeStr = ""; foreach($allLy as $lyItem){ //將item轉成字符串,并進行鏈接。因為之前addItem定義過這個方法,因此再次得到復用 $writeStr.=$this->itemString($lyItem); } //將字符串寫入 fwrite($handle,$writeStr); fclose($handle); //返回操作正確碼 return self ::SUCCCODE; }結束語
這里主要對php大致的一些語法和操作進行。編碼的思路我認為應該是先整體規劃,再部分實現的一個過程。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22834.html
摘要:前言設置項目的域名站點的時候,需要對做一些對應的重寫配置,用來做相關路由,否則會報。 前言 設置laravel項目的域名站點的時候,需要對nginx做一些對應的重寫rewrite配置,用來做相關路由,否則會報404。 nginx.conf配置 server { listen 80; server_name xxx.com; #域名 root /data/www...
摘要:前言設置項目的域名站點的時候,需要對做一些對應的重寫配置,用來做相關路由,否則會報。 前言 設置laravel項目的域名站點的時候,需要對nginx做一些對應的重寫rewrite配置,用來做相關路由,否則會報404。 nginx.conf配置 server { listen 80; server_name xxx.com; #域名 root /data/www...
摘要:底層的數據結構就是數組鏈表紅黑樹,紅黑樹是在中加進來的。負載因子哈希表中的填滿程度。 前言 把 Java 容器的學習筆記放到 github 里了,還在更新~其他的目前不打算抽出來作為文章寫,感覺挖的還不夠深,等對某些東西理解的更深了再寫文章吧Java 容器目錄如下: Java 容器 一、概述 二、源碼學習 1. Map 1.1 HashMap 1.2 LinkedHashM...
摘要:當前請求在指令中指定的值。請求主機頭字段,否則為服務器名稱。客戶端信息客戶端信息這個變量可以限制連接速率。已經經過驗證的用戶名。請求使用的協議,通常是或。請求到達服務器的端口號。包含請求參數的原始,不包含主機名,如。 rewrite配置在server{}、location{}、if{}段中 ,對Url中除去域名和參數的字符串起作用 一、語法:rewrite regex replacem...
摘要:之所以不行是應為,變量方法何值還不確定,在沒有實例的內存中運行的時候會報錯但是非靜態方法或者函數是可以調用靜態方法和靜態變量的,因為值或結果已經固定。 1.main main方法 java 類的主方法,相當于php類文件的index方法。默認執行。 java的main方法 必須聲明為 public static void main(String [] args) 其中static是靜態...
閱讀 3482·2021-11-18 10:02
閱讀 1612·2021-10-12 10:12
閱讀 2990·2021-10-09 09:53
閱讀 4858·2021-09-09 09:34
閱讀 846·2021-09-06 15:02
閱讀 2777·2021-08-05 10:02
閱讀 3133·2019-08-30 15:44
閱讀 3120·2019-08-28 18:04