我希望用户能够上传多张图片。有没有办法在数据库中的一个字段下存储3个图像的路径?我的意思是让所有图像路径都在同一列中,如此
Images | date
images/file1.jpg, images/file2.jpg, images/file3.jpg | Thursday...
<ul id="image_upload">
<input type="file" name="image[]"><a href="#" id="add_more">Add more</a> <br>
[removed]
$(document).ready(function(){
$('#add_more').click(function(){
var current_count = $('input[type="file"]').length;
var next_count = current_count + 1;
$('#image_upload').append('<br><input type="file" name="image[' + next_count + ']"><br>');
});
});
</ul> <br><br>
然后我用php检查文件并尝试插入数据库
if (!empty($_FILES['image'])){
for ($i = 0; isset($_FILES['image']['name'][$i]); $i++) {
$allowed = array('jpg', 'jpeg', 'png', 'bmp', 'tiff', 'gif');
$fileName = $_FILES['image']['name'][$i];
$fileSize = $_FILES['image']['size'][$i];
$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
if (!in_array($fileExt, $allowed)) {
$errors[] = 'Incorrect file type. Only allowed: ' . implode(', ', $allowed) . '';
}
if ($fileSize > 2097152) {
$errors[] = "$fileName exceeds the maximum file size of 2 MB";
}
}
for ($i = 0; isset($_FILES['image']['name'][$i]); $i++) {
$fileBase = basename($_FILES['image']['name'][$i]);
$fileName = pathinfo($fileBase, PATHINFO_FILENAME);
$fileExt = pathinfo($fileBase, PATHINFO_EXTENSION);
$fileTmp = $_FILES['image']['tmp_name'][$i];
$fileDst = 'images/images/'.basename($_FILES['image']['name'][$i]);
for ($j = 0; file_exists($fileDst); $j++) {
$fileDst = "images/images/$fileName-$j.$fileExt";
}
if (move_uploaded_file($fileTmp, $fileDst)) {
$output[$fileBase] = "Stored $fileBase OK";
}
}
}
此代码仅将第一个图像上传到临时文件夹,并且只将一个路径上传到数据库
答案 0 :(得分:2)
<form method="post" action="" enctype="multipart/form-data" id="frmImgUpload">
<input name="multiple_uploaded_files[]" type="file" multiple="true" />
</form>
foreach ($_FILES['multiple_uploaded_files']['name'] as $file)
{
print_r($file);
//use the move_uploaded_file() to move your file on your server directory.
//fire an insert query that inserts all the file names with comma separated value
}
<input type="file" name="uploaded_file[]" id="file" >
<input type="file" name="uploaded_file[]" id="file" >
<input type="file" name="uploaded_file[]" id="file" >
foreach ($_FILES['uploaded_file']['name'] as $file)
{
print_r($file);
//use the move_uploaded_file() to move your file on your server directory.
//fire an insert query that inserts all the file names with comma separated value
}
答案 1 :(得分:1)
您只需从动态文件元素中删除索引,如下所示:
$(document).ready(function(){
$('#add_more').click(function(){
$('#image_upload').append('<br><input type="file" name="image[]" />');
});
});
无需提供索引。只提供一个数组符号[]
。这里的问题是你给第一个动态文件索引2。因此文件数组索引变为0,2,3等,因此循环将无法正确迭代。
答案 2 :(得分:0)
如果您只想存储路径,我会看一下serialize()
和unserialize()
。它们用于创建可存储的数据表示。
答案 3 :(得分:0)
有没有办法在数据库中的一个字段下存储3个图像的路径?
至少有3种方法:
Serialize PHP数组在保存到您的数据库之前和unserialize之后选择。
将它们保存为带有一些分隔符的字符串(例如:path1 || path2 || pathX)。内爆和爆炸功能会有所帮助。
如果您使用的是PostgreSQL,则可以使用数组数据类型。因此,您将能够在SQL中对它们进行操作(计数,将其中一个更改为另一个等)。
但我认为这不是解决这个问题的更好方法。因为现在您只想保存路径,所以在几天之后您可能需要添加一些额外的数据,如ALT文本,标题,描述,大小,小预览路径等。
所以使用一些&#34; user_images&#34;表会更方便。