2012-10-14 89 views
2

我是新來的php,我正在嘗試製作一個多圖像上傳器。我的形式如下:用php和sql上傳多個圖像

<form action="" method="post" enctype="multipart/form-data"> 
    <p class="style2">Izberi datoteko: <br /><input type="file" name="image" multiple="multiple" /></p> 
    <p class="style2"> 
     Izberi Album: <br /> 
      <select name="album_id"> 
       <?php 
        foreach ($albums as $album) { 
         echo '<option value="', $album['id'] ,'">', $album['name'] ,'</option>'; 
        } 
       ?> 
      </select> 
    </p> 
    <p class="style2"><input type="submit" value="Naloži Slike" /></p> 
</form> 

而在PHP端我不喜歡的東西:

if (isset($_FILES['image'], $_POST['album_id'])) { 
$image_name = $_FILES['image']['name']; 
$image_size = $_FILES['image']['size']; 
$image_temp = $_FILES['image']['tmp_name']; 

$allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); 
$a = explode('.', $image_name); 
$image_ext = strtolower(end($a)); 

$album_id = $_POST['album_id']; 

$errors = array(); 

if (empty($image_name) || empty($album_id)) { 
    $errors[] = '<p class="style2">Nekaj manjka!</p>'; 
} else { 

    if (in_array($image_ext, $allowed_ext) === false) { 
     $errors[] = '<p class="style2">Izbrani tip datoteke ni dovoljen!</p>'; 
    } 

    if ($image_size > 2097152) { 
     $errors[] = '<p class="style2">Izbrana datoteka je prevelika! Maksimalna velikost datoteke mora biti 2mb!</p>'; 
    }   
} 

if (!empty($errors)) { 
    foreach ($errors as $error) { 
     echo $error; 
    } 
} else { 
    upload_image($image_temp, $image_ext, $album_id); 
    header('Location: view_album.php?album_id='.$album_id); 
    exit(); 
} 

} 

我創建了將圖像導入數據庫的功能。此功能如下所示:

function upload_image($image_temp, $image_ext, $album_id) { 
$album_id = (int)$album_id; 

mysql_query("INSERT INTO `images` VALUES ('', '". $_SESSION['user_id'] ."', '$album_id', UNIX_TIMESTAMP(), '$image_ext')"); 

$image_id = mysql_insert_id(); 
$image_file = $image_id.'.'.$image_ext; 
move_uploaded_file($image_temp, 'galerija/'.$album_id.'/'.$image_file); 

create_thumb('galerija/'.$album_id.'/', $image_file, 'galerija/thumbs/'.$album_id.'/'); 
} 

這適用於上傳只有一個圖像。我試圖爲多個選擇文件創建一個表單,我可以選擇更多的圖像,但在數據庫中只獲取第一個圖像。我試圖把foreach()放在我的腳本中,但我不知道在哪裏以及如何放置它。 那麼,如何更改我的腳本,以便可以將更多圖像上傳到我的數據庫中?我無法弄清楚。任何幫助將是偉大的!

+0

您能否顯示您收到的確切錯誤? –

回答

3

A. PHP不會ALBE看到你的多個文件一樣,

更換

<input type="file" name="image" multiple="multiple" /> 

隨着

<input type="file" name="image[]" multiple="multiple" /> 

要遍歷這個文件,你需要像

foreach ($_FILES['image']['tmp_name'] as $key => $val) { 

    $fileName = $_FILES['image']['name'][$key]; 
    $fileSize = $_FILES['image']['size'][$key]; 
    $fileTemp = $_FILES['image']['tmp_name'][$key]; 

    $fileExt = pathinfo($fileName, PATHINFO_EXTENSION); 
    $fileExt = strtolower($fileExt); 

    // Continue 
} 
+0

我知道我需要對這些文件進行循環,但是我會回想一下我不知道要修復的錯誤。當我在返回時做了你所建議的兩個錯誤:Undefined index:image AND爲foreach提供的無效參數()我嘗試修復它,但沒有任何幫助。 –

+0

你在使用什麼服務器?它不是Apache,你可能會遇到'name =「image []」multiple =「multiple」'' – Baba

+0

問題我想出了它爲什麼會返回這兩個錯誤並解決這個問題。現在它不會返回任何錯誤,並且看起來像所有的東西都可以,但仍然只上傳一張圖片。我無法弄清楚。你知道我做錯了什麼嗎?如果我print_r($ _文件)它返回給我一個數組,並給我所有選定圖像的信息。 –

0

更改您的名字=「形象」來命名=「圖片[]」

例如:

<pre><?php print_r($_FILES); ?></pre> 
<form action="" method="post" enctype="multipart/form-data"> 
<input type="file" name="image[]" multiple="multiple" /> 
<input type="submit"> 
</form> 
0

您收到一個數據庫中的一個形象,因爲你只發送一個圖像(不是在foreach循環)失敗:

upload_image($image_temp, $image_ext, $album_id); 

你應該在HTML表單中添加上傳的圖片,例如數組:

<input type="file" name"image[]" multiple="multiple" /> 
<input type="file" name"image[]" multiple="multiple" /> 

並接收LO圖像運算:

if (isset($_POST["image"])) 
{ 
    $album_id = (int)$_POST['album_id']; 

    foreach ($_FILES["image"] as $images) 
    { 

     $image_temp = $images['tmp_name']; 
     $image_name = $images['name']; 

     $allowed_ext = array('jpg', 'jpeg', 'png', 'gif'); 
     $a = explode('.', $image_name); 
     $image_ext = strtolower(end($a)); 


     upload_image($image_temp, $image_ext, $album_id); 
    } 
} 

如果你不與var_dump($_FILES)傾倒在一個HTML表單數組的檢查。

注意你也是受害者SQL注入!在Stackoverflow中閱讀關於SQL注入的內容。

2

你能有所幫助:

<?php 
$target = "images/".$_FILES['image_upload']['name']; 
$image_upload = mysql_real_escape_string(($_FILES['image_upload']['name'])); 
move_uploaded_file($_FILES['image_upload']['tmp_name'], $target); 
for($i=2;$i<5;$i++) 
{ 
if(!empty($_FILES['image_upload'.$i])): 
$target = "images/".$_FILES['image_upload'.$i]['name']; 
$image_upload.= ",".mysql_real_escape_string(($_FILES['image_upload'.$i]['name'])); 
move_uploaded_file($_FILES['image_upload'.$i]['tmp_name'], $target); 
endif; 
} 
mysql_query("INSERT INTO `images` VALUES ('', '". $_SESSION['user_id'] ."', '$album_id', UNIX_TIMESTAMP(), '$image_upload')"); 
?> 

使用FTP使你的根文件夾。將其命名爲「圖像」。所有圖像將被上傳到這個文件夾。根據您的要求更改輸入類型的名稱。

快樂編碼!