c # — извлечение нескольких значений из базы данных с помощью php unity3d

Я создаю как RPG игру, где пользователь может войти в систему, сохранить и загрузить данные. Я могу войти и сохранить. Но когда я хочу загрузить данные, у меня возникают проблемы с загрузкой.

Я выложу только необходимый код (код PHP (Load.php)):

    <?PHP

$Username = $_POST['Username'];
$Location = $_POST['Location'];
$Gold = $_POST['Gold'];
$Level = $_POST['Level'];
$Attack = $_POST['Attack'];
$Defense = $_POST['Defense'];
$MagicDefense = $_POST['MagicDefense'];
$Evasion = $_POST['Evasion'];
$Health = $_POST['Health'];
$MaxHealth = $_POST['MaxHealth'];
$Mana = $_POST['Mana'];
$MaxMana = $_POST['MaxMana'];
$Exp = $_POST['Exp'];
$NextExp = $_POST['NextExp'];
$AcceptedChiefQuest = $_POST['AcceptedChiefQuest'];
$AddedChiefQuest = $_POST['AddedChiefQuest'];

$con = mysql_connect("SERVER_NAME","DATABASE_NAME","PASSWORD") or ("Cannot connect!"  . mysql_error());

if (!$con)
die('Could not connect: ' . mysql_error());

mysql_select_db("DATABASE_NAME" , $con) or die ("Could not load the database" . mysql_error());

$check = mysql_query("SELECT * FROM Information WHERE `Username` = '".$Username."'");

$numrows = mysql_num_rows($check);

if ($numrows > 0)
{
while($row = mysql_fetch_assoc($check))
{
$Username = $row['Username'];
$Location = $row['Location'];
$Gold = $row['Gold'];
$Level = $row['Level'];
$Attack = $row['Attack'];
$Defense = $row['Defense'];
$MagicDefense = $row['MagicDefense'];
$Evasion = $row['Evasion'];
$Health = $row['Health'];
$MaxHealth = $row['MaxHealth'];
$Mana = $row['Mana'];
$MaxMana = $row['MaxMana'];
$Exp = $row['Exp'];
$NextExp = $row['NextExp'];
$AcceptedChiefQuest = $row['AcceptedChiefQuest'];
$AddedChiefQuest = $row['AddedChiefQuest'];

echo $Username;
echo $Location;
}

die();
}

else
{
die ("Data does not exist!");
}?>

И вот где я получаю к нему доступ через скрипт в Unity (необходимый код, где проблема):

    IEnumerator LoadCoroutine(WWW _www)
{
yield return _www;

if (_www.error == null)
{
message = _www.text;

if (_www.text == "Data does not exist!")
{
message = "Data does not exist";

clickedLoadGame = false;
}

else if (_www.text == "Saved data does not match!")
{
message = "Saved data does not match";

clickedLoadGame = false;
}

else
{
if (_www.text == "Village")
{
GameManager.CurrentLocation = "Village";

GameManager.Loader = 1;
}

else if (_www.text == "Yein Plain")
{
GameManager.CurrentLocation = "Yein Plain";

GameManager.Loader = 4;
}

message = "Successfully Loaded.";

mainMenu = false;

yield return new WaitForSeconds(3);

Reset();

GameManager.LoadLevel("Loading Scene");
}
}

else
{
message = "Error while trying to connect to the server.\nMessage: " + _www.error;

clickedLoadGame = false;
}
}

Скрипт возвращает только одно значение, которое $ Расположение основанный на коде PHP, и когда я хочу получить $ Имя пользователя например, _www.text будет VillageYunnan что я не хочу, я хочу, чтобы только одно значение будет напечатано на _www.text, лайк Деревня или же Юньнань и не VillageYunnan и это только для 2 значений, если я хочу получить все $ в PHP это будет похоже VillageYunnan15101010100 и так далее, что будет очень сложно поддерживать.

Мой вопрос: я хочу только _www.text печатать только как одно значение, а не объединять вместе, как я упоминал ранее.

Любая помощь?

Очень ценю ваш ответ.

Спасибо

ИЗДАНО: (Обязательный код)

GameManager.cs

public static void WebsiteConnect(string link)
{
wwwForm = new WWWForm();

wwwForm.AddField("Username", LoggedInUsername);
wwwForm.AddField("Gold", UserInformation.CurrentGold);
wwwForm.AddField("Level", Status.level);
wwwForm.AddField("Attack", Status.attack);
wwwForm.AddField("Defense", Status.defense);
wwwForm.AddField("MagicDefense", Status.magicDefense);
wwwForm.AddField("Evasion", Status.evasion);
wwwForm.AddField("Health", Status.hp);
wwwForm.AddField("MaxHealth", Status.maxHp);
wwwForm.AddField("Mana", Status.mp);
wwwForm.AddField("MaxMana", Status.maxMp);
wwwForm.AddField("Exp", Status.CurrentExperience);
wwwForm.AddField("NextExp", Status.NextLevelExperience);
wwwForm.AddField("AcceptedChiefQuest", QuestManager._acceptedChiefQuest);
wwwForm.AddField("AddedChiefQuest", QuestManager._addedChiefQuest);
}

www = new WWW(link, wwwForm);
}

И я назвал это так:

private void OnGUI()
{
if (GUILayout.Button("Continue", customStartButton.customStyles[0]))
{
clickedLoadGame = true;

audio.PlayOneShot(audioSEClip);

Load();
}
}

private void Load()
{
GameManager.WebsiteConnect("WEBSITE_ADDRESS/Load.php");
StartCoroutine(LoadCoroutine(GameManager.www));
}

