前提・実現したいこと
初心者です。最近JavaScriptを勉強し始めました。
JavascriptのPOSTを使用してPHPにJSONデータを送信し、
その後PHPを用いてデータベースへインサートしようとしています。
POSTを用いてPHP側に送信するまではできました。
print_r($_POST)でArray ( [text] => {"array1":1,"array2":2,"array3":3,"array4":"お店"} )と出ます。
値として書いている1, 2, 3の実際の値は、
javascriptで手に入れた位置情報の1: latitude(緯度), 2: longitude(経度), 3:accuracyですので少数を含んだ数字です。
PHPからデータベースにインサートするために、この各値(array1~4)をPHPの変数に代入したいのですが、それができません。
発生している問題・エラーメッセージ
Warning: Trying to access array offset on value of type null 警告:タイプnullの値で配列オフセットにアクセスしようとしています
該当のソースコード
JavaScirpt
1 <script> 2 'use strict'; 3 navigator.geolocation.getCurrentPosition(success, fail); 4 5 function success(pos) { 6 $(document).ready(function() { 7 var lat = pos.coords.latitude; 8 var long = pos.coords.longitude; 9 var accu = pos.coords.accuracy; 10 let geol = `経度:${lat} / 緯度:${long}`; 11 $('#geol').text(geol); 12 $('#reg').on('click', function() { 13 let loc = window.prompt('登録する場所の名前を記入してください。'); 14 if (loc) { 15 let data = { 16 'array1': lat, 17 'array2': long, 18 'array3': accu, 19 'array4': loc 20 }; 21 var data2 = JSON.stringify(data); 22 postForm(data2); 23 } 24 //$("#tabledata").append('<td>' + data.array1 + '</td>', '<td>' + data.array2 + '</td>', '<td>' + data.array3 + '</td>', '<td>' + data.array4 + '</td>'); 25 }); 26 }); 27 } 28 29 function fail(error) { 30 alert('位置情報の取得に失敗しました。エラーコード:' + error.code); 31 } 32 33 function postForm(value) { 34 var form = document.createElement('form'); 35 var request = document.createElement('input'); 36 form.method = 'POST'; 37 form.action = 'http://localhost/portfolio/git-portfolio/portfolio2/main-branch.php'; 38 request.type = 'hidden'; 39 request.name = 'text'; 40 request.value = value; 41 form.appendChild(request); 42 document.body.appendChild(form); 43 44 form.submit(); 45 } 46 </script> 47
PHP
1 $text = sanitize($_POST['text']); 2 $text = json_decode($text); 3 print_r($text); 4 5 $lat = $text['array1']; 6 $long = $text['array2']; 7 $accu = $text['array3']; 8 $loc = $text['array4']; 9
試したこと
・中身の整形の問題なのかとも思い
$text = str_replace(':', '=>', $text);をやって、
{"array"=>1}のようにしてみましたがだめでした。
(エラーの文面が変わりませんでした。)
・エンコードしてからデコードしなおすというのもしましたが、だめでした。
補足情報(FW/ツールのバージョンなど)
POST送信する際に参考にしたページはこちらです。https://www.sejuku.net/blog/53627
FormによるPOSTの中の「JavaScriptから動的にPOST送信する方法」を基に書きました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/17 14:07
2021/08/17 14:23