Я использую Unity (С#) для подключения к моему серверному коду (написанному на PHP) и отправлю пользовательский ввод в PHP $_POST
.
Я тестировал, что серверная сторона работает хорошо, она может отправлять значение моей базе данных (в таблицу user
). Часть Unity также хорошо работает сама по себе, но как только я попытаюсь соединить их вместе, она отправляет пустое значение в мою пользовательскую таблицу.
Кроме того, автоматически увеличившийся идентификатор таблицы user
позволяет мне знать, что С# правильно подключен к серверу php.
Почему это не работает, как я могу его решить?
Edit: Я попытался сломать линейный тест, и оба С# и php работают нормально. Когда я использую С# для отправки данных в php, values (username password email)
данных values (username password email)
пусты.
Таблица данных:
Проблема: (Нет данных, отправляемых на PHP с помощью С#):
С#:
using UnityEngine;
using System.Collections;
public class DataInserter : MonoBehaviour
{
public string inputUserName;
public string inputPassword;
public string inputEmail;
string CreateUserURL = "http://localhost/prevision/insertUser.php";
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
CreateUser(inputUserName, inputPassword, inputEmail);
}
public void CreateUser(string username, string password, string email)
{
WWWForm form = new WWWForm();
form.AddField("UserNamePost", username);
form.AddField("PasswordPost", password);
form.AddField("EmailPost", email);
WWW www = new WWW(CreateUserURL, form);
}
}
PHP:
<?php
include("dbConnection.php");
//check connection
if(!$connection)
{
die("no connection". mysqli_connect_error());
}
else
echo "<h1>Connected</h1>"."<br>";
$UserName = $_POST["UserNamePost"];
$Password = $_POST["PasswordPost"];
$Email = $_POST["EmailPost"];
$sql = "INSERT INTO User (UserName,Password,Email)
VALUES ('".$UserName."','".$Password."','".$Email."')";
$result = mysqli_query($connection, $sql);
if(!result)
{
echo"Wrong";
}
else
echo "Good";
?>
У меня были подобные проблемы в Unity с отправкой запроса Post.
Все работало нормально, но где-то или каким-то образом Unity/PHP перестала работать правильно из-за неправильных типов заголовков. Я переключил классы для подключения к сети и установил chunckedtransfer в false. Вот что работает для меня
public IEnumerator CreateUser(string username, string password, string email)
{
WWWForm form = new WWWForm();
form.AddField("UserNamePost", username);
form.AddField("PasswordPost", password);
form.AddField("EmailPost", email);
UnityWebRequest www = UnityWebRequest.Post(CreateUserURL, form);
www.chunkedTransfer = false;
yield return www.SendWebRequest();
if(www.error == null){
// you can place code here for handle a succesful post
} else {
// what to do on error
}
}
Затем вы можете вызвать свою функцию как Coroutine
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
StartCoroutine(CreateUser(inputUserName, inputPassword, inputEmail));
}