Jump to content
Unity Insider Forum

Php Post


Recommended Posts

Ich suche jetzt bestimmt seit 2 Tagen nach irgendwelchen Tutorials oder hilfen wie ich ein PHP Post bzw Request "erstelle".

 

Ich möchte einfach nur eine Variable aus Unity in meine PHP Datei übergeben.

 

Es wäre sehr nett wenn jemand ein Beispiel schreiben könnte, was ich verstehen kann und daran lernen kann.

 

Danke im vorraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also du hast 2 Seiten.... die Unity und die PHP Seite.

Auf der PHP Seite brauchst du ne DB Connection klarerweise.

 

Es gibt mehrer Arten wie du dir die Daten holen kannst. Alle haben Vor und Nachteile.

 

Hier eine Version mit GET (Querystrings).

 

<?php

require_once ("mysqlconnect.php");  

// Strings must be escaped to prevent SQL injection attack.
$userid = mysql_real_escape_string($_GET['userid'], $db);
$wert1= mysql_real_escape_string($_GET['wert1'], $db);  
$wert2= mysql_real_escape_string($_GET['wert2'], $db);  
$hash = $_GET['hash'];
$privateKey="1234abcdef1234"; # Change this value to match the value stored in the client javascript below
$msg = "";

// Test Insert
$query = "INSERT INTO werte(userid,wert1,wert2) VALUES ('".$userid."','".$wert1."','".$wert2."');";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

mysql_close($db);

?>

 

auf der Unity Seite verwendest du die WWW Klasse.

 

//make sure it's the same as the one in the PHP files
private const string SECRET_KEY = "1234abcd1234";
private string saveroundurl = "http://www.test.com/wertespeichern.php";

//generate Hash Key for secure URL transfer
		string hashcode = "";
		hashcode = Md5Sum(useridtoSaveLap + niceTime + SECRET_KEY);
		//Debug.Log(hashcode);

		string completeUrl = null;
		completeUrl = saveroundurl + "?userid=" + useridtoSaveLap + "&wert1=" + niceTime + "&wert2="+ lastlap + "&hash=" + hashcode;
		//Debug.Log(completeUrl);
		WWW www = new WWW(completeUrl);
	   // hier eine CoRoutine einfügen

 

 

