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