我是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()
放在我的剧本中,但我不知道我必须把它放在哪里以及如何放入。
那么如何更改我的脚本以便我可以将更多图像上传到我的数据库中?我只是想不出来。任何帮助都会很棒!
答案 0 :(得分:3)
一个。 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
}
答案 1 :(得分: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在根目录中创建一个文件夹。将其命名为“图像”。所有图像都将上传到此文件夹。根据您的要求更改输入类型的名称。
快乐的编码!!
答案 2 :(得分:0)
将您的姓名=“image”更改为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>
答案 3 :(得分: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" />
接收图像循环:
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注入的信息。