我计划使用PHP和MySQL作为数据库来制作图像。
我已经使用PHP制作了多个上传图片,但是我遇到了问题。当我在数据库中上传 8张图片时,只显示1行数据。但是在文件夹中有我上传的 8张图片。
这是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="a.php" method="post" enctype="multipart/form-data">
<input type="file" name="file_img[]" multiple>
<input type="submit" name="btn_upload" value="Upload">
</form>
<?php
include_once 'koneksi.php';
if(isset($_POST['btn_upload']))
{
for($i = 0; $i < count($_FILES['file_img']['name']); $i++)
{
$filetmp = $_FILES["file_img"]["tmp_name"][$i];
$filename = $_FILES["file_img"]["name"][$i];
$filetype = $_FILES["file_img"]["type"][$i];
$filepath = "uploads/".$filename;
move_uploaded_file($filetmp,$filepath);
$sql = "INSERT INTO files (file,path,type) VALUES ('$filename','$filepath','$filetype')";
if($connect->query($sql) === TRUE) {
header("Location: a.php");
} else {
header("Location: a.php");
}
}
$connect->close();}
?>
</body>
</html>
有人能帮助我吗?感谢您的反馈:)
答案 0 :(得分:1)
将header location
重定向移到for
循环之外。
另请参阅Upload multiple images and store their path in database。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="a.php" method="post" enctype="multipart/form-data">
<input type="file" name="file_img[]" multiple>
<input type="submit" name="btn_upload" value="Upload">
</form>
<?php
include_once 'koneksi.php';
if(isset($_POST['btn_upload']))
{
for($i = 0; $i < count($_FILES['file_img']['name']); $i++)
{
$filetmp = $_FILES["file_img"]["tmp_name"][$i];
$filename = $_FILES["file_img"]["name"][$i];
$filetype = $_FILES["file_img"]["type"][$i];
$filepath = "uploads/".$filename;
move_uploaded_file($filetmp,$filepath);
$sql = "INSERT INTO files (`file`,`path`,`type`) VALUES ('$filename','$filepath','$filetype')";
$connect->query($sql);
}
if($connect->query($sql) === TRUE) {
header("Location: a.php");
exit; // always add exit after header Location:
} else {
header("Location: a.php");
exit; // always add exit after header Location:
}
$connect->close();}
?>
</body>
</html>
答案 1 :(得分:0)
经过一些代码美化你的代码段答案变得明显 - 你只在数据库中获得一个新行,因为在你的for
循环中,你在插入这一行后立即将用户重定向到a.php
。
换句话说,您的for
循环将始终只执行一步。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form action="a.php" method="post" enctype="multipart/form-data">
<input type="file" name="file_img[]" multiple>
<input type="submit" name="btn_upload" value="Upload">
</form>
<?php
include_once 'koneksi.php';
if (isset($_POST['btn_upload'])) {
for ($i = 0; $i < count($_FILES['file_img']['name']); $i++) {
$filetmp = $_FILES["file_img"]["tmp_name"][$i];
$filename = $_FILES["file_img"]["name"][$i];
$filetype = $_FILES["file_img"]["type"][$i];
$filepath = "uploads/".$filename;
move_uploaded_file($filetmp, $filepath);
$sql = "INSERT INTO files (file, path, type) VALUES ('$filename','$filepath','$filetype')";
// #NOTICE: Read about SQL Injection and why above SQL is bad.
// #SOLUTION: Place 1
if ($connect->query($sql) === true) {
header("Location: a.php");
exit; // #NOTICE: Always add `exit` after "header Location:"
} else {
header("Location: a.php");
exit; // #NOTICE: Always add `exit` after "header Location:"
}
}
$connect->close();
// #SOLUTION: Place 2
}
?>
</body>
</html>
你现在能看到吗?
以下结帐链接!执行一些清理后,文件[1]是您的文件。它还包含两个标记为#SOLUTION
的注释。 Place 1
是您应移至Place 2
的代码。移动后,您还应更改if
条件以检查是否所有文件都已正确上传。另一方面,文件[2]由我编辑(可能)正确解决您的问题。
我希望我帮忙!
https://github.com/broiniac/stackoverflow/blob/master/44346949/
编辑:@AdhershMNair: 我认为,由于解决方案中的行if($connect->query($sql) === TRUE) {
,上次上传文件的数据将被插入数据库两次(一次用于for
循环中的最后一次迭代,一次用于if
语句)。 / p>