【发布时间】:2016-11-07 11:30:26
【问题描述】:
出于我的目的,我正在使用服务器端高分教程页面中的脚本。我稍微编辑了它,但它不起作用。该值未保存,我不断在 php 页面中收到此消息:
注意:未定义索引:第 6 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的名称
注意:未定义索引:第 7 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的值
注意:未定义索引:第 8 行 C:\xampp\htdocs\unitypb\saveVerant.php 中的哈希
这是php代码
<?php
$db = mysql_connect('localhost', 'root', '') or die('Could not connect: ' . mysql_error());
mysql_select_db('unitypb') or die('Could not select database');
// Strings must be escaped to prevent SQL injection attack.
$name = mysql_real_escape_string($_GET['name'], $db);
$score = mysql_real_escape_string($_GET['score'], $db);
$hash = $_GET['hash'];
$secretKey="mySecretKey"; # Change this value to match the value stored in the client javascript below
$real_hash = md5($name . $score . $secretKey);
if($real_hash == $hash) {
// Send variables for the MySQL database class.
$query = "INSERT INTO verant VALUES (NULL, '$name', '$score');";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
}
?>
这是c#代码:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class SQL_InputVS : MonoBehaviour {
private string secretKey = "mySecretKey"; // Edit this value and make sure it's the same as the one stored on the server
public string addScoreURL = "http://localhost/unitypb/saveVerant.php?"; //be sure to add a ? to your url
Text text;
void Awake (){
text = transform.Find ("Text").GetComponent <Text> ();
}
public void sendDatabase () {
StartCoroutine (saveValue ("Verant-" + this.transform.name, text.text));
}
IEnumerator saveValue (string name, string score) {
//This connects to a server side php script that will add the name and score to a MySQL DB.
// Supply it with a string representing the players name and the players score.
string hash = Md5Sum (name + score + secretKey);
string post_url = addScoreURL + "name=" + WWW.EscapeURL(name) + "&score=" + score+ "&hash=" + hash;
// Post the URL to the site and create a download object to get the result.
WWW hs_post = new WWW(post_url);
yield return hs_post; // Wait until the download is done
if (hs_post.error != null)
{
print("There was an error: " + hs_post.error);
}
}
public string Md5Sum(string strToEncrypt)
{
System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
byte[] bytes = ue.GetBytes(strToEncrypt);
// encrypt bytes
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashBytes = md5.ComputeHash(bytes);
// Convert the encrypted bytes back to a string (base 16)
string hashString = "";
for (int i = 0; i < hashBytes.Length; i++)
{
hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
}
return hashString.PadLeft(32, '0');
}
}
【问题讨论】:
-
警告:如果您只是学习 PHP,请不要使用
mysql_query接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。 -
纯属记录,Spin。要获得高分,您只需使用 GameCenter 或 GooglePlayServices。它是完全免费的。这些天自己动手做是非常不现实的
-
@Naeim 和大家,感谢您的意见。我做到了,脚本现在运行得很好。似乎 c# 脚本是问题所在。我在这里搜索并找到了 Appymole 修改过的脚本,它适用于我的应用程序。 appymole.com/tutorial
-
你应该将你的解决方案组合成一个答案,以便其他遇到它的人也可以得到帮助。
-
@Spiningit,请添加对此问题的答案,以便它不会在待处理列表中保持打开状态,我只是浪费了我生命中的几分钟来看看如何帮助你,才意识到你' d 已经修好了。我相信其他人也会这样做......
标签: php mysql database unity3d