1. 寫一個自定義異常類來處理上傳過程以及各種錯誤
2. (選做) 寫一個與指定數據表綁定的類, 實現基本的模型功能,例如查詢, 新增, 更新,刪除等操作
課程筆記:
我們用php中專門用來處理錯誤的類,異常類Exception。有兩個參數,第一個是提示信息,第二個是自定義的錯誤代碼。我們可以通過自定義一個雷去繼承異常類,來自定義我們提示錯誤的代碼。
上傳文件需要用表單提交,請求類型必須是post,數據編碼類型是復合類型。PHP使用一個超全局變量$_FILES來處理文件上傳。
允許上傳的文檔類型,上傳文件的最大長度,上傳到服務器的指定目錄路徑。是通過三個變量將我們設置的參數設置進去。
判斷文件是否上傳成功,通過$_FILES里面的error這個鍵來判斷文件是否上傳成功,當返回值是0,則代表上傳成功,如果不等于0說明出錯。
判斷文件擴展名是否正確,通過explode函數將文件名分割,然后得到他的拓展名,看看是否在自己設置的文檔類型里面
寫一個自定義異常類來處理上傳過程以及各種錯誤
<?php namespace _1012_4; //自定義類 use Exception; class CalException extends Exception { public function __construct($message = "", $code = 0) { parent::__construct($message, $code); } public function errorInfo() { return <<<"error" <h2> <strong>{$this->getCode()}:</strong> <span style="color: red;">{$this->getMessage()}</span> </h2> error; } public function __toString() { parent::__toString(); // TODO: Change the autogenerated stub } } try{ //文件上傳 //1.配置上傳參數 //允許上傳的文檔類型 $fileType = ['jpg','jpeg','png','gif']; //允許上傳的文件最大長度 $fileSize = 3145728; //上傳到服務器上的指定目錄 $filePath = '/uploads/'; //原始文件名 $filename = $_FILES['my_file']['name']; //臨時文件名 $tmpfilename = $_FILES['my_file']['tmp_name']; //判斷文件是否上傳成功 $uploadError = $_FILES['my_file']['error']; if($uploadError>0){ switch ($uploadError){ case 1: case 2:throw new CalException('上傳文檔不允許超過3M<br>',101); case 3:throw new CalException('上傳文件不完整<br>',102); case 4:throw new CalException('沒有文件被上傳<br>',103); default:throw new CalException('異常錯誤<br>',107); } } //判斷文件拓展名是否正確 $extension = explode('.',$filename)[1]; if(!in_array($extension,$fileType)){ // die('不允許上傳'.$extension.'文件類型'); throw new CalException('不允許上傳'.$extension.'文件類型<br>',104); } //把文件重命名,防止命名重復:md5+時間戳 $filename = date('YmdHis',time()).md5(mt_rand(1,99)).'.'.$extension; //上傳文件 if (is_uploaded_file($tmpfilename)){ if (move_uploaded_file($tmpfilename,__DIR__.$filePath.$filename)){ echo '<script>alert("上傳成功");history.back();</script>'; }else{ // die('文件無法移動到指定目錄,請檢查目錄權限'); throw new CalException('文件無法移動到指定目錄,請檢查目錄權限<br>',105); } }else{ // die('非法操作'); throw new CalException('非法操作<br>',106); } }catch (CalException $e){ echo $e->errorInfo(); }
點擊 "運行實例" 按鈕查看在線實例
在老師上課講的上傳文件的基礎上,我們加入自己的一個錯誤異常類,然后在每個die語句后面拋出異常,然后用try,catch語句獲取錯誤信息,并且顯示在頁面上
寫一個與指定數據表綁定的類, 實現基本的模型功能,例如查詢, 新增, 更新,刪除等操作
類名與表名要對應,類中的屬性要與表中的字段對應。
<?php namespace _1012; use PDO; //類名和表名要對應起來 class staff{ //類屬性要與表中的字段對應 private $staff_id; private $name; private $age; private $sex; private $position; private $hiredate; //屬性重載 public function __get($name) { return $this->$name; } public function __set($name, $value) { $this->$name = $value; } public function __construct() { $this->hiredate = date('Y/m/d',$this->hiredate); $this->sex = $this->sex ? '男':'女'; } } $pdo = new PDO('mysql:host=127.0.0.1;dbname=huangsijie','root','root'); //查詢 $stmt = $pdo->prepare('select * from `staff`'); $stmt->setFetchMode(PDO::FETCH_CLASS,staff::class); $stmt->execute(); while ($staff = $stmt->fetch()){ echo "<li>{$staff->staff_id}:{$staff->name}-----{$staff->position}</li>"; } //刪除 $stmt = $pdo->prepare('delete from `staff` where staff_id=1'); $stmt->setFetchMode(PDO::FETCH_CLASS,staff::class); $stmt->execute(); echo $stmt->rowCount(); //修改 $stmt = $pdo->prepare('update `staff` set sex = "2" where staff_id =2'); $stmt->setFetchMode(PDO::FETCH_CLASS,staff::class); $stmt->execute(); echo $stmt->rowCount(); //增加 $stmt = $pdo->prepare('insert into `staff` (staff_id,name,age,sex) values (1,"黃思杰",22,"1")'); $stmt->setFetchMode(PDO::FETCH_CLASS,staff::class); $stmt->execute(); echo $stmt->rowCount();
點擊 "運行實例" 按鈕查看在線實例
這里用了簡單的四個語句把增刪改查,后期如果可以的話,應該把這四個語句放進一個db類里,通過調用對象的方法去實現這些功能。
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號