0

我正在尝试通过 php POST 方法从 MySQL 数据库中检索一些数据到 Unity。但不知何故,当我使用 UnityWebrequest 时,post 变量始终为空。

我的 C# 脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class IDCheck : MonoBehaviour
{
int onlineID = -1;

readonly string urlCheckIdentifier = "http://www.mywebsite.php";

void Start(){
    if (Application.internetReachability != NetworkReachability.NotReachable){
        StartCoroutine("GetOnlineID");
    }
}

void SetID(int _id){
    onlineID = _id;
}

IEnumerator GetOnlineID(){
    // TEST NUMBER 2
    List<IMultipartFormSection> form = new List<IMultipartFormSection>();
    form.Add(new MultipartFormDataSection("onlineid", "test"));

    /* THIS WAS ATTEMPT NUMBER 1
    WWWForm form = new WWWForm();
    form.AddField("onlineid", "test");
    */

    UnityWebRequest www = UnityWebRequest.Post(urlCheckIdentifier, form);
    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError){
        Debug.Log("Error on upload");
    } else {
        Debug.Log(www.downloadHandler.text);
        DownloadData data = JsonUtility.FromJson<DownloadData>(www.downloadHandler.text);
        bool idFound = (data.succes == false)?false:true;

        if (!idFound){
            Debug.Log("Didnt work");
            Debug.Log(data.succes);
        } else {
            SetID(data.id);
            Debug.Log(onlineID);
        }
    }
}
}

我的 PHP 脚本:

<?php
include_once 'dbconnect.php';

// UNIQUE DEVIDE ID IS GIVEN FROM THE APP VIA POST METHOD
$onlineid = $_POST["onlineid"];

// CHECK IF ID EXISTS IN CURRENT USERS TABLE
$query = "SELECT id, username FROM users WHERE uniqueID='$onlineid'";
$result = mysqli_query($dbconnection, $query);

$row = mysqli_fetch_row($result);

if($row){
    // IF ID WAS FOUND, RETURN JSON TO THE APP
    $dataArray = array('success' => true, 'error' => '', 'id' => $row[1], 'username' => $row[2], 'TESTuniqueIDPassed' => $onlineid);
} else {
    // ID WAS NOT FOUND, CREATING NEW ONE.
    $query2 = "INSERT INTO users(uniqueID) VALUES ('$id')";
    $result2 = mysqli_query($dbconnection, $query2);

    // GETTING THE NEWLY CREATED ID FROM THE DB.
    $query3 = "SELECT id, username FROM users WHERE uniqueID='$id'";
    $result3 = mysqli_query($dbconnection, $query3);

    $row3 = mysqli_fetch_row($result3);

    // RETURNING JSON WITH THE NEW ID
    $dataArray = array('success' => true, 'error' => '', 'id' => $row3[1], 'username' => $row3[2], 'TESTuniqueIDPassed' => $onlineid);
}

header('Content-Type: application/json');
//echo json_encode($dataArray);
echo $onlineid;
?>

正如你所看到的,我什至试图回显应该使用统一的 POST 方法填充的 $onlineid ,但这总是返回一个空字符串。

我当然试过谷歌,但大多数关于这个主题的帖子都很老了。添加的解决方案

www.chunkedTransfer = false;

在 yield return call 前面现在折旧了,另一个建议的解决方案是把

www.useHttpContinue = false;

前面的yield return也没有解决问题。

有人知道从这里去哪里吗?

问候,马克

4

1 回答 1

0

在等待 anwser 的同时,我尝试了几件事。我自己偶然发现了一个anwser,所以我将它发布给下一个人遇到同样的问题:

您的链接应该以 https 而不是 http 开头,因为 Unity 不再允许不安全的链接。

使用 MultipartFormDataSection 仍然不起作用,但 WWWForm 会!

于 2020-07-21T19:33:33.577 回答