所以我在Unity中有这个应用程序,我正在尝试将它连接到我制作并连接到网站的mySQL数据库。我可以通过网站上的表单将内容插入到数据库中。那很有效。
我接下来要做的是连接Unity应用程序,以便它也可以访问数据库中的内容。我在C#和php编码。我希望统一应用程序向网站询问数据库中的某些信息。然后,网站应查看数据库并将一些信息返回到统一应用程序。
这不是一个重复的问题。我已经看过这里的问题,但仍然无法让它发挥作用。现在我的团结应用程序能够向我的网页发送一条消息,我的网页然后正确地回应。 (我知道这不是我谈到的功能,但我现在正在测试)。然而,当我尝试从我的网页上的Unity应用程序中获取响应时,我调试的所有内容都是<html>
。
您可以访问我的网站:http://historicstructures.org/forms.html
这是我的php代码:
<html>
<style type="text/css">
body {background-color:#666666; color: white;}
</style>
<body>
<h1 align = "center">
<img src="housebackground.jpg" alt="Mountain View" style="width:97%;height:228px;" ></h1>
<h1 align = "center">Submission Status</h1>
<p align = "center">
<?php
//this is the variable that is being recieved from the unity script
$AuthorName = $_POST["Author"];
//here i am printing it out so that it will be sent back to the unity script
// i am also echoing it onto the webpage so that i know it is getting the variable
//correctly from the unity script
echo $AuthorName;
header("Access-Control-Allow-Origin: *");
print($AuthorName);
//gets all the variables the user inputted to form
$StructureName = $_POST["StructureName"];
$Author = $_POST["Author"];
$YearBuilt = $_POST["YearBuilt"];
$EraBuilt = $_POST["EraBuilt"];
$YearDestroyed = $_POST["YearDestroyed"];
$EraDestroyed = $_POST["EraDestroyed"];
$Latitude = $_POST["Latitude"];
$Longitude = $_POST["Longitude"];
$Structurelink = "no exist yet";
//checks to make sure the information is in the right format
$isValid = true;
$errCode = 0;
if ($Latitude<-90 || $Latitude>90){
$isValid = false;
$errCode = 1;
}
if ($Longitude<-180 || $Longitude>180){
$isValid = false;
$errCode = 2;
}
if ($YearBuilt<-400 || $YearBuilt>400){
$isValid = false;
$errCode = 3;
}
if ($YearDestroyed<-400 || $YearDestroyed>400){
$isValid = false;
$errCode = 4;
}
//if the informationt the user gave was correct, then insert into database
if ($isValid ==true){
$servername = "localhost";
$username = "...";
$password = "...";
$dbname = "StructureInfo";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO info (ID, StructureName, Author, YearBuilt, EraBuilt, YearDestroyed, EraDestroyed, Latitude, Longitude, StructureLink)
VALUES ('null','$StructureName','$Author','$YearBuilt','$EraBuilt','$YearDestroyed','$EraDestroyed','$Latitude','$Longitude','$Structurelink')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
//the user has an error in the information they inputted
else{
echo "Your submission was invalid and so it was not submitted. ";
switch ($errCode) {
case 1:
echo "Your latitude is out of bounds.";
break;
case 2:
echo "Your longitude is out of bounds. ";
break;
case 3:
echo "Your year built is out of bounds. ";
break;
case 4:
echo "Your year destroyed is out of bounds. ";
break;
default:
echo "Go back and review your data to make sure it is correct.";
}
}
?>
</p>
<br><br>
</body>
</html>
这是我的统一代码附加到一个按钮,我不知道在哪里放它所以我的onclick为按钮是这个js的主要:
#pragma strict
function Start () {
}
function Update () {
}
function GetFromDB(){
var url = "http://historicstructures.org/action_page_post.php";
var form = new WWWForm();
form.AddField( "Author", "Jess" );
var www = new WWW( url, form );
// wait for request to complete
yield www;
// and check for errors
if (www.error == null)
{
Debug.Log(www.text);
} else {
// something wrong!
Debug.Log("WWW Error: "+ www.error);
}
}
GetFromDB();
答案 0 :(得分:0)
首先,您的代码是Javascript / Unityscript,但您标记了C#。我认为您应该使用C#,因为它具有比Javascript / Unityscript更多的功能和支持。
这是我的统一代码,它附在一个按钮上,我不确定 放在哪里所以我的onclick按钮是这个js的主要
创建一个C#脚本,然后订阅Button的onClick事件。按下按钮时,启动将连接到数据库的协同程序。
public Button button;
void OnEnable()
{
button.onClick.AddListener(() => { StartCoroutine(GetFromDB()); });
}
void OnDisable()
{
button.onClick.RemoveAllListeners();
}
IEnumerator GetFromDB()
{
var url = "http://historicstructures.org/action_page_post.php";
var form = new WWWForm();
form.AddField("Author", "Jess");
WWW www = new WWW(url, form);
// wait for request to complete
yield return www;
// and check for errors
if (String.IsNullOrEmpty(www.error))
{
UnityEngine.Debug.Log(www.text);
}
else
{
// something wrong!
UnityEngine.Debug.Log("WWW Error: " + www.error);
}
}
如果您是C#的新手,this Unity教程应该可以帮助您入门。您可以找到其他 Unity UI 事件样本here。
修改强>
然而,当我接着尝试在Unity应用程序中获取响应时 在我的网页上,我调试的所有内容都是
<html>
。
我在原始问题中没有看到<html>
。这是因为<html>
可以在stackoverflow上用来排列文本。我将您的问题和formatted <html>
编辑成了一个代码,以便显示出来。
您的代码没有任何问题。 Unity根本没有显示从服务器收到的所有其他数据,因为代码中有一个新行。只需单击您在编辑器中看到的<html>
日志,它就会显示服务器上的所有其他数据。您必须在编辑器中单击该错误才能查看其余数据。
请注意,您当前的脚本会向Unity输出错误:
您提交的内容无效,因此未提交。
那是因为你没有填写所需的所有表格。
这应该这样做:
form.AddField("Author", "Jess");
form.AddField("YearDestroyed", "300");
form.AddField("YearBuilt", "300");
form.AddField("Longitude", "170");
form.AddField("Latitude", "60");
form.AddField("StructureName", "IDK");
少数事情:
1 。从服务器中删除html代码。如果你想使用POST / GET,那应该不存在。如果你有html代码那么很难提取你的数据。因此,您的代码应仅从<?php
开始,以?>
2 。如果您要从服务器接收多于1个数据,请使用json。
在PHP方面,使用json_encode
将您的数据转换为json,使用print
或echo
发送给Unity。 Google json_encode
了解更多信息。
在Unity C#端,使用this post中的JsonUtility
或JsonHelper
来反序列化服务器中的数据。
3 。最后,不是从服务器构建错误消息并从Unity输出到Unity,只需从服务器发送错误代码即可。
在Unity C#端,创建一个将错误代码转换为完整错误消息的类。