php - Mysql同时更新多个文本框和上传多个文件

标签 php mysql

我有一个简单的 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/

相关文章:

php - 根据另一列的不同值对 sql 值求和并将结果放入数组中

php - 用mysql分组

mysql - 如何获取 "insert ignore stament"中插入的行数

mysql - 为什么我不断收到此错误 : ERROR 1064 (42000)?

mysql - MySQL Merging Queries的JOIN问题--Overwrite or Merge two rows from the same table

php - 如何转义 PDO 连接字符串中的特殊字符?

php - 如果 MYSQL 数据发生变化,有没有办法触发 PHP 文件系统缓存立即失效?

javascript - 表格发送不再起作用

php - 获取两个日期时间之间的查询

MySQL 表示 : 2002 - No connection could be made because the target machine actively refused it