图像未使用 AJAX 插入数据库

问题描述 投票:0回答:1

我正在尝试使用 AJAX 将图像上传到数据库,虽然该过程执行时没有错误,但图像并未保存到数据库中。

    let team_s_form = document.getElementById('team_s_form');
    let member_name_inp = document.getElementById('member_name_inp');
    let member_picture_inp = document.getElementById('member_picture_inp');

        function add_member() {
      let data = new FormData();
      data.append('name', member_name_inp.value);
      data.append('picture', member_picture_inp.files[0]);
      data.append('add_member', '');

      let xhr = new XMLHttpRequest();
      xhr.open("POST", "ajax/settings_crud.php", true);

      xhr.onload = function () {
          var myModal = document.getElementById('team-s');
          var modal = bootstrap.Modal.getInstance(myModal);
          modal.hide();

            if (xhr.responseText === 'inv_img') {
              js_alert('error', 'Only jpg, png, jpeg and webp formats are allowed!');
            } 
            else if (xhr.responseText === 'inv_size') {
              js_alert('error', 'Images of size 2MB are allowed!');
            } 
            else if (xhr.responseText === 'upd_failed') {
              js_alert('error', 'Image upload failed. Server error!');
            } 
            else {
              js_alert('success', 'Member added!');
              member_name_inp.value = '';
              member_picture_inp.value = '';
            }
      }

      xhr.send(data);
    }

这是 AJAX 代码。

if (isset($_POST['add_member'])) {
    $frm_data = filteration($_POST);

    $img_r = uploadImage($_FILES['picture'], ABOUT_FOLDER);

    // Handle different outcomes of the image upload
    if ($img_r == 'inv_img') {
        echo "Invalid image format. Please upload a valid image.";
    } elseif ($img_r == 'inv_size') {
        echo "Image size is too large. Please upload an image smaller than 2MB.";
    } elseif ($img_r == 'upd_failed') {
        echo "Failed to upload the image. Please try again.";
    } else {
        // Prepare and execute the insert query
        $q = "INSERT INTO `member_details`(`name`, `picture`) VALUES (?, ?)";
        $values = [$frm_data['name'], $img_r];
        $res = insert($q, $values, 'ss');

        echo $res;
    }
}

“这是settings_crud.php中的代码。

我已经定义了常量:

define('UPLOAD_IMAGE_PATH', $_SERVER['DOCUMENT_ROOT'] . '/Marriot/images/');

定义('ABOUT_FOLDER','关于/');

我还在 Essentials.php 中实现了 uploadImage 函数,该函数已正确链接并正常工作。”

function uploadImage($image, $folder)
{
  // Define valid MIME types
  $valid_mime = ['image/png', 'image/jpg', 'image/jpeg', 'image/webp'];
  $img_mime = $image['type'];

  // Check if the MIME type is valid
  if (!in_array($img_mime, $valid_mime)) {
    return 'inv_img'; // Invalid image or MIME format
  }

  // Check if the file size is within the limit (2MB)
  elseif (($image['size'] / (1024 * 1024)) > 2) {
    return 'inv_size'; // Invalid size
  }

  // Process and move the uploaded file
  else {
    $ext = pathinfo($image['name'], PATHINFO_EXTENSION);
    $rname = 'IMG_' . random_int(111111, 999999) . ".$ext"; // Adjusted the range to ensure 6 digits

    $img_path = UPLOAD_IMAGE_PATH . $folder . $rname;

    // Move the uploaded file
    if (move_uploaded_file($image['tmp_name'], $img_path)) {
      return $rname; // Return the new filename on success
    } else {
      return 'upd_failed'; // Upload failed
    }
  }
}

最后一个插入函数

function insert($sql, $values, $datatypes)
{
 $con = $GLOBALS['con'];
 if ($stmt = mysqli_prepare($con, $sql)) {
  mysqli_stmt_bind_param($stmt, $datatypes, ...$values);
  if (mysqli_stmt_execute($stmt)) {
   $res = mysqli_stmt_affected_rows($stmt);
   mysqli_stmt_close($stmt);
   return $res;
  } else {
   mysqli_stmt_close($stmt);
   die("Query cannot be executed - Insert");
  }
 } else {
  die("Query cannot be prepared - Insert");
 }
}

“我已尝试替换查询,但它仍然不起作用。它显示一条警报,提示“成员已添加!”表明成功,但实际上并没有将数据插入数据库。”

javascript php mysql ajax
1个回答
0
投票

错误已解决!

我错过了常量中的 /

define('UPLOAD_IMAGE_PATH', $_SERVER['DOCUMENT_ROOT'] . '/Marriot/images/');

© www.soinside.com 2019 - 2024. All rights reserved.