IEnumerator LoadCoroutine(WWW _www)
{
yield return _www;

if (_www.error == null)
{
message = _www.text;

var jsonObject = JSON.Parse(_www.text);

//string jsonString = jsonObject.ToString();

Debug.Log(jsonObject);

if (_www.text == "Data does not exist!")
{
message = "Saved data does not match!";

mainMenu = false;

fadeAudio = false;

yield return new WaitForSeconds(3);

clickedLoadGame = false;

Reset();
}

else
{
if (_www.text == "Village")
{
message = "Successfully Loaded.";

GameManager.CurrentLocation = "Village";

GameManager.Loader = 1;

mainMenu = false;

fadeAudio = true;

yield return new WaitForSeconds(3);

Reset();

GameManager.LoadLevel("Loading Scene");
}

else if (_www.text == "Yein Plain")
{
message = "Successfully Loaded.";

GameManager.CurrentLocation = "Yein Plain";

GameManager.Loader = 4;

mainMenu = false;

fadeAudio = true;

yield return new WaitForSeconds(3);

Reset();

GameManager.LoadLevel("Loading Scene");
}

else
{
message = "Data does not exist!";

mainMenu = false;

fadeAudio = false;

yield return new WaitForSeconds(3);

clickedLoadGame = false;

Reset();
}
}
}

else
{
message = "Error while trying to connect to the server.\nMessage: " + _www.error;

clickedLoadGame = false;
}
}

А вот код PHP (Load.php):

<?PHP

$Username = $_POST['Username'];
$Location = $_POST['Location'];
$Gold = $_POST['Gold'];
$Level = $_POST['Level'];
$Attack = $_POST['Attack'];
$Defense = $_POST['Defense'];
$MagicDefense = $_POST['MagicDefense'];
$Evasion = $_POST['Evasion'];
$Health = $_POST['Health'];
$MaxHealth = $_POST['MaxHealth'];
$Mana = $_POST['Mana'];
$MaxMana = $_POST['MaxMana'];
$Exp = $_POST['Exp'];
$NextExp = $_POST['NextExp'];
$AcceptedChiefQuest = $_POST['AcceptedChiefQuest'];
$AddedChiefQuest = $_POST['AddedChiefQuest'];

$con = mysql_connect("WEBSITE_ADDRESS","DATABASE_NAME","PASSWORD") or ("Cannot connect!"  . mysql_error());

if (!$con)
die('Could not connect: ' . mysql_error());

mysql_select_db("DATABASE_NAME" , $con) or die ("Could not load the database" . mysql_error());

$check = mysql_query("SELECT * FROM Information WHERE `Username` = '".$Username."'");

$numrows = mysql_num_rows($check);

if ($numrows > 0)
{
while($row = mysql_fetch_assoc($check))
{
if ($Username == $row['Username'])
{
$Username = $row['Username'];
$Location = $row['Location'];
$Gold = $row['Gold'];
$Level = $row['Level'];
$Attack = $row['Attack'];
$Defense = $row['Defense'];
$MagicDefense = $row['MagicDefense'];
$Evasion = $row['Evasion'];
$Health = $row['Health'];
$MaxHealth = $row['MaxHealth'];
$Mana = $row['Mana'];
$MaxMana = $row['MaxMana'];
$Exp = $row['Exp'];
$NextExp = $row['NextExp'];
$AcceptedChiefQuest = $row['AcceptedChiefQuest'];
$AddedChiefQuest = $row['AddedChiefQuest'];

json_encode($row);
}

else
{
die ("Saved data does not match!");
}
}

die();
}

else
{
die ("Data does not exist!");
}?>

Когда я удаляю все $Username и так далее, и заменить его json_encode($row) только и если код PHP остается таким же, как и выше, результат все тот же, есть ошибка, указанная на string jsonString = jsonObject.ToString(); и var jsonObject = JSON.Parse(_www.text); нулевой.

0

Решение

Вы можете использовать какой-то общий формат (например, xml или json) для обмена структурированными данными между различными приложениями.

В PHP-коде замените:

$Username = $row['Username'];
$Location = $row['Location'];
$Gold = $row['Gold'];
$Level = $row['Level'];
$Attack = $row['Attack'];
$Defense = $row['Defense'];
$MagicDefense = $row['MagicDefense'];
$Evasion = $row['Evasion'];
$Health = $row['Health'];
$MaxHealth = $row['MaxHealth'];
$Mana = $row['Mana'];
$MaxMana = $row['MaxMana'];
$Exp = $row['Exp'];
$NextExp = $row['NextExp'];
$AcceptedChiefQuest = $row['AcceptedChiefQuest'];
$AddedChiefQuest = $row['AddedChiefQuest'];

echo $Username;
echo $Location;

с:

echo json_encode($row);

В коде C # используйте некоторую библиотеку JSON (например, SimpleJSON) для анализа строки JSON и получения закодированных данных.

1

Другие решения

Я не уверен на 100%, что у меня есть вопрос, но я думаю, что это причина ваших проблем:

        echo $Username;
echo $Location;

Это будет вывод YunnanVillage что плохо Заменить его на:

        echo '[' . $Username . ',' . $Location . ']';

Это будет выводить [Yunnan, Village], Теперь вы можете анализировать эту строку намного проще (это формат JSON). Обратите внимание, что это очень простой пример, есть гораздо лучшие способы вывода массива в PHP, например:

json_encode(array('Username' => $Username, 'Location' => $Location));

Я здесь из-за тега c #, но знаю достаточно PHP, чтобы увидеть ошибку в вашем коде. Надеюсь это поможет.

0

По вопросам рекламы [email protected]