Загружать несколько изображений с помощью php и sql

Я новичок в php, и я пытаюсь сделать многопользовательский загрузчик изображений. Моя форма выглядит так:

<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() в свой скрипт, но я не знаю, где и как я должен его вставить. Так как я могу изменить свой сценарий, чтобы я мог загружать больше изображений в мою базу данных? Я просто не могу понять. Любая помощь будет замечательной!

A. PHP не мог бы увидеть ваши несколько файлов, подобных этому.

замещать

  <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 } 

вы можете найти это полезным:

 <?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. назвал его «изображениями». все изображения будут загружены в эту папку. измените имя типа ввода в соответствии с вашим.

счастливое кодирование !!

Измените свое имя = "образ" на name = "image []"

пример:

 <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> 

Вы получили в базу данных одно изображение, потому что вы отправили только одно изображение (не в цикле foreach), не удалось:

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

Вы должны в форме HTML добавить массив загруженных изображений, таких как:

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

И получает петлю изображений:

 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-инъекциях.