javascript - 使用基于ajax的客户端上传PHP文件不起作用

标签 javascript php jquery ajax forms

我有一个将图像上传到特定路径的表单。我没有使用这个<form action="file.php">提交表单后,我使用ajax来提交表单。数据已成功保存在数据库中,包括文件名,但图像根本没有上传。这有什么问题吗?我该如何解决这个问题?谢谢您的帮助。这是我的代码:

表单.php

 <form method="post" name="new_category" id="product_category" enctype="multipart/form-data"> 
 <ul class="add_prod">
 <li>Category Title:<input type="text" name="category[title]" id="cat_title" value="" placeholder="Title" /> </li>
 <li>Category Description:<textarea rows="4" cols="40" name="category[description]"></textarea></li>
 <li>Category Image:<input type="file" name="image_file" id="cat_image" /></li>
 </ul>  
 </form>

文件.js

$("#product_category").submit( function(){

    event.preventDefault();

   var data_category = $(this).serialize();
   var image = $("#cat_image").val();
   $.ajax({
       type: "post",
       url: "../wp-content/plugins/product_form/category_save.php",
       dataType: "json",
       data:data_category + "&image_file=" +image,
       success: function(data){
           if(data.notify == "Success"){
               console.log(data.notify);
           }
           else{
               console.log(data.notify);
           }
       } 

    });
 });

保存.php

<?php 
//establish connection
$con = mysqli_connect("localhost","root","","database"); 
//on connection failure, throw an error
if(!$con) {  
die('Could not connect: '.mysql_error()); 
} 

$folder = "../Dropbox/estacio/wp-content/plugins/product_form/img/";

if (is_uploaded_file($_POST['image_file']['tmp_name']))  {   
if (move_uploaded_file($_POST['image_file']['tmp_name'], $folder.$_POST['image_file']['name'])) {
     echo "File uploaded";
  } else {
     echo "File not moved to destination folder. Check permissions";
   }
  } else {
  echo "File is not uploaded.";
 } 



   //get the form elements and store them in variables
   $category_values = $_POST["category"]; 
   $image_url = basename($_POST["image_file"]);
   $image_field = "image_url";
   $data = array();

   //unset($view_all_info['Password2']);
   foreach($category_values as $field => $val){
    $data[] = "`".$field."` = '".$val."'";
   }

   array_push($data,"`".$image_field."` = '".$image_url."'");

   $sql = "INSERT INTO wp_product_category SET ".implode(',', $data);
   $ret = mysqli_query($con,$sql); 

   if($ret){
    $notification="Success";
   }
else{
  $notification="Failed";
   }

  echo json_encode(array('notify'=>$notification));

  mysqli_close($con);
 ?>

最佳答案

尝试检查 $_FILES['image_file']['tmp_name'] 或 $_FILES['cat_file']['tmp_name'] 而不是 $_POST,post 只给你参数传递的文件名,而不是实际上传的内容。

还可以尝试将 action='category_save.php' 添加到您的表单并使用 ajaxForm

$("#product_category").ajaxForm(
{
dataType:'json',
success:function(json){
   console.log('success');
}
}).submit();

为输入表单使用不同的 id 和名称标签也不是很明智。

关于javascript - 使用基于ajax的客户端上传PHP文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018457/

相关文章:

javascript - Firefox 3 和 IE7+ 中的 jQuery 和 JavaScript

javascript - 更改多个文本框的值(基于 ID 或输入类型)

javascript - 使用 javascript 将样式应用于某些列表项

php - 如何为 WP 多站点管理员删除 "Add Existing User"选项?

php - 无法将数据从表单发送到mysql

php - 将旧代码升级到较新的 MySQL 版本

javascript - jQuery 悬停显示 div 切换

jQuery 年、半年和季度选择器

javascript - 将字符串转换为函数名

javascript - 使用 jquery/js 将实际页面的 URL 传递到其他页面的输入字段中