Błąd w systemie logowania

Ogólne pytania na temat Unity3D

Błąd w systemie logowania

Postprzez Stami » 01 Lip 2019, 17:34

Witam. Zrobiłem system logowania w unity, oparty o API stworzone w JavaScript.

Skrypt w unity:
Kod: Zaznacz wszystko
private IEnumerator makeLogin()
    {
        WWWForm form = new WWWForm();
        form.AddField("login", Login_Login.text);
        form.AddField("password", Login_Password.text);
 
#pragma warning disable CS0618 // Type or member is obsolete
        WWW www = new WWW(DataBase_Data.url, form);
        yield return www;
 
        if (!string.IsNullOrEmpty(www.error))
            Debug.LogError(www.error);
        else
        {
            string json = www.text;
            ResponseLogin response = JsonUtility.FromJson<ResponseLogin>(json);
            if (response.error == 0)
                Debug.Log("Zalogowano");
            else
                Debug.LogError("Błąd logowania: " + response.error + "(" + response.code + ")");
        }
    }


Do tego jest klasa ResponseLogin:
Kod: Zaznacz wszystko
public class ResponseLogin
{
    public int error;
    public int code;
}


Jednak przy próbie odczytu zmiennych z ResponseLogin (if (response.error == 0)) występuje błąd:
NullReferenceException: Object reference not set to an instance of an object
Kiedy próbuje odczytać wartość zmiennej www. text, okazuje się że jest ona pusta.

Tutaj jeszcze kod API:
Kod: Zaznacz wszystko
<?php   
    if ((!isset($_POST['login'])) || (!isset($_POST['password'])))
    {
        $result = array('error' => 1, 'code' => 0);
        echo json_encode($result);
        die();
    }
     
    require_once "database_data.php";
    $connect = @new mysqli($host, $db_user, $db_password, $db_name);
     
    if($connect->connect_errno!=0)
    {
        $result = array('error' => 2, 'code' => 1);
        echo json_encode($result);
        die();
    }
     
    $login = htmlentities($_POST['login'], ENT_QUOTES, "UTF-8");
    $password = htmlentities($_POST['password'], ENT_QUOTES, "UTF-8");
     
    $query = "SELECT password FROM users WHERE name =".$login;
     
    if($qResult = @$connect->query($query))
    {
        if($qResult->num_rows <= 0)
        {
            $result = array('error' => 3, 'code' => 0);
            echo json_encode($result);
            $connect->close();
            die();
        }
        else
        {
            $row = $qResult->fetch_assoc();
            if($row['password'] == $password)
            {
                $result = array('error' => 0, 'code' => 0);
                echo json_encode($result);
                $connect->close();
                die();
            }
            else
            {
                $result = array('error' => 4, 'code' => 0);
                echo json_encode($result);
                $connect->close();
                die();
            }
        }
    }
?>



Czy ktoś wie gdzie leży problem?
Z góry dziękuje za pomoc.
Stami
 
Posty: 6
Rejestracja: 12 Paź 2017, 21:18
Has thanked: 0 time
Been thanked: 0 time

Re: Błąd w systemie logowania

Postprzez Hostur » 01 Lip 2019, 21:34

Napisz tę samą funckjonalność w Asp.Net będziesz mógł to zdebugować jak człowiek ;)
Hostur
 
Posty: 739
Rejestracja: 05 Sie 2015, 07:36
Has thanked: 0 time
Been thanked: 0 time

Re: Błąd w systemie logowania

Postprzez Stami » 02 Lip 2019, 00:04

Okazało się, że API z jakiegoś powodu nie może połączyć się z bazą danych. API omija if'a, a nie został dorobiony do niego blok else - dlatego Unity nie może przypisać wartości do ResponseLogin - nie dostaje ich.
Stami
 
Posty: 6
Rejestracja: 12 Paź 2017, 21:18
Has thanked: 0 time
Been thanked: 0 time


Wróć do Wsparcie Unity

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 3 gości