PHP Script brauche hilfe!

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
GuniaStudios
Beiträge: 16
Registriert: 28.01.2004, 00:00
Wohnort: ..

PHP Script brauche hilfe!

Beitrag von GuniaStudios »

Hallo zusammen,
ich habe hier einen php script der für eine Highscore ist und der mit der MySql Datenbank kommuniziert.
Dieser Script schreibt nur Dateien in die Datenbank, wenn die score vom einen Spieler anders ist.
Ich benötige das dieser script auch wenn die score gleich ist wie die in der Datenbank, das er diese Score einträgt.

Danke !

Code: Alles auswählen

// Get Configuation file
	require("config.php");
	
	// Connect to your server
    $db=mysql_connect($host,$user,$pass) or die(mysql_error(mysql_error()));
	@mysql_select_db($dbname) or die (mysql_error(mysql_error()));
	
	///////////////////////////////////////////////////////
	// Status Checker
	///////////////////////////////////////////////////////
	if ($_REQUEST["status"])
	{
		echo "online";
		exit;
	}
	///////////////////////////////////////////////////////
	// Upload new score
	///////////////////////////////////////////////////////
	// Test for the variables submitted by the player
	// If they exist upload into the database

	if ($_REQUEST["playername"] && $_REQUEST["gameid"] && $_REQUEST["score"])
	{
		// Strip out | marks submitted in the name or score
		$playername_safe = str_replace("|","_",$_REQUEST["playername"]);
		$playername_safe = mysql_real_escape_string($playername_safe);
		$gameid_safe = mysql_real_escape_string($_REQUEST["gameid"]);
		$score_safe = mysql_real_escape_string($_REQUEST["score"]);
		$date = date('M d Y');
			
		// Check the score sent is is numeric
		// If the score is not numberic lets set it to zero
		if(!is_numeric($score))
		{
			$score=0; 
		}
		
		// this secret key needs to be the same as the secret key in your game.
		$security_md5= md5($_REQUEST["gameid"].$_REQUEST["playername"].$_REQUEST["score"].$secret_key);
		
		// Check for submitted MD5 different then server generated MD5
		if ($security_md5 <>$_REQUEST["code"])
		{
			// Something is wrong -- MD5 security hash is different
			// Could be someone trying to insert bogus score data
			exit;
		}
		// Everything is cool -- Insert the data into the database
		// No wait! we should update insted
		// first check if there is a score with the same score and if it is update it, if not insert
		$query1 ="select * from $tname where score = '$score_safe'";
		$countresults = mysql_query($query1)or die(mysql_error(mysql_error()));
		$countofdeletes = mysql_num_rows($countresults);

		if (mysql_num_rows($countresults)>0)
		{
			$query = "UPDATE $tname SET playername='$playername_safe', scoredate='$date', md5='$security_md5' WHERE  score = '$score_safe' AND gameid='$gameid_safe'";
			$insert_the_data = mysql_query($query)or die(mysql_error());
		}elseif(mysql_num_rows($countresults)==0){
			$query = "insert into $tname(gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
			$insert_the_data = mysql_query($query)or die(mysql_error());
		}
	}
		
	///////////////////////////////////////////////////////
	// List high score
	///////////////////////////////////////////////////////
	// Return a list of high scores with "|" as the delimiter
	if ($_REQUEST["gameid"])
	{
		$gameid_safe = mysql_real_escape_string($_REQUEST["gameid"]);
		$query = "select * from $tname where gameid = '$gameid_safe' order by score desc limit 1";
		$view_data = mysql_query($query)or die(mysql_error(mysql_error()));
		
		while($row_data = mysql_fetch_array($view_data))
		{
			echo $row_data["playername"];
			echo "|";
			echo $row_data["score"];
			echo "|";
			echo $row_data["scoredate"];
			echo "|";
		}
		
		// We limit the score database to hold only the 1 highest scores per game
		// Delete the 11th lowest score for this game
		// First check to see how many records we have for this game
waigie
Beiträge: 82
Registriert: 20.05.2009, 19:37

Re: PHP Script brauche hilfe!

Beitrag von waigie »

Ein schönes Beispiel wie man Code durch zu viele Kommentare völlig unleserlich macht :D

Jetzt zu deinem Problem

Code: Alles auswählen

$query1 ="select * from $tname where score = '$score_safe'";
$countresults = mysql_query($query1)or die(mysql_error(mysql_error()));
$countofdeletes = mysql_num_rows($countresults);

if (mysql_num_rows($countresults)>0)
{
	$query = "UPDATE $tname SET playername='$playername_safe', scoredate='$date', md5='$security_md5' WHERE score = '$score_safe' AND gameid='$gameid_safe'";
	$insert_the_data = mysql_query($query)or die(mysql_error());
} elseif(mysql_num_rows($countresults)==0){
	$query = "insert into $tname(gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
	$insert_the_data = mysql_query($query)or die(mysql_error());
}
In dem oben stehenden Codestück schaust du ob in der Datenbank ein Eintrag mit der selben Punktzahl existiert. Existiert solch ein Eintrag wird dieser aktualisiert. Existiert noch kein Eintrag mit der selben Punktzahl fügst du einen neuen hinzu (Zumindest wenn der Spieler vorher diese Punktzahl erreicht hatte, sonst machst du einfach gar nichts). Willst du also das immer ein neuer Eintrag eingefügt wird, reicht es den Codeausschnitt von oben, durch den folgenden zu ersetzen:

Code: Alles auswählen

$query = "insert into $tname(gameid,playername,score,scoredate,md5) values ('$gameid_safe','$playername_safe','$score_safe','$date','$security_md5')";
$insert_the_data = mysql_query($query)or die(mysql_error());
GuniaStudios
Beiträge: 16
Registriert: 28.01.2004, 00:00
Wohnort: ..

Re: PHP Script brauche hilfe!

Beitrag von GuniaStudios »

Ja erstmal Danke!

ist nicht ganz was ich wollte :) die Score soll auf den selben Spieler (MySQL Eintrag) beschrieben werden, sozusagen nur die score ändert sich auf den bestehenden Spieler namen.
Grinch
Beiträge: 25
Registriert: 16.04.2004, 22:42

Re: PHP Script brauche hilfe!

Beitrag von Grinch »

Wenn du willst, dass jeder Spieler nur 1x in der Datenbank vorkommt, dann musst du aus dem Ausschnitt von waigi das erste Query verändern:

Code: Alles auswählen

$query1 ="select score from $tname where playername = '$playername_safe'";
Damit wird dir der aktuelle Score zurückgegeben, wenn der Name des Spielers schon in der DB ist, ansonsten gibt es 0 Zeilen zurück und der insert wird ausgeführt.
Wenn du nur updaten willst, wenn der neue Score größer als der alte ist, dann entweder im Code abfragen oder die Aufgabe der DB überlassen:

Code: Alles auswählen

$query = "UPDATE $tname SET score='$score_safe', scoredate='$date', md5='$security_md5' WHERE score < '$score_safe' AND gameid='$gameid_safe' and playername='$playername_safe'";
Mir ist dabei noch aufgefallen, dass der Score als String gespeichert wird. Das führt bei einem "kleiner als" Vergleich zu einem anderen Ergebnis als wenn der Datentyp Integer oder Double wäre. Das müssest du anpassen um die DB korrekt vergleichen zu lassen. Ansonsten muss der Vergleich in PHP geschehen.
Antworten