• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed [Unity] Błąd w systemie logowania

Object Storage Arubacloud
0 głosów
211 wizyt
pytanie zadane 1 lipca 2019 w OpenGL, Unity przez Stami Gaduła (3,790 p.)
zamknięte 2 lipca 2019 przez Stami

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

Skrypt w unity:

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:

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:

<?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.

komentarz zamknięcia: 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.

1 odpowiedź

+1 głos
odpowiedź 1 lipca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
edycja 1 lipca 2019 przez MsMaciek123

Błąd ten występuje często, gdy nie przypniesz jakiegoś obiektu w inspektorze. Jakiś obiekt do którego próbujesz się dostać, ma wartość null.

Nie masz przypadkiem błędu w 12 linii?

connect_errno

 

Spróbuj tego:

public class ResponseLogin
{
    public int error=0;
    public int code=0;
}

Upewnij się, że podajesz właściwy URL

Podobne pytania

0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 6 kwietnia 2019 w PHP przez Matinowsky Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 205 wizyt
pytanie zadane 7 lutego 2018 w SQL, bazy danych przez Hardwell Dyskutant (8,980 p.)
0 głosów
1 odpowiedź 512 wizyt

92,536 zapytań

141,377 odpowiedzi

319,454 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...