我正在为朋友建立一个网站,并设置了一个将多个图像上传到数据库的表单。它只能由一个人访问,并且对公众不可见,因此为了便于编码,我忽略了许多可能的代码威胁,以使其正常工作。
HTML非常简单:
<form action="(url here)" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<input id="formbutton" type= "submit" value="Upload!">
</form>
这是我担心的PHP。
if(isset($_FILES['files'])){
foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name){
$target="images/costume/";
$target=$target.$_FILES['files']['name'][$key];
if(move_uploaded_file($tmp_name, $target)){
$id = mysql_insert_id($con);
mysql_query("INSERT INTO costumes (id,name) VALUES ('$id','$name')");
}
}
}
所有图像文件都上传到服务器上的目录,但实际上只有一个图像作为具有ID和文件名的行存储在MySQL表中。
我一直绞尽脑汁,疯狂地寻找解决方案,但没有任何有效的方法。我知道它与foreach循环有关但我无法做什么让我上传的每个图像在数据库中创建一行。
感谢帮助人员。
抱歉,我正在进行更改,忘记切换回上一部分的原始代码:
if(isset($_FILES['files'])){
foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name){
$target="images/costume/";
$target=$target.$_FILES['files']['name'][$key];
if(move_uploaded_file($tmp_name, $target)){
$id = mysql_insert_id($con);
mysql_query("INSERT INTO costumes (id,name) VALUES ('$id','$target')");
}
}
}
应该是这样的。
答案 0 :(得分:2)
1-您应该创建一个包含要存储的图像列表的数组
2-在表格中的列ID中使用自动增量(重要)
你也可以使用你可以进行查询的数组:
从帖子中捕获数据
$IMG = isset($_POST['files']) ? $_POST['files'] : array();
if (!empty($IMG)) {
$uploads_dir = 'images/costume/';
foreach ($IMG["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $IMG["tmp_name"][$key];
$name = $IMG["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
$name_array=mysql_real_escape_string($name);
$value_insert[] = "('" . $name_array . "')";
}
}
$values_insert = implode(',', $value_insert);
$query = "INSERT INTO costumes (name) VALUES" . $values_insert;
$result = mysql_query($query);
}else{
echo 'empty array';
}
作为旁注: 从PHP 5.5.0开始,不推荐使用Mysql_ *扩展,将来会删除它。相反,应该使用MySQLi或PDO_MySQL扩展。
答案 1 :(得分:1)
你不应该使用“mysql_insert_id”,而是在phpmyadmin中将id行设置为自动增量。