是什么导致我的代码在尝试向本地服务器发送登录请求时不返回任何数据?

问题描述 投票:0回答:1

[大约一个月以来,我一直在试图弄清楚为什么我的代码在发布wwwForm之后为什么不返回任何内容(我也尝试过使用此函数的较新版本,但是我也很不走运。)nameField和passwordField取自游戏中的文本框,并且从注册脚本复制并粘贴了我的登录脚本中使用的代码,但是我将文件位置更改为login.php文件。注册脚本可以正常工作,我可以将新用户添加到数据库中,但是登录脚本仅输出“已发送表格”。而不是返回表单时应该返回的“现在”,并且它永远不会超过该点,这意味着如果用户使用了无效的名称,它将使用户毫无后果,因为脚本永远不会返回答案。我该怎么做才能解决此问题?

谢谢,

统一代码:

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

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

    public Button acceptSubmissionButton;

    public void CallLogInCoroutine()
    {
        StartCoroutine(LogIn());
    }

    IEnumerator LogIn()
    {
        WWWForm form = new WWWForm();
        form.AddField("username", nameField.text);
        form.AddField("password", passwordField.text);
        WWW www = new WWW("http://localhost/sqlconnect/login.php", form);
        Debug.Log("Form Sent.");
        yield return www;
        Debug.Log("Present");
        if (www.text[0] == '0')
        {
            Debug.Log("Present2");
            DatabaseManager.username = nameField.text;
            DatabaseManager.score = int.Parse(www.text.Split('\t')[1]);
            Debug.Log("Log In Success.");
        }
        else
        {
            Debug.Log("User Login Failed. Error #" + www.text);
        }

    }

    public void Validation()
    {
        acceptSubmissionButton.interactable = nameField.text.Length >= 7 && passwordField.text.Length >= 8;
    }
}

login.php:

<?php
echo "Test String2";
$con = mysqli_connect('localhost', 'root', 'root', 'computer science coursework');

// check for successful connection.
if (mysqli_connect_errno())
    {
        echo "1: Connection failed"; // Error code #1 - connection failed.
        exit();
    }

$username = mysqli_escape_string($con, $_POST["username"]);
$usernameClean = filter_var($username, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
$password = $_POST["password"];

if($username != $usernameClean)
{
    echo "7: Illegal Username, Potential SQL Injection Query. Access Denied.";
    exit();
}

// check for if the name already exists.

$namecheckquery = "SELECT username, salt, hash, score FROM players WHERE username='" . $usernameClean . "';";

$namecheck = mysqli_query($con, $namecheckquery) or die("2: Name check query failed"); // Error code # 2 - name check query failed.

if (mysqli_num_rows($namecheck) != 1)
{
    echo "5: No User With Your Log In Details Were Found Or More Than One User With Your Log In Details Were Found"; // Error code #5 - other than 1 user found with login details
    exit();
}

// get login info from query
$existinginfo = mysqli_fetch_assoc($namecheck);
$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 "Test String2";
echo"0\t" . $existinginfo["score"];

?>
php sql database sqlite unity3d
1个回答
0
投票

此问题通过将IENumerator LogIn()更改为IENumerator Start()得以解决。该程序在场景开始时正确运行,但在按下按钮触发时却无法正确运行。奇怪的是,从按钮触发后,另一个脚本(与此脚本共享许多代码)中的Register()函数运行良好。我不确定为什么会这样。

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

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

    public Button acceptSubmissionButton;

    IEnumerator Start()
    {
        WWWForm form = new WWWForm();
        form.AddField("username", nameField.text);
        form.AddField("password", passwordField.text);
        WWW www = new WWW("http://localhost/sqlconnect/login.php", form);
        Debug.Log("Form Sent.");
        yield return www;
        Debug.Log("Present");
        if (www.text[0] == '0')
        {
            Debug.Log("Present2");
            DatabaseManager.username = nameField.text;
            DatabaseManager.score = int.Parse(www.text.Split('\t')[1]);
            Debug.Log("Log In Success.");
        }
        else
        {
            Debug.Log("User Login Failed. Error #" + www.text);
        }

    }

    public void Validation()
    {
        acceptSubmissionButton.interactable = nameField.text.Length >= 7 && passwordField.text.Length >= 8;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.