- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我在 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>
这是我附加到按钮的统一代码,我不确定把它放在哪里所以我对按钮的点击是这个 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();
最佳答案
首先,您的代码是 Javascript/Unityscript 但您标记了 C#。我认为您应该使用 C#,因为它比 Javascript/Unityscript 具有更多的特性和支持。
Here is my unity code which is attached to a button, I wasn't sure where to put it so my onclick for the button is the main of this 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 .
编辑:
However when I then go try to get my response in my Unity application from my webpage, all I debug is
<html>
.
我没有看到 <html>
在你原来的问题。那是因为 <html>
可以在 stackoverflow 上使用来排列文本。我编辑了你的问题和formatted <html>
写入代码以使其显示。
您的代码没有任何问题。 Unity 根本没有显示从服务器接收到的所有其他数据,因为您的代码中有一个新行。只需点击 <html>
您在编辑器中看到的日志,它会向您显示来自服务器的所有其他数据。您必须在编辑器中单击该错误才能查看其余数据。
请注意,您当前的脚本将向 Unity 输出错误:
Your submission was invalid and so it was not submitted.
那是因为您没有填写所有要求的表格。
应该这样做:
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
发送到 Unity或 echo
.谷歌json_encode
获取更多信息。
在 Unity C# 端,使用 JsonUtility
或 JsonHelper
来自 this post反序列化来自服务器的数据。
3。最后,不是构建错误消息并从服务器输出到 Unity,而是简单地从服务器发送错误代码。
在 Unity C# 端,制作一个将错误代码转换为完整错误消息的类。
关于c# - 将 Unity App 连接到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382377/
在撰写本文时,Unity 有一个名为 Unity LTS 2017.4.12f1 的版本,Unity 的最新版本是 2018.2.11 我知道 Unity LTS 应该是稳定版本,但这是否意味着 Un
我需要 Unity 来捕获所有按键,即使 Unity 没有焦点。 我尝试过使用: Input.KeyPress() 但这似乎只有在 Unity 拥有用户输入焦点的情况下才有效。我需要它在没有焦点时工作
我正在尝试统一实现一个TCP服务器。我正在使用 unity pro 3.5,当我在场景中运行此代码时,unity 挂起,完全没有响应,直到我用任务管理器杀死它。 using UnityEngine;
我想问一下,使用新的unity ads 2.0与unity ads相比,收入有什么区别 Unity Ads Unity Ads 2.0 最佳答案 Unity 广告支持 Unity 4.2.2 或更高版
当我运行我的应用程序时,我希望 Unity 打开两个窗口。 window 将有不同的摄像头,但两者都会看到同一个世界。 这样的事情可能吗? (我还没有找到任何证据表明这一点) 我知道我可以通过两个 U
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我使用Unity Hub下载了最新的Unity编辑器,它对于编辑器、文档和语言包运行良好,但无法下载android构建支持。刚刚告诉我这两天下载失败很多次。 所以我从网页下载了UnitySetup-A
我今天已将我的项目升级到 Prism 6.3.0 和 Unity 5.3.1。在此之前,我有 Prism 5 和 Unity 4。 现在我遇到了 Prism.Unity.UnityBootstrapp
Unity 中是否有与 StructureMap 中的 Registry 类等效的内容? 我喜欢考虑一个层/组件/库来自行配置它 - 从而填充容器。所以“父”层只需要知道注册类。 最佳答案 不,没有。
我似乎无法在任何地方找到 Microsoft.Practices.Unity.StaticFactory.dll。 还有其他注册静态工厂的方法吗? 寻找这样的东西 container.Register
是否可以统一尝试所有已定义的构造函数,从参数最多的构造函数到最不具体的构造函数(默认构造函数)? 编辑 我的意思是说: foreach (var constructor in concrete.Get
我有一个正在运行且运行良好的 Unity 应用程序,但我们目前正在通过对所有编译警告采取行动来清理我们的代码。 由于过时的 Microsoft.Practices.Unity.Configuratio
我正在使用 Visual Studio Code 在 Unity 中编写脚本。在“编辑”-“首选项”-“外部工具”-“外部脚本编辑器”下,我也选择了 VS Code。 打开脚本工作正常,但是当我尝试通
因此,我很确定这不是提出此类问题的正确论坛,因此我非常感谢有人将我链接到针对此问题的更好论坛(如果需要)。 我的问题: 在 Unity Hub 中,我进行了设置,以便 Unity 编辑器应下载到我的硬
问题:即使在 Cardboard 相机范围内,我也无法在任何地方看到我的 UI 文本。 截图: 我使用的是Unity 5.4.0b21版本,有人说可以通过降级到Unity 5.3版本来修复。 但是,我
我正在开发一个 Unity 项目,我正在使用 Google VR SDK for Unity 和 FirebaseMessaging.unitypackage 适用于 Unity 的 Firebase
好吧,在谷歌、这里和几个 ASP/MVC 论坛上搜索之后,我一定要问我到底做错了什么。 我的应用程序有一个良好的开端,对 DI、IoC 有很好的理解,并且正在使用 Repository、Service
我们最近将项目中的 Microsoft Unity 从 3.5.1404 版本升级到 5.8.6。在我们的代码中只做了一些小的调整,这次升级似乎很容易。它毫无问题地解决了我们所有注册的实例。但是,我们
我正在弄清楚使用 Unity 应用程序 block 时的意外行为。我有项目 A 作为我的启动项目。 项目 A 具有对项目 B 的项目引用,而项目 B 具有对项目 C 的项目引用。 项目 A 使用 un
我将 Unity 与 MVC 和 NHibernate 结合使用。不幸的是,我们的 UnitOfWork 驻留在不同的 .dll 中,并且它没有默认的空 .ctor。这是我注册 NHibernate
我是一名优秀的程序员,十分优秀!