初識通用數據庫操作類——前端easyui-datagrid,form(php),實現代碼比較簡單,具體實現步驟請看下文。
實現功能:
左端datagrid顯示簡略信息,右側顯示選中行詳細信息,數據庫增刪改
(1)點擊選中行,右側顯示詳細信息,其中【新增】、【修改】、【刪除】按鈕可用,【保存】按鈕禁用
(2)點擊【新增】按鈕,【修改】,【刪除】按鈕禁用,【保存】按鈕啟用
(3)點擊【修改】按鈕,【新增】,【刪除】按鈕禁用
難點:通用數據庫操作類中insert方法跟update方法
最終效果圖:
前端功能不是很完善,按鈕之間邏輯還是有點問題,最後補充前端代碼
其中Formain.php對前端傳值判斷,並調用actSQL.class.php獲得結果
代碼比較簡單
如下:
<?php require('include/mysql_connect/actSQL.class.php'); $key=$_REQUEST['key']; $a=new actSQL('localhost','root','1234','tpss'); //獲取信息 if($key=='1') { $a->getAllData('t_prekeychart'); } if($key=='2') { $objectstr=$_REQUEST['object']; if($a->insertData($objectstr,'t_prekeychart')) { echo json_encode("true"); }else{ echo json_encode("false"); } //test //$test='{"keychartid":"2","keyid":"2","keychartname":"2","level":"2","showtype":"2","helptips":"2","keylevel":"2","ishmap":"2"}'; //$a->insertData($test,'t_prekeychart'); } if($key=='3') { $prekey=$_REQUEST['keychartid']; $prekeyname='keychartname'; if($a->delData($prekey,$prekeyname,'t_prekeychart')) { echo json_encode("true"); }else{ echo json_encode("false"); } } if($key=='4') { $objectstr=$_REQUEST['object']; $prekeyname='keychartid'; if($a->updData($objectstr,$prekeyname,'t_prekeychart')) { echo json_encode("true"); }else{ echo json_encode("false"); } } ?>
看Formain.php中出現的類的各個方法,簡單思考一下
其中
getAllData($tablename)獲取表格的所有信息,這個方法比較簡單,一個簡單的sql語句就可以搞定,最後將結果json格式返回即可
delData($prekey,$prekeyname,$tablename)刪除指定信息,這個更簡單,就不說了
insertData( $objectstr,$tablename ) ,其中$objectstr是json格式的字符串,$tablename表名,
難點是將拼湊成 insert into $tablename (......) values(.....) 這種語句
解決辦法:
(1)根據$tablename獲取所有的列名,並將列名數組轉換為字符串,為最後sql語句的拼湊做准備,除此獲取列名還有個目的,往下看
(2)將json格式的字符串$objectstr轉換為關聯數組,調用json_decode() 方法
補充json_decode()方法
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
接受一個 JSON 格式的字符串並且把它轉換為 PHP 變量,其中assoc,當該參數為 TRUE 時,將返回 關聯數組 。
(3)按 照查詢到的列名順序查詢數據,數據為空時,賦值為NULL , 將結果存到數組,防止數據庫插入數值錯位(獲取列名的另個原因)
(4)將(3)的結果轉化為字符串,調用implode()方法
補充implode()方法:
string implode(string glue, array pieces);
本函數將數組的內容組合成一個字符串,參數 glue 是字之間的分隔符號
(5)拼湊sql語句字符串,然後向數據庫插入
updData($objstr,$prekeyname,$tablename)方法難點也是在於sql語句的字符串拼湊,拼湊格式應該如下
update $tablename set ..... where $prekeyname=$data[$prekeyname]
前兩步同insertData()
(3)遍歷列名字符數組,獲取非主鍵名的列名值,按照 “列名=列名值” 的字符串格式存入數組 ,這裡就是set 後面部分的不完全字符串
(4)將(3)結果轉換為字符串,將數組元素以 ',' 分隔開,這個就是set後面最後的字符串 格式為“xx=xx,xx=xx”
(5)拼湊sql字符串,然後更新數據庫
insertData()以及updData()函數如下
/* * 添加信息 * @param:$objstr:json風格的數據庫插入信息字符串 * $tablename:表名 */ function insertData($objstr,$tablename) { $dbc=$this->conData(); if($dbc) { $columnname=array(); $columnname=$this->getColumns($tablename); //echo $columnname[0]; $clos=implode(',',$columnname); //將列名數組轉換為字符串 //echo $clos; $data=json_decode($objstr,true); //將json格式的字符串轉換為關聯數組 //echo $value['keychartname']; $values=array(); foreach($columnname as $value) { //按照查詢到的列名查詢數據,數據為空的,賦值為NULL,防止數據庫插入數值錯位 //echo $data[$value]."<br>"; if(isset($data[$value])) { array_push($values,$data[$value]); }else{ $data[$value]=NULL; array_push($value,$data[$value]); } } $strvalue=implode(',',$values); //echo $strvalue; /* * SQL: insert into $tablename($clos) values(...) */ $sql=<<<SQL insert into $tablename($clos) values($strvalue); SQL; //echo $sql; $res=mysqli_query($dbc,$sql); if($res) { return true; }else{ return false; } }else{ echo "連接錯誤!"; } } /* *更新信息 *@param: $objstr:json風格的數據庫更新信息字符串 * $tablename:表名 * $prekeyname:主鍵名 * */ function updData($objstr,$prekeyname,$tablename) { $dbc=$this->conData(); if($dbc) { $columnname=array(); $columnname=$this->getColumns($tablename); //$clos=implode(',',$columnname); //將列名數組轉換為字符串 $data=json_decode($objstr,true); //將json格式的字符串轉換為關聯數組 $sets=array(); foreach($columnname as $value) { //列名不等於主鍵名獲取值 if($prekeyname!=$value) { //set $value=$data[$value]; array_push($sets,"$value=$data[$value]");//接好的set語句部分 } } //$sets數組轉化為字符串 $stringsets=implode(',',$sets); //echo $stringsets; /* * SQL:update $tablename set ..... where $prekeyname=$data[$prekeyname]; * */ $sql=<<<SQL update $tablename set $stringsets where $prekeyname=$data[$prekeyname]; SQL; $res=mysqli_query($dbc,$sql); if($res) { return true; }else{ return false; } }else{ echo "連接錯誤"; } } /* *獲取表的所有列名 *@param:$tablename:表名 */ function getColumns($tablename) { $dbc=@mysqli_connect('localhost','root','1234','information_schema'); if(!$dbc) { echo "Connect Error".mysqli_connect_error($dbc); }else { //連接成功,從表COLUMNS獲取表的所有列名 $sql="select COLUMN_NAME from columns where TABLE_NAME='$tablename'"; $res=@mysqli_query($dbc,$sql); $items=array(); if($res) { while($row=mysqli_fetch_array($res,MYSQLI_ASSOC)) { $columnname=$row['COLUMN_NAME']; array_push($items,$columnname); } return $items; mysqli_close($dbc); } else{ echo "查詢失敗,請檢查SQL語句!"; } } }
以上就是本文全部內容,希望大家喜歡。