how to save value to mysql
Hi,
I'm using scripts from the page Server Side Highscores for my purposes. I edited it slightly but it doesn't work. The value is not saving and I keep getting this message in php page:
Notice: Undefined index: Name in C:\xampp\htdocs\unitypb\saveVerant.php on line 6 Notice: Undefined index: Value in C:\xampp\htdocs\unitypb\saveVerant.php on line 7 Notice: Undefined index: hash in C:\xampp\htdocs\unitypb\saveVerant.php on line 8
This is the php code
<?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['Value'], $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` ( `ID` , `Name` , `Value` ) VALUES ('10', 'a', 'b')";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
}
?>
and this is the c# code:
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 Value) {
//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 + Value + secretKey);
string post_url = addScoreURL + "name=" + WWW.EscapeURL(Name) + "&score=" + Value + "&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');
}
}
Answer by VoidStick · May 08, 2017 at 09:14 PM
On line 30 of your C# code, you've indicated that:
string post_url = addScoreURL + "name=" + WWW.EscapeURL(Name) + "&score=" + Value + "&hash=" + hash;
Which means you're passing it three arguments: name
, score
, and hash
.
Meanwhile, your PHP code on lines 6, 7, and 8 are looking for three arguments: Name
, Value
, and hash
. I'm not a PHP expert, but I believe that the indices of $_GET
is case-sensitive and at a minimum need to match what's passed.