2017-06-28 9 views
0

次のコードは、フォームからデータを読み込み、フォルダ内のファイルを保存し、JSONファイルに書き込み:フォームとファイルアップロードPHPのAjax JSONは

Javascriptを:

var name = $("#name").val(); 
var image = $("#image")[0].files[0]; 
var model = $("#model")[0].files[0]; 
var type = $("#type").val(); 

var formData = new FormData(); 
formData.append('name',name); 
formData.append('image',image); 
formData.append('model',model); 
formData.append('type',type); 

$.ajax({ 
url: 'php/form-process.php', 
data: formData, 
processData: false, 
contentType: false, 
type: 'POST', 
dataType: 'json', 
success: function(data){ 
// get server responce here 
    alert(data); 
// clear file field 
    $("#image").val(""); 
} 
}); 

PHP

$filename = "itemsData"; 
$itemsFile = '../json/'.$filename.".json"; 

if(!empty($_POST)){ 
$data = json_encode($_POST); 
    if(json_last_error() != JSON_ERROR_NONE){ 
    exit; 
    } 
    if (!isset($_FILES['image']) || !is_uploaded_file($_FILES['image']['tmp_name'])) { 
    echo 'No file send...'; 
    exit; 
    } 

$uploaddir = '../upload/'; 

$userfile_tmp = $_FILES['image']['tmp_name']; 

$userfile_name = $_FILES['image']['name']; 

if (move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)) { 

echo 'File send.'; 
}else{ 

echo 'Upload Invalid!'; 
} 

//Get data from existing json file 
$file = file_get_contents($itemsFile); 

// converts json data into array 
$data = json_decode($file,true); 

$data[] = array(
'name' => $_POST['name'], 
'image' => $_POST['image'], 
'model' => $_POST['model'], 
'type' => $_POST['type'] 
); 

//Convert updated array to JSON 
$file = json_encode($data, JSON_PRETTY_PRINT); 

//write json data into data.json file 
file_put_contents($itemsFile,$file); 
} 

JSONfileリターン:

[ 
{ 
    "name": "chair", 
    "image": null, 
    "model": null, 
    "type": "1" 
} 
] 

画像はjpg、pngなどです。

モデルは.jsファイルです JSONファイルにファイルパスをどのように入れることができますか?

[ 
{ 
    "name": "chair", 
    "image": /image/nameOfFile.jpg, 
    "model": /code/nameOfFile.js, 
    "type": "1" 
} 
] 
+0

ような何かを行う必要が脆弱であることからJSONへ

編集を画像全体を保存しますパス –

答えて

0

私が正しく理解していれば、[]であなたも)配列を置き換える短い配列構文を、(使用することができますPHP 5.4の時点で、あなたはJSON

$data[] = [ 
    'name' => $_POST['name'], 
    'image' => $uploaddir . $userfile_name, 
    'model' => $_POST['model'], 
    'type' => $_POST['type'] 
]; 

で直接ファイルパスを作成する必要があります。

他のオプションは、base64としてアップロードされた画像を符号化されており、このコードは、あなたが前後に引用符が欠落しているこの

$name = stripslashes($_POST['name']); 
$model = stripslashes($_POST['model']); 
$type = stripslashes($_POST['type']); 

$data[] = [ 
    'name' => $name, 
    'image' => $uploaddir . $userfile_name, 
    'model' => $model, 
    'type' => $type 
]; 
+0

これは私が探していたものです。多くの感謝 – Defected

+0

喜んで助けてください。私はそこにいくつかのセキュリティ問題があるので、私の答えにいくつかの他の情報を追加します!これも念頭に置いてください。 https://stackoverflow.com/help/someone-answers –

関連する問題