【发布时间】:2023-04-05 19:43:01
【问题描述】:
我正在尝试上传多张图片和图片说明,但似乎无法弄清楚为什么它无法正常工作。
我有一个表格,在该表格中有一个如下所示的表格:
<div id="section_photos">
<fieldset>
<table id="photo_table">
<thead>
<tr>
<th>Roof Section Photo</th>
<th>Photo Description</th>
</tr>
</thead>
<tbody id="photo_tb">
<tr>
<td><input type="file" id="roof_section_photo" name="roof_section_photo[]" /></td>
<td><input id="section_photo_desc" type="text" name="section_photo_desc[]"/></td>
</tr>
</tbody>
</table>
<input type="button" value="Add Photo" id="newSectionPhoto" />
</fieldset>
</div>
此处的按钮只会在表格中添加与<tbody> 中的<tr> 相同的另一行,允许用户添加多个带有描述的图像。
当用户单击我的表单提交按钮时,它将尝试遍历每张照片并将图像上传到我网站中的图像目录,并将目录路径和描述信息插入 MySQL 数据库。
$sectionPhoto = "../images/". $selectedAssocAccount ."/" . $facilityID . "/"
. basename($_FILES["roof_section_photo"]["name"]);
foreach($_FILES['roof_section_photo']['name'] as $index => $image){
$sectionPhotoDesc = $_POST['section_photo_desc'][$index];
if($_FILES['roof_section_photo']['error'] == UPLOAD_ERR_OK) {
$status_msg = '';
$from = $_FILES["roof_section_photo"]["tmp_name"];
$saved = save_section_photo($from, $sectionPhoto, $status_msg);
$sectionPhotoQuery = "INSERT INTO table(facility_section_information_id, photo, photo_desc) "
. "VALUES ('$facilitySectionID', '$image', '$sectionPhotoDesc')";
//using this to test my query before I submit anything
echo $sectionPhotoQuery;
echo "</br>";
//mysqli_query($dbc, $sectionPhotoQuery)or die(mysqli_error($dbc));
} else{
//THIS IS WHERE I KEEP HITTING..
echo "Error uploading photo. " . $_FILES['roof_section_photo']['error'];
}
}
输出: 上传照片时出错。数组
假设我有 3 张图片,我会收到 3 次错误消息,所以我知道至少每张图片都被放入一个数组并且正在迭代。
(我认为我不需要发布我的 save_section_photo() 函数,因为它甚至没有那么远。)
我正在使用完全相同的过程在其他地方仅上传单个图像而没有任何问题,但是当我尝试以这种方式使用它时似乎给我带来了问题。
我很困惑为什么我一直中断我的if 声明,我使用的图像都是小尺寸的,.jpg 的我也在其他地方用于测试。
有什么想法吗?
谢谢
编辑
我在foreach 循环之前包含了var_dump( $_FILES['roof_section_photo'] );。
输出
array(5) { ["name"]=> array(2) { [0]=> string(12) "einstein.jpg" [1]=> string(10) "monkey.jpg" } ["type"]=> array(2) { [0]=> string(10) "image/jpeg" [1]=> string(10) "image/jpeg" } ["tmp_name"]=> array(2) { [0]=> string(14) "/tmp/php89CrOW" [1]=> string(14) "/tmp/phpPGz7Z9" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(4798) [1]=> int(3254) } }
【问题讨论】:
-
您的表单是否包含 POST 方法和有效的 enctype?您的问题中没有显示。
-
@Fred-ii- 是的,我的表单标签中有
enctype="multipart/form-data" method="post"。 -
您是否查看过文件是否确实已成功上传? Web 服务器用户是否允许将它们上传到的目录写入?文件大小是否在 php.ini 设置范围内(或出于任何其他原因超出范围)?也许将您的错误行更改为
echo "Error uploading photo. " . $_FILES['roof_section_photo']['error'];,这样您就可以看到它实际上是什么错误。 -
@BA_Webimax 他们根本没有被上传。是的,该目录允许由 Web 服务器用户写入。我已更改错误消息并将我的输出包含在我的答案中。
-
您应该
var_dump($_FILES)来查看您返回的内容。我希望$_FILES['roof_section_photo']['error']是一个数组,并且您需要在if之前增加一个计数器。类似$_FILES['roof_section_photo']['error'][$i]