gpt4 book ai didi

javascript - Ajax (jQuery) PHP 脚本//move_uploaded_file-问题

转载 作者:行者123 更新时间:2023-12-03 00:21:32 25 4
gpt4 key购买 nike

我正在使用图库上传功能

  • jQuery Ajax
  • PHP

整个图库功能包含 3 个部分:

表单view_create-char.php

    <form id='gallery_upload' method='post' enctype='multipart/form-data'>
<input type='file' name='file' id='file'>
<input type='hidden' name='name' value='".$_GET['c']."' id='owner'>
<input type='button' class='create_submit' value='Upload'
id='add_image_gallery'>
</form>";

Ajax 脚本 作为 main.js

$(document).ready(function(){

$("#add_image_gallery").click(function(){

var fd = new FormData();
var files = $('#file')[0].files[0];
var name = $('#owner').attr("value");
fd.append('file',files);
fd.append('name',name);


$.ajax({
url: 'includes/gallery_upload.php',
type: 'post',
data: fd,
contentType: false,
processData: false,
success: function(response){
if(response != 0){
alert('file uploaded');


}else{
alert('file not uploaded');
}
},
});
});
});

PHP 脚本gallery_upload.php

<?php
include 'dbh.inc.php';

$owner = $_POST['name'];
$file = $_FILES['file'];
$fileName = $_FILES['file']['name'];
$fileTmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileError = $_FILES['file']['error'];
$fileType = $_FILES['file']['type'];

$fileExt = explode('.', $fileName);
$fileActualExt = strtolower(end($fileExt));
$allowed = array('jpg', 'jpeg', 'png', 'gif');
$fileNameNew = uniqid('', true).'.'.$fileActualExt;
$fileDestination = 'uploads/'.$fileNameNew;
move_uploaded_file($fileTmpName, $fileDestination);

$sql = "INSERT INTO
characters_gallery (owner, image) VALUES ('$owner',
'$fileNameNew');";
$result = mysqli_query($conn, $sql);

目标是使用 Ajax 上传图像并在字符库表中插入两个值。首先是表的所有者,然后是由 PHP 脚本生成的实际图像的名称。 这有效。

但是实际文件并没有被move_uploaded_file()移动到指定的文件夹/uploads。尽管我的数据库中的表填充了两个值 $owner$fileNamenew,但它仍然是空的。让我困惑的是,在我使用这个 Ajax 脚本之前,这个 PHP 脚本将文件移动到上传文件夹工作得很好。但它不适用于脚本。

非常感谢您的帮助

编辑 --- 对有关 SQL 注入(inject)的警告的 react :

我不确定我是否像我应该做的那样使用此编辑,但它是附加信息。如果我错了,请删除我的编辑。

我尝试添加准备好的语句,并想知道是否消除了 SQL 注入(inject)的更大风险:

<?php
include_once 'characterfunctions.inc.php';
include 'dbh.inc.php';

$owner = mysqli_real_escape_string($conn, $_POST['name']);
$file = mysqli_real_escape_string($conn, $_FILES['file']);
$fileName = $_FILES['file']['name'];
$fileTmpName = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileError = $_FILES['file']['error'];
$fileType = $_FILES['file']['type'];

$fileExt = explode('.', $fileName);
$fileActualExt = strtolower(end($fileExt));
$allowed = array('jpg', 'jpeg', 'png', 'gif');
$fileNameNew = uniqid('', true).'.'.$fileActualExt;
$fileDestination = '../uploads/'.$fileNameNew;
move_uploaded_file($fileTmpName, $fileDestination);

$sql = "INSERT INTO characters_gallery (owner, image) VALUES (?, ?);";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo "SQL Error";
} else {
mysqli_stmt_bind_param($stmt, "ss", $owner, $fileNameNew);
mysqli_stmt_execute($stmt);
}
$result = mysqli_query($conn, $sql);

最佳答案

首先,跟踪move_uploaded_file的结果,如果false,则不执行后续步骤。

关于为什么会失败,大概是:

  • 权限问题 - 让我们检查一下 PHP 可写入的 uploads 目录的权限。
  • $_FILES['file'] 不是有效文件 - 因此请检查 is_uploaded_file($fileTmpName) 并检查变量 $_FILES['文件']['错误']

关于javascript - Ajax (jQuery) PHP 脚本//move_uploaded_file-问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54296678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com