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 事件
使用 JQuery、Ajax、PHP、Json 进行表单验证
在 onSubmit 事件返回 false 并发出警报后,提交按钮会自动禁用。在 onchange 事件之后也无法启用它