PHP上传图片的路径保存在数据库中,根据图片路径显示图片
鉴于上一篇《PHP上传图片到数据库并可以进行显示》链接描述有笔友提出了改进意见,下面这篇文章就是采纳改进意见进行修改的另外一种方案。
1、创建数据表
CREATE TABLE image( id int(4) unsigned NOT NULL AUTO_INCREMENT, name varchar(100) default NULL, path varchar(100) default NULL, time timestamp default CURRENT_TIMESTAMP, PRIMARY KEY(id) )engine=myisam DEFAULT charset=utf8
2、新建一个uploads文件夹
uploads文件夹下面新建一个images文件夹(用来存放上传后的图片的文件夹)
,创建index.php(用于点击选择文件后提交的页面),upimage.php(实现图片上传的代码存放),getimage.php(实现图片显示的代码存放)
3、用于点击选择文件后提交页面的index.php
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>图片上传和下载</title> </head> <body> <center> <h2>文件上传</h2> <!-- 文件上传得form表单 --> <form action="upimage.php" method="post" enctype="multipart/form-data"> 上传图片: <input type="file" name="pic"> <input type="submit" value="上传"> </form> </center> </body> </html>
3、实现图片上传的代码存放
<?php //1.获取上传文件信息 $upfile=$_FILES["pic"]; //定义允许的类型 $typelist=array("image/jpeg","image/jpg","image/png","image/gif"); $path="./images/";//定义一个上传后的目录 //2.过滤上传文件的错误号 if($upfile["error"]>0){ switch($upfile['error']){//获取错误信息 case 1: $info="上传得文件超过了 php.ini中upload_max_filesize 选项中的最大值."; break; case 2: $info="上传文件大小超过了html中MAX_FILE_SIZE 选项中的最大值."; break; case 3: $info="文件只有部分被上传"; break; case 4: $info="没有文件被上传."; break; case 5: $info="找不到临时文件夹."; break; case 6: $info="文件写入失败!";break; }die("上传文件错误,原因:".$info); } //3.本次上传文件大小的过滤(自己选择) if($upfile['size']>100000){ die("上传文件大小超出限制"); } //4.类型过滤 if(!in_array($upfile["type"],$typelist)){ die("上传文件类型非法!".$upfile["type"]); } //5.上传后的文件名定义(随机获取一个文件名) $fileinfo=pathinfo($upfile["name"]);//解析上传文件名字 do{ $newfile=date("YmdHis").rand(1000,9999).".".$fileinfo["extension"]; }while(file_exists($path.$newfile)); //6.执行文件上传 //判断是否是一个上传的文件 if(is_uploaded_file($upfile["tmp_name"])){ //执行文件上传(移动上传文件) if(move_uploaded_file($upfile["tmp_name"],$path.$newfile)){ echo "文件上传成功!"; //将文件名和路径存储到数据库 $dbms = 'mysql'; //数据库类型 $host = 'localhost'; //数据库主机名 $dbName = 'smart_lock'; // 使用的数据库 $user = 'root'; //数据库连接用户名 $pass = '123456'; //对应的密码 $dsn ="mysql:host = $host;dbname=$dbName"; $pdo = new PDO($dsn,$user,$pass); $data = addslashes(fread(fopen($pic,"r"),filesize($pic))); //将图片的名称和路径存入数据库 $query = "INSERT INTO image(name,path)VALUES('$newfile','$path$newfile')"; $result = $pdo -> query($query); if($result){ echo"文件已存储到数据库"; } else{ echo"请求失败,请重试"; } }else{ die("上传文件失败!"); } }else{ die("不是一个上传文件!"); } ?>
4、实现图片显示的getimage.php
<?php //$id = isset($_GET['id'])?intval($_GET['id']):1; //$id = $_GET['id']; $id = 2; //id正常应该是通过用户填入的id获取(客户端发送过来的查询数据id) $dbms = 'mysql'; //数据库类型 $host = 'localhost'; //数据库主机名 $dbName = 'smart_lock'; // 使用的数据库 $user = 'root'; //数据库连接用户名 $pass = '123456'; //对应的密码 $dsn = "mysql:host = $host;dbname=$dbName"; $pdo = new PDO($dsn,$user,$pass); $query = "select name,path from image where id=$id"; //数据查询 $result = $pdo->query($query); if($result){ $result = $result->fetchAll(2); echo "<img src=".$result[0]['path'].">"; // $path="./uploads/";//定义一个上传后的目录 // echo "<img src=$path".$result[0]['name'].">"; } else{ echo "Handle errors"; } ?>
5、运行结果
(1)图片上传成功后在数据库中的存储如下
运行getimage.php文件最终显示上传的图片如下
最后打开images文件还可以看到上传的图片均已保存在该文件夹中。
结语:本人刚接触PHP不久,自知能力不够水平有限,该文中若存在什么不足或需改进之处还请大家多多指正。
相关推荐
songshijiazuaa 2020-09-24
zyyjay 2020-11-09
xuebingnan 2020-11-05
samtrue 2020-11-22
stefan0 2020-11-22
yifangs 2020-10-13
hebiwtc 2020-09-18
天步 2020-09-17
83911535 2020-11-13
whatsyourname 2020-11-13
zhouyuqi 2020-11-10
Noneyes 2020-11-10
mathchao 2020-10-28
王志龙 2020-10-28
wwwsurfphpseocom 2020-10-28
diskingchuan 2020-10-23
savorTheFlavor 2020-10-23