2016-05-30 128 views
1

我只是不清楚如何在過去,我有讓用戶通過表單上傳他們從自己的電腦中選取圖片和JavaScript,像這樣格式化這個 - :上傳圖像文件(不是通過表單,只是在一個文件夾中)通過PHP上傳到MySQL?

$("#uploadimage").on('submit',(function(e) { 
     e.preventDefault(); 


     $.ajax({ 
     url: "../php/upload.php", // Url to which the request is send 
     type: "POST",    // Type of request to be send, called as method 
     data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values) 
     contentType: false,  // The content type used when sending data to the server. 
     cache: false,    // To unable request pages to be cached 
     processData:false,  // To send DOMDocument or non processed data file it is set to false 
     success: function(data) // A function to be called if request succeeds 
     { 

     } 
     }); 
     })); 

該文件發送到PHP腳本:

if(isset($_FILES["file"]["type"])) 
{ 
$validextensions = array("jpeg", "jpg", "png"); 
$maxsize = 99999999; 
$temporary = explode(".", $_FILES["file"]["name"]); 
$file_extension = end($temporary); 
if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") 
) && ($_FILES["file"]["size"] < $maxsize)//Approx. 100kb files can be uploaded. 
&& in_array($file_extension, $validextensions)) { 

$size = getimagesize($_FILES['file']['tmp_name']); 
$type = $size['mime']; 
$imgfp = fopen($_FILES['file']['tmp_name'], 'rb'); 
$size = $size[3]; 
$name = $_FILES['file']['name']; 

$sql = new mysqli("localhost","username","password","sqlserver"); 
$imgfp64 = base64_encode(stream_get_contents($imgfp)); 
$update = "UPDATE sqlserver.imageblob set image='".$imgfp64."', image_type='".$type."', image_name='".$name."', image_size='".$size."' where user_id=".$account['id']; 
$sql->query($update); 

然後,我已經能夠顯示這樣和呼應HTML圖像:

$imgdata = $array['image']; //store img src 
    $src = 'data:image/jpeg;base64,'.$imgdata; 

但現在我需要上傳一個圖片文件次在我已經存儲在一個文件夾中,即../images/image1.png不是從窗體上傳的文件。

理想我會寫:

$imgfile = "../images/image1.png" 

然後插入該到我代替$_FILES['file']['name'] PHP的,但我不知道如何正確地寫出了這一點。我是新來的MySQL,並獲取錯誤消息只是傳遞一個像上面的文件名。

如何將我已存在於我的文件夾中的圖像上載到mysql表中?

我曾嘗試:

enter image description here

+0

也許只是創建一個HTML頁面,使用PHP構建,加載所有的圖像進去。每個圖像都可以有一個onclick處理程序,它會爲它的路徑指定一些javascript變量。然後,您可以使用該路徑發送ajax請求。希望這可以幫助。 – divinemaniac

+0

嘗試'on'('click',(function(e){}));' –

+0

@divinemaniac no我不需要回顯圖像,只需要將它存儲在mysql表中 – skyguy

回答

2

您可以使用DirectoryIterator

保存此文件到您的images文件夾,然後運行它:

<?php 

    $validextensions = array("jpeg", "jpg", "png"); 
    $dir = new DirectoryIterator(dirname(__FILE__)); 
    foreach ($dir as $fileinfo) { 
     if (!$fileinfo->isDot()) { 

      $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); /* GET EXTENSION OF FILE */ 

      if(in_array($extension, $validextensions)){ /* IF FILE IS IMAGE; JPEG, JPG, OR PNG */ 

       /* CHECK IF IMAGE IS ALREADY IN THE DATABASE */ 
       $check = $sql->query("SELECT * FROM image_table WHERE image_col = ?"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */ 
       $check->bind_param("s", $fileinfo->getFilename()); 
       $check->execute(); 
       $check->store_result(); 
       $noofrows = $check->num_rows; 
       $check->close(); 

       if($noofrows == 0){ /* IF IMAGE NAME IS NOT YET IN THE DATABASE */ 
        /* INSERT FILE NAME TO DATABASE */ 
        $stmt = $sql->query("INSERT INTO image_table (image_col) VALUES (?)"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */ 
        $stmt->bind_param("s", $fileinfo->getFilename()); 
        $stmt->execute(); 
        $stmt->close(); 
       } 

      } 
     } 
    } 

?> 

上面會保存圖像名稱到您的數據庫。

而且當你要顯示圖像,只需運行該查詢:

$getimg = $sql->prepare("SELECT image_col FROM image_table"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */ 
$getimg->execute(); 
$getimg->bind_result($image); 
while($getimg->fetch()){ 
    echo '<img src="images/'.$image.'">'; 
} 
$getimg->close(); 
+0

不 - 這不是問題。我不想有任何形式的表單。沒有形式也沒有選擇圖像。我只是想手動填充我的MySQL表(它的用戶帳戶)與我的電腦上有一個圖像時,我的PHP類中的函數被調用 – skyguy

+0

我想這樣做所有在PHP中 - 沒有JavaScript,沒有形式。只是堅持和形象在mysql表 – skyguy

+0

@skyguy - 請參閱我更新的答案 –