Du kansnt dann auch noch eine CoRoutine verwenden um Fehler usw zu prüfen....

 

 IEnumerator writeWerte(WWW www)
{
	yield return www;

	if (www.error == null)

	{ // kein Fehler

} else {
// kein Fehler
Debug.Log(www.error);
}

 

 

....die MD5 Hashes dienen zur Sicherheit und sollten entsprechend immer mit Werten die nur du kennst kombiniert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

//Code Habe nun alles auf die Reihe bekommen.

 

An der Stelle nochmal danke für die ganze Hilfe.

 

Nun habe ich folgendes Problem: Wenn ich es in Unity Teste funktioniert alles EINWANDRFREI. Aber sobald es auf dem Handy ist, scheint es so als würde es den Server Script um über WWW auf das PHP Script zu leiten ignorieren.

 

Aber warum ignoriert die app das?

 

using UnityEngine;
using System.Collections;
public class Server : MonoBehaviour
{
public string[] items;
public UnityEngine.UI.Text PlayerName;
public UnityEngine.UI.Text CoinsAmount;
int counter = 0;
int index;
IEnumerator Start()
{
	while (true)
	{
		index = 0;
		string completeUrl = "*******.vweb12.nitrado.net/xxx.php";
		completeUrl = "http://" + completeUrl + "?userid=" + PlayerName;
		WWW playerData = new WWW(completeUrl);
		yield return playerData;
		string playerDataString = playerData.text;
		print(playerDataString);
		items = playerDataString.Split(';');
		string[] coins = new string[items.Length];
		string[] names = new string[items.Length];
		//print(GetDataValue(items[1], "ID:"));
		foreach (string item in items)
		{
			foreach (char element in item)
			{
				if (element == '|')
				{
					coins[index] = item.Remove(0, counter + 7);
					names[index] = item.Remove(0, 3);
					names[index] = names[index].Remove(counter - 3);
					index++;
					counter = 0;
					break;
				}
				else
				{
					counter++;
				}
			}
		}
		index = 0;
		foreach (var item in names)
		{
			if (item == PlayerName.text)
			{
				CoinsAmount.text = (coins[index]);
			}
			else
			{
				index++;
			}
		}
	}
}
string GetDataValue(string data, string index)
{
	string value = data.Substring(data.IndexOf(index) + index.Length);
	if (value.Contains("|")) value = value.Remove(value.IndexOf("|"));
	return value;
}
}

Link zu diesem Kommentar
Auf anderen Seiten teilen

wann und wo rufst du die CoRoutine "Start" auf?

Start wird von Unity aufgerufen. Gibt start einen IEnumerator zurück, wird start automatisch als Coroutine ausgeführt.

Funktioniert bei fast allen Unity-Events. Ausgenommen sind zyklische Events, wie Update und FixedUpdate.

 

Danke, Sascha

 

Wie gesagt im Unity Editor funktioniert es Einwandfrei , an solchen Fehlern sollte es nicht liegen.

 

Ich bin wirklich am verzweifeln

Link zu diesem Kommentar
Auf anderen Seiten teilen

Funktioniert's denn als PC Standalone?

Vielleicht hat die App auf dem Handy keinen Internetzugriff zugesprochen bekommen.

 

Auch im PC Standalone funktioniert es.

 

Wie könnte ich das testen ob er den Internetzugriff zugesproche bekommt. Denn wenn ich die App insatlliere steht dort:

Vollständiger Internetzugriff

Netzwerkstatus anzeigen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na da haben wir doch was!

 

http://answers.unity...texception.html

 

In der tat der Fehler wäre damit gefunden. Doch leider verstehe ich nicht ganz wie ich es beheben kann. Habe bereits die AndroidManifest.xml in mein Plugin Ornder kopiert. Funktioniert nur leider auch nicht

 

Bzw ich weiß nicht so ganz was ich damit anstellen soll

Link zu diesem Kommentar
Auf anderen Seiten teilen

<?php

require_once ("mysqlconnect.php");  

// Strings must be escaped to prevent SQL injection attack.
$userid = mysql_real_escape_string($_GET['userid'], $db);
$wert1= mysql_real_escape_string($_GET['wert1'], $db);  
$wert2= mysql_real_escape_string($_GET['wert2'], $db);  
$hash = $_GET['hash'];
$privateKey="1234abcdef1234"; # Change this value to match the value stored in the client javascript below
$msg = "";

// Test Insert
$query = "INSERT INTO werte(userid,wert1,wert2) VALUES ('".$userid."','".$wert1."','".$wert2."');";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

mysql_close($db);

?>

Die alten mysql Funktionen gelten schon lange depricated und sind in Version 7 rausgeflogen.

Man sollte Beispiele besser schon mit aktuelleren Bibliotheken (msqli oder PDO) zeigen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie genau sieht dein host denn aus? Diese Exception kommt zB vor wenn du eine IP angibst die nicht korrekt formatiert ist zB:

 

127.0.0.1

 

vs

 

127.0.0.01

 

Bin mir nicht ganz sicher was du mit Host meinst.

 

Ich sende doch per Post eine Variable an das PHP Script, das PHP Script nimmt das ganze an und sendet es weiter an den Server. Funktioniert im Editor auch einwandfrei.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie genau sieht dein host denn aus? Diese Exception kommt zB vor wenn du eine IP angibst die nicht korrekt formatiert ist zB:

 

127.0.0.1

 

vs

 

127.0.0.01

Das PHP-Skript läuft ja wohl auf dem Server, der übrigend auch "Host" genannt wird.

 

Die Host IP ist diese, auf der ich dann die Coins auslese.

www.niXXXXX_.XXXXX.XXXXX.net/XXXXXXX.php

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jung!

Du solltest "NIEMALS" solch eine Adresse in ein Forum rein schreiben. Egal wie unbedeutend es scheint. Hacker freuen sich über solche Infos. Und deswegen habe ich die Adresse unkenntlich gemacht.

 

Okay, habe ich nicht ganz bedacht. Danke!

 

Habe jetzt nun mal was getestet. Habe einfach mal den Host zu google.de oder http://forum.unity-community.de/ und schon kann mein Smartphone das ganze lesen. Aber geht es um meine HostIP funktioniert es wieder nicht.

 

Sehr Mysteriös. Und ja sie ist richtig, habe alles mehrmals getestet

 

 

Fehler entdeckt, anscheinend kann der WWW Post auf Android kein "_" übersetzen Whatever.

Hat jemand eine Lösung dafür oder muss ich mir ernsthaft eine neue Domain kaufen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...