我正在尝试使用 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");
}
}
“我已尝试替换查询,但它仍然不起作用。它显示一条警报,提示“成员已添加!”表明成功,但实际上并没有将数据插入数据库。”
错误已解决!
我错过了常量中的 /
define('UPLOAD_IMAGE_PATH', $_SERVER['DOCUMENT_ROOT'] . '/Marriot/images/');