2013-04-07 113 views
0

Im試圖上傳圖片在數據庫中,但當我檢查它是否上傳時,該字段爲空。我也想限制上傳文件格式jpeg,png和gif。請幫助上傳圖像,不工作

HTML

<form enctype="multipart/form-data" action="subePic.php" method="post" name="changer"> 
    <input name="MAX_FILE_SIZE" value="102400" type="hidden"> 
    <input name="image" accept="image/jpeg" type="file"> 
    <input value="Submit" type="submit"> 
</form> 

PHP

<?php 
require('conecta.php'); 
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 
    $tmpName = $_FILES['image']['tmp_name']; 
    $fp  = fopen($tmpName, 'r'); 
    $data = fread($fp, filesize($tmpName)); 
    $data = addslashes($data); 
    fclose($fp); 

    $xSQL = "INSERT INTO FOTOS (PIC) VALUES(?)"; 
    $stmt = $oConni->prepare($xSQL); 
    $stmt->bind_param('s', $data); 
    $stmt->execute() or die($oConni->error); 
    $stmt->close(); 

    if(!$xSQL){ 
     die("Database query failed: ". mysql_error()); 
    } 

    print "Su foto fue subida con éxito"; 
} 
else{ 
    print "Error: no se subió ninguna imagen a la BD"; 
} 
?> 
+0

哪個「字段」爲空?你的代碼中有很多可能的問題,其中之一就是你的「圖片」列的字段類型。 LONGBLOB,我希望。 – 2013-04-07 11:44:32

+0

該列是LONGBLOB – jal 2013-04-07 11:47:17

+1

那麼,爲什麼你插入一個非hex'd字符串?你需要傳遞給MySQL一個非二進制的參數。 – 2013-04-07 11:49:18

回答

1

的類型檢查,你應該有這樣的事情大小:

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 90000)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Error: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Stored in: " . $_FILES["file"]["tmp_name"]; 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 

用於插入圖像,你應該有這樣的:

if(isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 
$tmpName = $_FILES['image']['tmp_name']; 

     $fp = fopen($tmpName, 'r'); 
     $data = fread($fp, filesize($tmpName)); 
     $data = addslashes($data); 
     fclose($fp); 
     // Create the query and insert 
     // into our database. 
     $query ="INSERT INTO tbl_images(image)VALUES('".$data."')"; 
     $results=mysql_query($query) or die(mysql_error()); 
      // Print results 
     print "Thank you, your file has been uploaded."; 
     } 
else { 
    print "No image selected/uploaded"; 
} 

}

你可以使用prepare而不是mysql_query它是基於你的conecta.php

+0

不能使用stmt? – jal 2013-04-07 12:01:37

+0

你可以使用準備 – Nickool 2013-04-07 12:01:56

+1

改變我的代碼作爲你自己我不熟練使用參數這個代碼是我的舊代碼從我的文件,如果你發現它編輯我的 – Nickool 2013-04-07 12:03:20

2

如果超過了最大文件大小(100KB並不多),在$ _FILES包含錯誤消息2和文件大小呈現爲0

您可以檢查以下內容:

if($_FILES['image']['error'] !== 0) { ... error handling } 

錯誤代碼是在這裏找到:http://php.net/manual/en/features.file-upload.errors.php