前提・実現したいこと
ajaxでvueからphpを使ってdbに画像を保存したいができない。
ajaxは動いておりaxiosでpostした後のthenのコールバック関数は動いています。
発生している問題・エラーメッセージ
postをしてもdbにデータが入っていない。理由が分からないです。
axiosのparamの値はaccount_idは5が入っており、tekitouには
okuru: File
lastModified: 1635246922531
lastModifiedDate: Tue Oct 26 2021 20:15:22 GMT+0900 (日本標準時) {}
name: "スクリーンショット 2021-10-26 20.14.54.png"
size: 99334
type: "image/png"
webkitRelativePath: ""
が入っていました。
該当のソースコード
upload.php
upload.php
1 2try{ 3 header("Access-Control-Allow-Origin: *"); 4 $db=new PDO('mysql:dbname=test;host=localhost;charset=utf8', 5 'root', 6 '', 7 [ 8 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 9 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 10 PDO::ATTR_EMULATE_PREPARES=>false 11 ] 12 ); 13 14 if(!empty($_FILES["image"]["tmp_name"])&&!empty($_POST['account_id'])){ 15 16 // これterateil 17 // $file_tmp = $_FILES["image"]["tmp_name"]; 18 // $file_name = date("Y-m-d H:i:s") . "_" . $_FILES["image"]["name"]; 19 // $file_save = "./img/" . $file_name; 20 // if($_FILES["image"]["size"] !== 0) { 21 // //画像がアップロードされた時、所定のフォルダに保存 22 // move_uploaded_file($file_tmp, $file_save); 23 // } 24 // $new_image = filter_input(INPUT_POST, "tekitou"); 25 // print($new_image["tmp_name"]); 26 27 $img_data = file_get_contents($_FILES['image']['tmp_name']); 28 29 $stmt=$db->prepare('insert into raw (created_id,raw_data,account_id) values (now(),?,?'); 30 $stmt->bindValue(1,$img_data); 31 $stmt->bindValue(2,$_POST['acccount_id']); 32 $stmt->execute(); 33 34 35 } 36 37}catch(Execption $e){ 38 echo $e->getMessage(); 39}
js(dispatch先、action)
js(dispatch先)
1 2gazoupload(context,payload){ 3 // let that=this; 4 let param =new FormData(); 5 param.append('tekitou',payload); 6 param.append('account_id',this.state.user.now_account[0].id); 7 console.log(this.state.user.now_account[0].id); 8 console.log(payload); 9 axios.post( 10 '/spa-test/src/htdocs/udemy-php/upload.php', 11 param, 12 { 13 headers: { 14 'content-type': 'multipart/form-data' 15 }, 16 } 17 ).then(function(data){ 18 console.log('dekita',data.data); 19 }) 20 }
vue.js
vue.js
1<template> 2 <div> 3 <input type="file" name="atteru" @change="uploadFile" ref="preview" enctype="multipart/form-data"> 4 <button @click="sousin">送信</button> 5 </div> 6</template> 7 8<script> 9export default { 10 data(){ 11 return{ 12 // gazo:this.$refs.preview.files[0], 13 default:null 14 } 15 }, 16 methods:{ 17 uploadFile(e){ 18 console.log(this.$refs.preview.files); 19 e.preventDefault() 20 this.default=this.$refs.preview.files[0]; 21 }, 22 sousin(){ 23 this.$store.dispatch('gazoupload',{okuru:this.default}); 24 } 25 } 26} 27</script>
補足情報(FW/ツールのバージョンなど)
chrome
windows 10
xampp
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー