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类里,通过调用对象的方法去实现这些功能。