【问题标题】:Uploaded file is not passing through JavaScript to PHP上传的文件没有通过 JavaScript 传递给 PHP
【发布时间】:2018-05-29 06:18:02
【问题描述】:

在这里,我试图从 HTML->JavaScript->PHP 传递上传的文件和文本输入。但它只是传递文本输入而未能传递文件,我没有在 PHP 中获取该文件。因此,它在 PHP 文件中显示“$u_file”的未定义索引错误。我不明白问题出在哪里。

这里是 HTML 文件

<body>
    <div class="container">
        <form class="form-horizontal" action="">
            <h2><b>Post your job</b></h2><br><br>

            <div class="form-group">
                <label class="control-label col-sm-2">Job Position:</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" id="jName" placeholder="Enter job name" name="jName" required>
                    <p id="jErr"></p>
                </div>
            </div>

            <div class="form-group">
                <form class="form-horizontal" action="" method="post" enctype="multipart/form-data">
                        <label class="control-label col-sm-2">Add some detailed description:</label>
                    <div class="col-sm-10">
                        <input id="u_file" value="u_file" type="file" name="u_file" size="5000000" multiple onchange="showname()"><br><br>
                    </div>
                </form>
            </div>


            <div class="container-fluid text-center">
            <br><button name="submitJob" id="submitJob" type="submit" class="btn btn-default" onclick="job_checker()">Submit</button>
            <p id="submitJobErr"></p></div>

        </form>
    </div>
</body>

这里是 JavaScript 文件

signFlagj = 0;

function job_checker() {
   checkJobName();
    databasejobEntry();
}

function checkJobName() {

    var jobnameET = document.getElementById("jName");
    var jobnameError = document.getElementById("jErr");

    jobname = jobnameET.value;
    console.log(jobname);

    var regex = /^[a-zA-Z ]*$/;
    if(!regex.test(jobname)){
        jobnameError.innerHTML = "Only letters and white space allowed";
        signFlagj = 1;
    }
    else {
        jobnameError.innerHTML = "";
    }

}

function showname() {
    jobFilename = document.getElementById('u_file');
    console.log('Selected file: ' + jobFilename.files.item(0).name);
    console.log('Selected file: ' + jobFilename.files.item(0).size);
    console.log('Selected file: ' + jobFilename.files.item(0).type);
}

function databasejobEntry() {

    if(signFlagj==1) {
        console.log("fill up correctly!");
        alert("Sign up correctly!");
    }
    else
    {
        console.log('Selected file: ' + jobFilename.files.item(0).name);
        console.log(jobname);

        var submitError = document.getElementById("submitJobErr");
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
            console.log(this.readyState);
            if(this.readyState == 4 && this.status == 200)
            {
                console.log(this.status);
                var response = xhttp.responseText;
                console.log(response);
                submitError.innerHTML=response;
                alert(response);
                if(String(response.trim()) === "Success") {
                    alert("Successfully submitted :)");
                    window.location.href = "uploadJob.html";
                }
            }
        }

        xhttp.open("GET", "uploadJob.php?jobname="+jobname+"&jobFilename="+jobFilename,true);
        xhttp.send();
    }

}

这里是 PHP 文件

require_once('DBconnection.php');

ini_set('display_errors', 1);
ini_set('log_errors', 1);

$val="";
$jobName = $_GET["jobname"];
echo "$jobName";

$u_file = $_FILES['jobFilename'];

$file_type = $_FILES['jobFilename']['type'];
$file_size = $_FILES['jobFilename']['size'];
$file_name = $_FILES['jobFilename']['name'];

print_r($u_file);
//echo "****************";

$currentdir = getcwd();
$targetfolder = $currentdir . "/testupload/";
// echo "****************";
print_r($targetfolder);

$targetfile = $targetfolder . basename( $_FILES['jobFilename']['name']) ;

//print_r($targetfolder);


print_r($currentdir);
//echo "****************";

$uploadOk=1;

print_r($file_type);

if ($file_type != "application/pdf" && $file_type != "image/png" && $file_type != "image/jpeg" && $file_type != "image/jpg") {
    echo "Sorry, only JPG, JPEG, PNG & PDF files are allowed.";
    $uploadOk = 0;
}


if (file_exists($targetfile)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}


if($uploadOk==0){
    echo "Problem in uploading file";
}

else {
    if(move_uploaded_file($_FILES['jobFilename']['tmp_name'], $targetfile)) {

        $fileUpQueryjob = "INSERT INTO jobs (job_name,job_filename) VALUES ('$jobName','$file_name')";
        $upJob = $db->query($fileUpQueryjob);
        if ($upJob == true) {
            $val = "Success";
            echo "The file ". basename( $_FILES['jobFilename']['name']). " is uploaded";
        }
        else
            echo "Error: " . $fileUpQueryjob . "<br>" . mysqli_error($db);
    }
}

//echo "$val";
$db->close();

【问题讨论】:

标签: javascript php jquery html


【解决方案1】:

使用 POST 请求而不是 GET 请求。如有必要,将其扭曲到新的 FormData 中并发布。

【讨论】:

  • 无法通过 GET 请求传输文件。阅读此主题stackoverflow.com/questions/15201976/…
  • 您可以在 FormData 中扭曲文件,例如 var formData = new FormData(); formData.append("文件", 文件); xhr.send(formData);
  • 对不起,我不明白
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 2015-09-11
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多