无法使用php webservice连接unity和mysql

时间:2016-07-05 14:55:14

标签: php mysql database unity3d

为了我的目的,我使用了Server Side Highscores Tutorial页面中的脚本。我稍微编辑了它,但它不起作用。该值未保存,我不断在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');
    }
}

1 个答案:

答案 0 :(得分:-1)

引用Spiningit的评论。

  

我已经成功了,脚本现在运行得非常好。它似乎是c#脚本   是问题。我在这里搜索并找到了Appymole的修改过的脚本   它适用于我的应用程序。 appymole.com/tutorial