上传图像文件(不是通过表单,只是在一个文件夹中)通过PHP上传到MySQL?

问题描述:

我只是不清楚如何在过去,我有让用户通过表单上传他们从自己的电脑中选取图片和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

您可以使用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 - 请参阅我更新的答案 –