前言
在對php語法有一定了解之後開始,這是第乙個php練手專案,涵蓋的知識有
公共部分的引用
表單的提交
請求的接收與響應
inte***ce+implements的使用
基於檔案的所處理的增刪改查
json的格式化與字串序列化
專案位址message board
整體結構的介紹
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](然後在各個頁面通過```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)```、字串拼接:"......."回車換行符不會打斷整體字串只以《"》為標識;
2. 用到getall()對資料進行提取,具體請看[lyfile的編寫](#lyfile);
2. 用到delmess()對資料進行刪除,具體請看[lyfile的編寫](#lyfile);
3. 相關姿勢有:$.ajax傳送請求、es6字串模板、頁面元素內容賦值、php請求返回echo ***;
..到這,整體結構就完成了。
lyfile的編寫
lyfile是我花的時間比較多的一塊,因此單獨拉出來講,前三段主要說個人對自己書寫方式的必要性;
inte***ce的必要性
* 鍛鍊對專案所需要功能的整體把握能力;
* 實現者可以通過inte***ce的描述對功能進行逐個實現,不受其他干擾;
* 呼叫者可以通過inte***ce相關介紹,了解介面呼叫方式;
* inte***ce雖然可以繼承,但他不是類。
使用類的必要性
* 提高復用性,自身呼叫相關引數採用$this->***進行呼叫,呼叫者通過例項化相關類,呼叫相關方法;
* 安全性,只有提供相關介面的方法才能進行呼叫,否則不能呼叫;
* 延展性,當需要新增新的介面時,之需要在內部再進行新增相應方法即可,不受其他介面影響;
內部變數
* file_path 因為所有的檔案都儲存在liuyan.txt檔案上,因此file_path就儲存該檔案的路徑
* 常量 errorcode、succcode靜態標識錯誤和正確狀態,避免再**中使用-1,0標識,提高**可讀性
additem
* 首先了解其要做的事:1、獲取資料,2、新增相應的id(為啥這麼幹將在delitem進行說明),3、再lyfile.txt寫入;
* 新增資料獲取是通過呼叫處傳過來的,在此不進行贅述;
* 一條資料放在一行的形式進行儲存;
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 .="\r\n";
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大致的一些語法和操作進行。編碼的思路我認為應該是先整體規劃,再部分實現的乙個過程。
php學習之留言板
在對php語法有一定了解之後開始,這是第乙個php練手專案,涵蓋的知識有 root addmess.php delmess.php index.php show.php commom view head.html common lyfile.php css bootstrap.min.css dat...
php學習 留言版 mguestbook 0 03
一,更新內容 對 訪問進一步封裝。增加了生成並匯入 使用 sql隨機生成的常用漢字。二,知識點 php方面 php對mysql 資料庫擴充套件有三種,分別為 其中 mysqli 算是支援最完善的,優劣參見 常用到的獲取行結果集的方法和其區別 其中mysqli result fetch array 引...
PHP學習筆記(四)極簡留言板
第乙個檔案用來連線資料庫 用來連線mysql資料庫 conn mysql connect localhost root or die 資料庫鏈結錯誤 用來選擇database mysql select db bbs conn 使用中文編碼 mysql query set names gbk 用來寫的...