javascriptでcanvasにより画像データを生成後、BLOBデータに変換してajaxにPOSTしてMySQLのカラムを更新するコードを作成しておりますが、MySQLの該当カラムが更新できなく困っております。
以下の通りコードを抜粋しました。
仕組みとしては、main.phpからajaxでset_latlng.phpにPOSTし、login_userの該当レコードのwind_directionカラムを更新するというものです。
main.php
php
1・ 2・ 3・ 4function Base64toBlob(base64) { 5 // カンマで分割して以下のようにデータを分ける 6 // tmp[0] : データ形式(data:image/png;base64) 7 // tmp[1] : base64データ(iVBORw0k~) 8 var tmp = base64.split(','); 9 // base64データの文字列をデコード 10 var data_spl = atob(tmp[1]); 11 // tmp[0]の文字列(data:image/png;base64)からコンテンツタイプ(image/png)部分を取得 12 var mime = tmp[0].split(':')[1].split(';')[0]; 13 // 1文字ごとにUTF-16コードを表す 0から65535 の整数を取得 14 var buf = new Uint8Array(data_spl.length); 15 for (var i = 0; i < data_spl.length; i++) { 16 buf[i] = data_spl.charCodeAt(i); 17 } 18 // blobデータを作成 19 var blob = new Blob([buf], { type: mime }); 20 //var blob_png = new Blob([buf]); 21 return blob; 22 } 23 // base64データをblobに変換 24 var blob_png = Base64toBlob(png); 25 console.log(blob_png); 26 console.log(hoge); 27 function insert_latlng(){ 28 $.ajax({ 29 url: "set_latlng.php", 30 type: "POST", 31 processData: false,//Uncaught TypeError: Illegal invocation が出ないようにするために 32 //dataType: "text", 33 data: { 34 "login_user" : hoge, 35 //"latitude" : latitude, 36 //"longitude" : longitude, 37 "wind_direction" : blob_png 38 }, 39 }).done(function(data){ 40 console.log("DB通信完了_PUT"); 41 console.log(data); 42 }).fail(function(data){ 43 console.log("DB通信失敗_PUT"); 44 console.log(data); 45 }); 46 }; 47 insert_latlng(); 48・ 49・ 50・
set_latlng.php
php
1<?php 2ini_set('display_errors',1); //これ重要 3 4session_save_path('/home/****/session'); 5session_start(); 6 7require 'database.php'; 8 9if (!empty($_POST['login_user']) && !empty($_POST['wind_direction'])) { 10 11 $login_user = $_POST['login_user']; 12 $wind_direction = $_POST['wind_direction']; 13 $pdo = connect(); 14 $stmt2 = $pdo->prepare("UPDATE User3 SET wind_direction_image = $wind_direction WHERE user_name = '$login_user'"); 15 $stmt2->execute(); 16 17} 18 19?>
mysql
1mysql> show columns from User3; 2+----------------------+------------------+------+-----+---------+----------------+ 3| Field | Type | Null | Key | Default | Extra | 4+----------------------+------------------+------+-----+---------+----------------+ 5| id | int(11) unsigned | NO | PRI | NULL | auto_increment | 6| user_name | varchar(64) | NO | UNI | | | 7| password | varchar(255) | NO | | | | 8| latlng | geometry | NO | MUL | NULL | | 9| image_boat | int(11) unsigned | YES | | NULL | | 10| image_wave | int(11) unsigned | YES | | NULL | | 11| wind_direction_image | longblob | YES | | NULL | | 12+----------------------+------------------+------+-----+---------+----------------+ 137 rows in set (0.01 sec)
main.phpに記載の該当コードのコンソールログは以下の赤字枠内となっております。
console.log(blob_png);
console.log(hoge);
はそれぞれコンソール上表示できてます。
ajaxのPOSTの後、console.log(data);が空表示されております。
chorme開発ツール内で、Network→Headers→FormDataの内容を確認すると、データが空でした。
なにか原因の切り分けも含め、解決に向けてご教示いただければ幸いです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー