- Home /
Help with Server Side HighScores
Hi,
I'm trying to get the post score function working on this script I've already tried setting it up on my webhost to no avail, so I thought I'd try setting up a local host on Wampserver.
Edit: Now working on localhost, was referencing a string called userName, instead of name. Still not working on webhost.
Here is the c# script which should pass the values to addscorelocal.php
using UnityEngine;
using System.Collections;
public class ScoreSceneGUI : MonoBehaviour
{
// FIELDS
// SCORE FIELDS
private string name = "Test";
private string difficulty = "Normal";
private int score = 123;
// SERVER DETAILS
private string key = "1dYujOp";
private string addScoreURL = "http://localhost/addscorelocal.php?";
// MONO METHODS
// Use this for initialization
void Start ()
{
}
// Handles Drawing of GUI
void OnGUI()
{
// Button To Submit and Exit
if(GUI.Button(new Rect(labelXOffset, labelYOffset + 5 * (spacing + labelHeight), labelWidth, labelHeight), "Submit Score"))
{
StartCoroutine(PostScores());
}
}
// CLASS METHODS
// Post Score
IEnumerator PostScores()
{
//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.
print ("ScoreSceneGUI.PostScores: method called");
string hash = Md5Sum(name + score + key);
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 posting the high score: " + 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');
}
}
And here is the addscorelocal.php, which is in the www directory of wamp
<?php
$db = mysql_connect('localhost', 'root', 'root') or die('Could not connect: ' . mysql_error());
mysql_select_db('localscores') 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="1dYujOp"; # 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 scores values (NULL, '$name', '$score');"; // scores
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
}
?>
I tried adding an entry, and check the database. No luck. Help would be greatly appreciated.
Answer by DMCH · Oct 30, 2013 at 03:02 PM
Got it working. The error seems to have been in setting up the table in the database.
CREATE TABLE `scores` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(15) NOT NULL DEFAULT 'anonymous',
`score` INT(10) UNSIGNED NOT NULL DEFAULT '0'
)
TYPE=MyISAM;
// TYPE=MYISAM was the problem. It says on the site to use ENGINE=MYISAM if TYPE throws an error. It didn't for me, but when I made a new database and changed to ENGINE, it worked.
Your answer
![](https://koobas.hobune.stream/wayback/20220613120901im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
postScore Server Side Highscores tutorial 1 Answer
Error on HSController.js 1 Answer
MD5 Implementation - Server Side High Score Problems 1 Answer
Retrieving online highscores (following a guide) 1 Answer
Unity networking tutorial? 6 Answers