使用输入类型文件AJAX/PHP
我在index.php中得到了这个html/php使用输入类型文件AJAX/PHP,php,ajax,Php,Ajax,我在index.php中得到了这个html/php if (isset($_POST['UploadMSub'])) { $fileP=$_FILES['Upload_f']; $fileP_name=$fileP['name']; $fileP_tmp=$fileP['tmp_name']; $fileP_size=$fileP['size']; $fileP_error=$fileP['error']; $fileP_extension=exp
if (isset($_POST['UploadMSub'])) {
$fileP=$_FILES['Upload_f'];
$fileP_name=$fileP['name'];
$fileP_tmp=$fileP['tmp_name'];
$fileP_size=$fileP['size'];
$fileP_error=$fileP['error'];
$fileP_extension=explode('.', $fileP_name);
$fileP_extension=strtolower(end($fileP_extension));
$allowed=array('jpg','png');
if (in_array($fileP_extension, $allowed)) {
if ($fileP_error===0) {
if ($fileP_size<=2097152) {
$fileP_new_name=uniqid().'.'.$fileP_extension;
}
}
}
$_SESSION['fileP']=$fileP;
$_SESSION['fileP_name']=$fileP_name;
$_SESSION['fileP_tmp']=$fileP_tmp;
$_SESSION['fileP_size']=$fileP_size;
$_SESSION['fileP_error']=$fileP_error;
$_SESSION['fileP_extension']=$fileP_extension;
$_SESSION['fileP_new_name']=$fileP_new_name;
}
<form method="post" enctype="multipart/form-data" class='SubmUploadFu'>
<textarea maxlength="400" type="text" class='Text' placeholder="New post"></textarea>
<input type="file" name="Upload_f" style="display:none;" id="Nameupload">
<label for="Nameupload" class='LabelCamerUp'>
<img src="../img/camera.png" class='CamerUp'>
</label>
<input type="submit" class="UploadMSub">
</form>
connect.php
if (isset($_GET['Text'])) {
$Text=htmlspecialchars($_GET['Text'],ENT_QUOTES);
$file=htmlspecialchars($_GET['file'],ENT_QUOTES);
echo $Text." ".$_SESSION['fileP_new_name'];
}
但当我提交表单时,它会返回(警报)
“取消定义索引”“文件名”“新名称”
有没有其他方法可以获取我的connect.php中文件的所有信息?问题是 当您点击提交按钮时,表单不会被提交,这意味着当您点击提交按钮时,没有设置任何会话变量。相反,当您点击submit按钮时,jQuery脚本会立即运行,这就是为什么会出现此错误 取消定义索引:fileP\u new\u名称 从你的问题来看 是否有其他方法可以获取my connect.php中文件的所有信息 因此解决方案如下所示。您必须更改代码中的一些内容,例如:
- 在
元素中添加
属性,如下所示:名称
<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
$(".UploadMSub").click(function(event){ event.preventDefault(); // your code });
<?php if(is_uploaded_file($_FILES['Upload_f']['tmp_name']) && isset($_POST['new_post'])){ // both file and text input is submitted $new_post = $_POST['new_post']; $fileP=$_FILES['Upload_f']; $fileP_name=$fileP['name']; $fileP_tmp=$fileP['tmp_name']; $fileP_size=$fileP['size']; $fileP_error=$fileP['error']; $fileP_extension=explode('.', $fileP_name); $fileP_extension=strtolower(end($fileP_extension)); $allowed=array('jpg','png'); if (in_array($fileP_extension, $allowed)){ if ($fileP_error===0) { if ($fileP_size<=2097152){ $fileP_new_name=uniqid().'.'.$fileP_extension; } } } // your code //echo $fileP_new_name; } ?>
- 如果您是通过AJAX上传文件,请使用object。但请记住,旧浏览器不支持FormData对象。FormData支持从以下桌面浏览器版本开始:IE 10+、Firefox 4.0+、Chrome 7+、Safari 5+、Opera 12+
- 在AJAX请求中设置以下选项,
和processData:false
。请参考了解这些功能contentType:false
<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
$(".UploadMSub").click(function(event){
event.preventDefault();
// your code
});
<?php
if(is_uploaded_file($_FILES['Upload_f']['tmp_name']) && isset($_POST['new_post'])){
// both file and text input is submitted
$new_post = $_POST['new_post'];
$fileP=$_FILES['Upload_f'];
$fileP_name=$fileP['name'];
$fileP_tmp=$fileP['tmp_name'];
$fileP_size=$fileP['size'];
$fileP_error=$fileP['error'];
$fileP_extension=explode('.', $fileP_name);
$fileP_extension=strtolower(end($fileP_extension));
$allowed=array('jpg','png');
if (in_array($fileP_extension, $allowed)){
if ($fileP_error===0) {
if ($fileP_size<=2097152){
$fileP_new_name=uniqid().'.'.$fileP_extension;
}
}
}
// your code
//echo $fileP_new_name;
}
?>
HTML:
<form method="post" enctype="multipart/form-data" class='SubmUploadFu'>
<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
<input type="file" name="Upload_f" style="display:none;" id="Nameupload">
<label for="Nameupload" class='LabelCamerUp'>
<img src="../img/camera.png" class='CamerUp'>
</label>
<input type="submit" class="UploadMSub">
</form>
$(".UploadMSub").click(function(event){
event.preventDefault();
var form_data = new FormData($('form')[0]);
$.ajax({
url: '../connect.php',
type: 'post',
cache: false,
contentType: false,
processData: false,
data: form_data,
success: function(data){
alert(data);
}
});
});
在connect.php上,按如下方式处理表单数据:
<textarea maxlength="400" name="new_post" class='Text' placeholder="New post"></textarea>
$(".UploadMSub").click(function(event){
event.preventDefault();
// your code
});
<?php
if(is_uploaded_file($_FILES['Upload_f']['tmp_name']) && isset($_POST['new_post'])){
// both file and text input is submitted
$new_post = $_POST['new_post'];
$fileP=$_FILES['Upload_f'];
$fileP_name=$fileP['name'];
$fileP_tmp=$fileP['tmp_name'];
$fileP_size=$fileP['size'];
$fileP_error=$fileP['error'];
$fileP_extension=explode('.', $fileP_name);
$fileP_extension=strtolower(end($fileP_extension));
$allowed=array('jpg','png');
if (in_array($fileP_extension, $allowed)){
if ($fileP_error===0) {
if ($fileP_size<=2097152){
$fileP_new_name=uniqid().'.'.$fileP_extension;
}
}
}
// your code
//echo $fileP_new_name;
}
?>
Fink您需要将fileP_new_name更改为fileP_name或正确定义fileP_new_name我上传输入在index.php not connect.php中,因此connect无法看到input@TomOdell你说连接看不到输入是什么意思?您是否使用这些代码片段测试了您的应用程序?@TomOdell是的,我知道Upload\u f input位于index.php页面中。在这里,您实际上是在提交表单,而没有使用AJAX重新加载页面。是的,但是您没有将任何内容从Upload\u f发送到connect.php,因此它无法知道$fileP=$\u文件['Upload\u f']@TomOdell请参见此语句var form_data=new FormData($('form')[0])代码>,这会将文件和文本数据发送到connect.php页面。你现在面临什么问题?