我环顾四周,一直在努力寻找如何上传多张图片(.jpg / .png / etc)。 对于我的任务,我希望上传5张图片到数据库记录。到目前为止,我很难在一个记录中上传5个。我已经在Ws3网站上使用过PHP,它运行成功,但这段代码只适用于一个图像。
PHP代码 -
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . "_" . $_FILES["file"]["name"]);
}
}
}
else
{
$error = "Invalid file";
}
我的HTML如下,
<label for="file">Filename:</label>
<input type="file" name="file" id="file">
<input type="file" name="file" id="file">
<input type="file" name="file" id="file">
<input type="file" name="file" id="file">
<input type="file" name="file" id="file">
任何建议都非常感谢大家!干杯
答案 0 :(得分:5)
首先,在表单中添加enctype="multipart/form-data"
。然后将file
字段的名称更改为:
<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >
这将创建一个提交的文件数组。现在,您将能够对文件执行foreach
。快速举例:
foreach ($_FILES['file']['name'] as $f => $name) {
}
围绕现有代码,然后将[$f]
添加到每个$_FILES["file"]
变量中。因此$_FILES["file"]["size"]
必须更改为$_FILES["file"]["size"][$f]
,依此类推。在我引用foreach
到$name
的{{1}}中,您可以使用$_FILES["file"]["name"][$f]
代替$name
。
基于您的脚本的完整PHP代码:
foreach ($_FILES['file']['name'] as $f => $name) {
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $name);
$extension = end($temp);
if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"][$f] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>";
}
else
{
if (file_exists("upload/" . $name))
{
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name);
}
}
}
else
{
$error = "Invalid file";
}
}
最后,我建议您在不同的网站上了解有关PHP的更多信息。 W3schools很容易,但也不是你最好的选择。例如,您正在检查:
if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))
但只有数组才足够,如下:
if ($_FILES["file"]["size"][$f] < 2000000 && in_array($extension, $allowedExts))
$_FILES["file"]["type"]
并不总是按预期返回类型。我们在音频和视频文件中多次看到它。关于MIME类型的另一篇关于W3schools脚本的帖子:PHP: $_FILES["file"]["type"] is useless
在向StackOverflow提出新问题之前,请进行搜索。我刚刚给你写了一个很长的答案,但是对于这类问题已经做过很多次了。 https://stackoverflow.com/search?q=multiple+upload+php
希望它能回答你的问题,并且好好学习PHP。
答案 1 :(得分:0)
我认为问题出在你的HTML中......而不是其中的五个:
<input type="file" name="file" id="file">
尝试这样做:
<input type="file" name="file[]">
这将提交一个文件数组,而不是尝试以相同的输入名称提交多个文件。
作为旁注,您不应在多个元素上使用相同的id属性。也许你打算用一个班级?
答案 2 :(得分:-1)
if (isset($_POST["kirim"])) {
$jumlah = count($_FILES['gambar']['size']); // cari jml gambar
$size = $_FILES['gambar']['size']; //cek ukuran file
$ext = $_FILES['gambar']['type']; // cek extensi file
$max_size = 1000000;
$htg = implode(" ",$size);
if ($htg < 1){
echo "<script>alert('pilih file yang akan di upload !');
location.href='index.php';</script>";
}
elseif(max($size) > $max_size){
echo "<script>alert('ukuran file terlalu besar');
location.href='index.php';</script>";
}elseif (in_array("application/octet-stream", $ext) || in_array("application/pdf",$ext) || in_array("text/plain", $ext)) {
echo "<script>alert('file harus jpg atau png semua !');
location.href='index.php';</script>";
}else{
for ($i=0; $i < $jumlah; $i++) {
$file_name = $_FILES['gambar']['name'][$i];
$tmp_name = $_FILES['gambar']['tmp_name'][$i];
move_uploaded_file($tmp_name, "uploads/".$file_name);
mysqli_query($conn,"INSERT INTO images VALUES
('','$file_name','$tmp_name')");
}
echo "<script>alert('Upload Berhasil');location.href='index.php';</script>";
}
}