2015-01-01 151 views
0

我通過下面的代碼上傳了多個圖片(它的工作原理),但我無法將這些圖片的網址插入到我的數據庫中。我嘗試了一些東西,但不能使它工作。我的代碼尚未完成,所以我沒有添加控件(文件類型,文件大小等)。從數組中插入多條記錄到我的數據庫

的index.php

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <div id="file_container"> 
     <input name="images[]" multiple type="file" id="file[]"/><br/> 
     <input type="submit"> 
    </div> 
</form> 

upload.php的

$target = "upload/"; 
$test = 1; 

foreach ($_FILES['images']['name'] as $key => $value) { 
    $path = $_FILES['images']['name'][$key]; 
    $ext = pathinfo($path, PATHINFO_EXTENSION); // getting the extension 

    // creating a unique value here 
    $name = md5($name); 
    $generate1 = md5(date('Y-m-d H:i:s:u')); 
    $randomizer = uniqid($name); 
    $name = $name . $generate1 . $randomizer; 
    $makeaname = $target . $name . "." . $ext; 

    if ($test == 1) { 
     if (move_uploaded_file($_FILES['images']['tmp_name'][$key], $makeaname)) { 
      echo "<strong>" . $value . "</strong> successful <br />\n"; 
      echo $makeaname; // it echoes image urls, so everything is okay so far. 
     } 
    } else { 
     echo "Failed"; 
    } 

我用下面的查詢在foreach循環echo $makeaname;後,但沒有奏效。我感謝任何幫助或指導。

$upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (?,?,?)"); 
$upload_image->bind_param("sss", $makeaname, $_FILES['images']['type'], $_FILES['images']['size']); 
$upload_image->execute(); 
+1

$ makeaname是一個字符串的文件名,而不是實際的文件。首先,您需要將「sss」的bind_param調用修改爲「bss」,然後您需要提供實際的文件。請參閱https://blogs.oracle.com/oswald/entry/php_s_mysqli_extension_storing – hofan41

+0

您是否檢查過查詢中的錯誤消息?也就是說'$ _FILES ['images'] ['type']'在你的綁定語句中正確嗎?'換句話說,它應該是'$ _FILES ['images'] ['type'] [$ key]'? – Gohn67

+1

@ Gohn67,謝謝。現在可以完美地添加大小和類型列。我還注意到,我忘記在我的文件頂部包含connect.php文件,這是我在2015年曾經做過的最愚蠢的事情。我對此表示祝賀。 – salep

回答

1

您需要索引$_FILES數組。此外,您不需要爲NULL值綁定參數,在SQL中使用NULL文字(或者,如果這是模式中的默認值,則可以將該值完全保留)。

upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (NULL,?,?)"); 
$upload_image->bind_param("ss", $type, $size); 
foreach ($_FILES['images']['type'] as $i => $type) { 
    $size = $_FILES['images']['size'][$i]; 
    $upload_image->execute(); 
} 
+0

謝謝。我已經解決了我的問題,但索引$ _FILES數組是我在這裏學到的。謝謝。 (你可以閱讀我上面的評論,最後一個問題) – salep

0

請確保您的數據庫列「image_value」是一個BLOB數據類型。然後嘗試使用此代碼:

$null = NULL; 
$upload_image = $sqli->prepare("INSERT INTO images(image_value, type, size) VALUES (?,?,?)"); 
$upload_image->bind_param("bss", $null, $_FILES['images']['type'], $_FILES['images']['size']); 
$upload_image->send_long_data(0, file_get_contents($makeaname)); 
$upload_image->execute(); 
+0

請不要誤解我的意思,但我不能讓它工作。它給我一個數組 - 字符串轉換錯誤。不過,我正在努力。感謝您的時間。 – salep

相關問題