Unity中C#脚本无法向PHP页面传递POST数据求助
解决Unity C# POST数据到PHP为空的问题
问题根源
你当前的代码中,Unity发送的是application/json格式的请求体,但PHP的$_POST超全局变量仅会自动解析**表单编码(application/x-www-form-urlencoded)或多部分表单(multipart/form-data)**格式的数据,无法直接处理JSON请求内容,因此$_POST["loginUser"]取不到值,最终导致SQL插入空值。
方案一:Unity改用表单格式提交(适配现有PHP代码,推荐)
修改Unity的C#代码,用WWWForm构造表单数据,确保PHP的$_POST能正常接收:
using UnityEngine; using UnityEngine.Networking; using System.Collections; public class MyBehavior : MonoBehaviour { void Start() { StartCoroutine(Upload()); } IEnumerator Upload() { WWWForm form = new WWWForm(); // 添加表单字段 form.AddField("loginUser", "1"); form.AddField("field2", "2"); using (UnityWebRequest www = UnityWebRequest.Post("https://www.ascended.us/monstro/login.php", form)) { yield return www.SendWebRequest(); if (www.result != UnityWebRequest.Result.Success) { Debug.Log(www.error); } else { Debug.Log("Form upload complete!"); } } } }
方案二:PHP端解析JSON请求体(需保持JSON格式提交时使用)
如果必须用JSON格式发送数据,PHP需要手动读取并解析请求体:
<?php $sqllink = mysqli_connect("localhost", "REDACTED", "REDACTED", "REDACTED"); if (!$sqllink) { die('Could not connect: ' . mysqli_connect_errno() . ' - ' . mysqli_connect_error()); } // 读取JSON请求体 $jsonData = file_get_contents('php://input'); $requestData = json_decode($jsonData, true); // 检查解析是否成功并获取字段 if ($requestData !== null && isset($requestData['loginUser'])) { $loginUser = $requestData['loginUser']; // 必须做SQL注入防护! $loginUser = mysqli_real_escape_string($sqllink, $loginUser); $query = "INSERT INTO inbound_data (data) VALUES('$loginUser')"; mysqli_query($sqllink, $query); } ?>
关键注意事项
- SQL注入防护:你的现有PHP代码存在严重的SQL注入风险,无论采用哪种方案,都必须对用户输入做转义(如
mysqli_real_escape_string)或使用预处理语句(更安全)。 - BlueHost服务器兼容性:部分共享主机可能限制
php://input的读取,因此方案一的表单提交方式兼容性更强。 - 调试技巧:可以在PHP中添加
var_dump($_POST); var_dump(file_get_contents('php://input'));,然后在Unity中打印请求返回内容,确认数据传递状态。
内容的提问来源于stack exchange,提问作者Ascended_SOLAR
相关产品推荐
相关产品推荐

