PHP上傳圖片的路徑保存在數據庫中,根據圖片路徑顯示圖片

鑑於上一篇《PHP上傳圖片到數據庫並能夠進行顯示》連接描述有筆友提出了改進意見,下面這篇文章就是採納改進意見進行修改的另一種方案。php

一、建立數據表html

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

二、新建一個uploads文件夾
uploads文件夾下面新建一個images文件夾(用來存放上傳後的圖片的文件夾)
,建立index.php(用於點擊選擇文件後提交的頁面),upimage.php(實現圖片上傳的代碼存放),getimage.php(實現圖片顯示的代碼存放)
圖片描述mysql

三、用於點擊選擇文件後提交頁面的index.phpsql

<!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>

三、實現圖片上傳的代碼存放數據庫

<?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("不是一個上傳文件!");
  }
?>

四、實現圖片顯示的getimage.phppost

<?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";
    }
?>

五、運行結果
(1)圖片上傳成功後在數據庫中的存儲以下
圖片描述fetch

運行getimage.php文件最終顯示上傳的圖片以下
圖片描述spa

最後打開images文件還能夠看到上傳的圖片均已保存在該文件夾中。code

結語:本人剛接觸PHP不久,自知能力不夠水平有限,該文中若存在什麼不足或需改進之處還請你們多多指正。orm

相關文章
相關標籤/搜索