###前提・実現したいこと
Unity、php、MySQLを用いたシステムを開発、勉強しています。
システムの概要は、Unity側からPOSTしたデータをphpで受け取り、そのデータを用い、SELECT文でMySQLに保存してあるデータを取得し、それをJSON形式にしてUnityに返す処理を行っています。
実現したいことは、UnityにJSON形式で返されたデータを用いて、動的に作成されるボタンのTextとして表示をしたいと考えています。
###発生している問題・エラーメッセージ
ここで発生している問題は、Unity側に返されたJSONデータをGetData.csで用い、作成されるはずのボタンが作成されませんでした。
ログを参照したところ、送られているはずのJSONデータが何も送られておらず、postdata.phpの表示は[]のみ表示されており、JSONで中身が取得できていな状況でした。
###該当のソースコード
postdata.php
lang
1<?php 2require_once('config.php'); 3require_once('functions.php'); 4 5 //unityから送信されてきたデータ どちらも値は1が送られてきている 6 $year = $_POST['year']; 7 $month = $_POST['month']; 8 9$dbh = connectDb(); 10 11$sth = $dbh->prepare("SELECT * FROM table WHERE year = '$year' AND month = $month"); 12$sth->execute(); 13 14$selectData = array(); 15 16while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 17 $selectData[]=array( 18 'success'=>$row['success'], 19 'failed'=>$row['failed'], 20 ); 21} 22 23header('Content-type: application/json'); 24echo json_encode($selectData); 25 26
GetData.cs
lang
1using UnityEngine; 2using System.Collections; 3using MiniJSON; 4using UnityEngine.UI; 5 6public class GetData : MonoBehaviour 7{ 8 9 [SerializeField] 10 RectTransform prefab = null; 11 12 void Start() 13 { 14 StartCoroutine("GetJSON"); 15 } 16 17 IEnumerator GetJSON() 18 { 19 // webサーバへアクセス 20 WWW www = new WWW("http://localhost/postdata.php"); 21 22 // webサーバから何らかの返答があるまで停止 23 yield return www; 24 // もし、何らかのエラーがあったら 25 if (!string.IsNullOrEmpty(www.error)) 26 { 27 // エラー内容を表示 28 Debug.LogError(string.Format("Fail Whale!\n{0}", www.error)); 29 yield break; // コルーチンを終了 30 } 31 // webサーバからの内容を文字列変数に格納 32 string json = www.text; 33 // JSONデータは最初は配列から始まるので、Deserialize(デコード)した直後にリストへキャスト 34 IList List = (IList)Json.Deserialize(json); 35 36 // リストの内容はオブジェクトなので、辞書型の変数に一つ一つ代入しながら、処理 37 foreach (IDictionary list in List) 38 { 39 string success = (string)list["success"]; 40 string failed = (string)list[failed"]; 41 42 43 var item = GameObject.Instantiate(prefab) as RectTransform; 44 item.SetParent(transform, false); 45 46 var text = item.GetComponentInChildren<Text>(); 47 text.text = "成功 " + success.ToString() + "失敗 " + failed.ToString(); 48 } 49 50 } 51 52} 53
Post.cs
lang
1using UnityEngine; 2using System.Collections; 3 4public class Post : MonoBehaviour { 5 6 void Start () 7 { 8 StartCoroutine(Connect()); 9 } 10 11 private IEnumerator Connect() 12 { 13 string url = "http://localhost/postdata.php"; 14 15 //WWWForm:WWWクラスを使用してwebサーバにポストするフォームデータを生成するヘルパークラス 16 WWWForm wwwForm = new WWWForm(); 17 18 //AddFieldでfieldに値を格納 19 wwwForm.AddField("year", CntrlBtn.Instance.Postyear); 20 wwwForm.AddField("month", CntrlBtn.Instance.Postmonth); 21 22 //WWWオブジェクトにURL,WWWFormをセットすることでPOST,GETを行える。 23 WWW form = new WWW(url, wwwForm); 24 25 //実行 26 yield return form; 27 Debug.Log(form.text); 28 } 29}
###試したこと
postdata.phpのPOSTされたデータ
$year = $_POST['year'];
$month = $_POST['month'];
を用いず、
$year = 1;
$month = 1;
と値を指定して実行すると、Unity側で正常に動作します。
phpにpostされたデータを用いて取得してきたデータは、JSONに変換することはできないのでしょうか?
まだUnity、php等プログラミングに関して、始めたばかりですので、至らない点が多く、皆様のお力をお借りしたいと思い投稿しました。
拙い説明ではあると思いますが、ご教授お願いできませんでしょうか。
よろしくお願い致します。
###補足
ご回答がありましたように、Unity側から、phpへデータをPOSTしているソースコード Post.csを載せました。
このソースでは、Unityで、ボタンを押したとき、そのボタンについてるTextの値を取得し、それをphpにpostしています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/16 15:01 編集