1
我有一個表單將圖像上傳到某個路徑。在提交表單時我沒有使用這個<form action="file.php">
,而是我使用了ajax來提交表單。數據成功保存在包括文件名的數據庫中,但圖像根本沒有上傳。這有什麼問題?我怎樣才能解決這個問題?謝謝您的幫助。這裏是我的代碼:PHP基於ajax的客戶端文件上傳不起作用
form.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>
file.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);
}
}
});
});
Save.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);
?>
您需要使用XHR2,它只能在最棒的瀏覽器和最新的IE中使用。 – Musa
你傳遞的文件名在你的ajax中,但是我相當肯定你仍然需要訪問保存在'$ _FILES'超全局而不是'$ _POST'中的文件數據。 – Jeemusu
你能告訴我你的代碼嗎?感謝您的幫助 – Eli