作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 html 表单,其中包含文本框和通过 foreach 循环创建的文件输入。我可以用我的代码上传文件,但不能更新我的数据库。但是,如果我将查询移到 foreach 循环之外,但我无法更新文件名,我可以上传数据库
foreach($_FILES['fileName']['name'] as $key => $value) {
$file_name = $_FILES['fileName']['name'][$key];
$file_size = $_FILES['fileName']['size'][$key];
$file_tmp = $_FILES['fileName']['tmp_name'][$key];
$file_ext = pathinfo($file_name, PATHINFO_EXTENSION);
$uploadLocation = "../upload/".$file_name;
$move = move_uploaded_file($file_tmp,$uploadLocation);
if($move) {
foreach($_POST['imageID'] as $key => $value) {
$image_ID = $_POST['imageID'][$key];
$image_title = $_POST['imageTitle'][$key];
$updateImage = $db->execute(
"UPDATE images
SET image_title=?, image_name=?
WHERE ID=$image_ID AND page_id=$page_id",
array($image_title, $file_name)
);
}
echo "Updated";
}else{
echo "Something went wrong!";
}
}
我的表单:
<?php
// Get images and image titles from the database
$content_images = $db->get_rows("SELECT * FROM images WHERE page_id = $page_id AND image_type = 'content' ");
foreach ($content_images as $image) :
$image_ID = $image->ID;
$image_name = $image->image_name;
$image_title = $image->image_title;
?>
<input name="imageTitle[<?php echo $image_ID; ?>]" type="text" value="<?php echo $image_title; ?>">
<img src="<?php echo $upload_folder.$image_name; ?>" alt="<?php echo $image_title; ?>">
<input type="file" name="fileName[]">
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]" value="<?php echo $image_ID
<?php
endforeach;
?>
最佳答案
问题在于您在表单中使用数组的方式:
...
<input type="file" name="fileName[]">
^^ zero-based index
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]"
^^^^^^^^^^^^^^^^^^^^^^^^^^ ID from database index
...
请注意,您对文件使用从零开始的索引,对其他表单字段使用 ID 作为索引。
因此,当您将此信息发送到服务器时,文件的索引与文本字段的索引没有任何关系。
解决方案是在任何地方都使用 ID:
...
<input type="file" name="fileName[<?php echo $image_ID; ?>]">
<input type="hidden" name="imageID[<?php echo $image_ID; ?>]"
...
现在 php 中的 $key
变量既是文件的索引,也是文本字段的索引。
编辑:当您这样做时,您需要删除循环中的循环,因为现在您正在覆盖您的 $key
/$value
内循环中外循环的变量。
你只需要一个循环,你需要在循环之前准备你的sql语句(你现在根本没有准备它)。然后在您的循环中,您可以使用 $key
变量通过相应的 $_POST
变量执行您的语句一次。
关于php - Mysql同时更新多个文本框和上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964398/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!