PHP - 使用onchange在PHP中自动提交表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP - 使用onchange在PHP中自动提交表单相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个表单,当用户选择文件时,所选文件将通过转到表单中的操作自动上传到数据库。我使用了onchange函数,它只是将我发送到我的php文件,其中该文件包含我的上传系统。我认为我的问题是关于我的$_POST['asdasd'],但我真的不能想到任何其他解决方案。

这是我的表格:

<form action="includes/profile_picture_inc.php" method="POST" enctype="multipart/form-data" id="form">
   <input type="file" name="file" id="upload" onchange="document.getElementById('form').submit();">
</form>

PHP文件:

if (isset($_POST['submit'])) {
    $target_dir = "../users/".$_SESSION['u_id']."/image/";
    $str = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    $rand = substr(str_shuffle($str), 0, 10);
    $temp = explode(".", $_FILES["file"]["name"]);
    $newfilename = $rand . '.' . end($temp);
    $target_file = $target_dir . $newfilename;
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["file"]["tmp_name"]);
        if($check !== false) {
            echo "File is an image - " . $check["mime"] . ". <br/>";
            $uploadOk = 1;
        } else {
            echo "File is not an image. <br/>";
            $uploadOk = 0;
        }
    }
    // Check if file already exists
    if (file_exists($target_file)) {
        echo "Sorry, file already exists. <br/>";
        $uploadOk = 0;
    }
    // Check file size
    if ($_FILES["file"]["size"] > 5000000) {
        echo "Sorry, your file is too large. <br/>";
        $uploadOk = 0;
    }
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" ) {
        echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed. <br/>";
        $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded. <br/>";
    // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
            require 'database_inc.php';
            $sql = "UPDATE `users` SET `user_profile` = '$newfilename' WHERE 1";
            if (mysqli_query($conn,$sql)) {
                $_SESSION['profile_picture'] = $newfilename;
                header("Location: ../profile.php");
            } else {
                echo "The query has not been updated. <br/>";
            }

        } else {
            echo "Sorry, there was an error uploading your file. <br/>";
        }
    }
}
答案

它没有保存,因为在php文件中你有这条线

if (isset($_POST['submit'])) {

在表单中添加一个隐藏字段

<form action="includes/profile_picture_inc.php" method="POST" enctype="multipart/form-data" id="form">
   <input type="file" name="file" id="upload" onchange="document.getElementById('form').submit();">
   <input type="hidden" name="submited" value="1" />
</form>

并在PHP中更改行

if (isset($_POST['submit'])) {

if (isset($_POST['submited'])) {

应该这样做

另一答案

而不是进行$ _POST ['submit']验证,尝试检查请求是否为$ _POST。

要做到这一点,你可以使用类似的东西

if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') { … }

要么

if ($_SERVER['REQUEST_METHOD'] === 'POST') {…}

我建议你使用第一个。

PHP doc:http://php.net/manual/pt_BR/function.filter-input.php

以上是关于PHP - 使用onchange在PHP中自动提交表单的主要内容,如果未能解决你的问题,请参考以下文章

自动完成 jquery 多个字段 onchange 或 tab 事件

js onchange 提交默认选择选项

使用 JQuery、Ajax、PHP、Json 进行表单验证

PHP,HTML:自动提交表单[关闭]

PHP PDO 事务与自动提交

在 onSubmit 事件返回 false 并发出警报后,提交按钮会自动禁用。在 onchange 事件之后也无法启用它