Как получить доступ к базе данных MySQL, используя Android на Unity? - PullRequest
0 голосов
/ 28 октября 2019

Я не совсем уверен, как правильно это сформулировать, поэтому, пожалуйста, прости меня, если я допустил какие-либо ошибки. Я закончил создание простого игрового приложения Unity android и создал базу данных MySQL, используя phpmyadmin для подключения к игре Unity, чтобы сохранить данные для пользователя, такие как имя пользователя, пароль и счет. Он прекрасно работает на компьютере (как я прошел несколько уроков по его настройке), где есть соединение, и я могу свободно редактировать и обновлять базу данных. Тем не менее, когда я собираю свою игру для Android и создаю «apk» и вставляю ее в папку загрузок на моем телефоне, я захожу на страницу входа в систему и ввожу имя пользователя и пароль, кажется, что к ней вообще нет доступа. Сама кнопка для входа в систему даже не регистрируется, потому что она вообще не подключена к базе данных. Моя проблема в том, как сделать так, чтобы мой телефон с Android работал с базой данных через мое игровое приложение Unity.

Я совершенно не знаком с игровым приложением Android и с самой Unity, поэтому, пожалуйста, прости меня, если я допустил какие-либо ошибки. Я следовал учебному пособию по YouTube, как подключить мою игру Unity к базе данных MySQL. Я использую xampp и создал базу данных с помощью phpmyadmin, мне также пришлось установить Sublime text 3, чтобы написать php-код для связи с базой данных, и сохранить его в htdocs в xampp. После этого я пошел на единство и создал ac # скрипт для регистрации, входа и оценки для хранения в базе данных. На компьютере все хорошо работает и ошибок нет. Когда я встраиваю в apk для android, однако, он не работает.

Код, который я покажу ниже, - это мой login.php и скрипт c # для входа в мое единство. Комментарии для моего понимания. Это мой login.php:

<?php
$con = mysqli_connect("localhost", "root", "root", "unityaccess"); //enter website, admin username and password, name of database

//check that connection happened 
if(mysqli_connect_errno()){

    echo "1: Connection failed";//error code #1= connection failed, echo= is like console
    exit(); // like return
}

//$username =  $_POST["name"]; //the "$_" is the php way of saying const
$username =  mysqli_real_escape_string($con, $_POST["name"]);//for better security
$usernameclean = filter_var($username, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
$password = $_POST["password"]; // can also use array to call both, but learn later

//check if name exists
$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE username='" . $usernameclean . "';"; // the "." is the php version of "+" in other languages to combine or concatenate

$namecheck = mysqli_query($con, $namecheckquery) or die("2: Name check query failed"); // error code #2 = name check query failed, die is the same thing as exit but gives a bit of information
if(mysqli_num_rows($namecheck) != 1)
{
    echo "5: Either no user with name, or more than one"; //error code #5 = number of names matching !=1
    exit(); 
}

//get login info
$existinginfo = mysqli_fetch_assoc($namecheck); // means its an associative array, similar like POST but this time is the database sending it to here
$salt = $existinginfo["salt"];
$hash = $existinginfo["hash"];

$loginhash = crypt($password, $salt);
if($hash != $loginhash)
{
    echo "6: Incorrect password"; //error code #6 = password does not hash to match table
    exit();
}

echo "0\t". $existinginfo["score"];
?>

, а это мой c # скрипт Login.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; 

public class Login : MonoBehaviour
{
    public InputField nameField;
    public InputField passwordField;

    public Button submitButton;

    public void CallLogin()
    {
        StartCoroutine(LoginPlayer());
    }

    IEnumerator LoginPlayer()
    {
        WWWForm form = new WWWForm();
        form.AddField("name", nameField.text);
        form.AddField("password", passwordField.text);
        WWW www = new WWW("http://localhost/sqlconnect/login.php", form);
        yield return www;
        if(www.text[0] == '0')
        {
            DBManager.username = nameField.text;
            DBManager.score = int.Parse(www.text.Split('\t')[1]); 
            UnityEngine.SceneManagement.SceneManager.LoadScene(0);
        }
        else
        {
            Debug.Log("User login failed. Error # " + www.text);
        }
    }

    public void VerifyInputs()
    {
        submitButton.interactable = (nameField.text.Length >= 8 && passwordField.text.Length >= 8);
    }
}

//And this is the DBManager.cs: 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class DBManager //static class so that we can access this from anywhere
{
    public static string username;
    public static int score;

    public static bool LoggedIn
    {
        get
        {
            return username != null;
        }
    }

    public static void LogOut()
    {
        username = null;
    }
}

// Нет ошибок, егопросто когда я встраиваю его в apk и переношу на телефон, он просто не работает. Я новичок в этом, поэтому, пожалуйста, попробуйте дать фрагменты кода или пошаговое руководство. Я прошу прощения за причиненные неудобства, и ваша помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...