Bueno quiero que vean mi código y me ayuden a mejorarlo. Yo no sé mucho de PHP y me cuesta saber si mi código está bien escrito, si es como debe ser, si falta organizar o limpiar etc. Por eso quiero que ustedes que son expertos lo vean y me digan qué está mal o qué falta mejorar.
El código funciona muy bien y hace lo que tiene que hacer, solo quiero saber si está bien hecho y en qué puedo mejorarlo.
Es una conexión a la API de un juego para obtener los datos de los jugadores. Primeramente obtiene el GET 'nick', si es que ese nick ya existe en mi base de datos le redirige a una página con sus datos y realiza otras funciones. Si no existe, hace la conexión con la API de la página de juego para comprobar los datos y agregarlos a mi base de datos.
Código PHP:
<? include('../bd/acceso.php');
//obtengo el nick por GET
$getnick = mysql_real_escape_string($_GET['nick']);
//compruebo si ese nick está registrado en mi base de datos. este proceso ya lo hago antes de acceder a esta página, pero de igual maneara lo vuelvo a hacer
$sql = mysql_query("SELECT nick FROM pilotos WHERE nick='".$getnick."'");
//si hay más de 0 registros con ese nick quiere decir ya está registrado y lo redirige a una página con sus datos
if(mysql_num_rows($sql) > 0) {
header("Location: ../datos/".$getnick."");
//si no hay hago la conexion con la API del juego para comprobar si el nick existe
}else {
function xmlnick($url, $postDaten) {
$Abfrage = curl_init();
curl_setopt($Abfrage, CURLOPT_URL, $url);
curl_setopt($Abfrage, CURLOPT_HEADER, true);
curl_setopt($Abfrage, CURLOPT_RETURNTRANSFER, true);
$ausgAbfrage = curl_exec($Abfrage);
curl_close($Abfrage);
$xmlAbfrage = strstr($ausgAbfrage, '<?xml');
$arrayAbfrage = simplexml_load_string($xmlAbfrage);
return $arrayAbfrage;
}
$arrayLeaderboard = xmlnick('https://test.com/'.$getnick.'/profile', $getnick);
//me devuelve un XML y empiezo a recoger los datos
$xml = ($arrayLeaderboard);
$name = $xml->attributes()->name;
$levell = $xml->attributes()->level;
$image = $xml->attributes()->image;
//si $name es vacio quiere decir que no existe y lo redirige a una página
if ($name == ''){
header("Location: ../stats/".$getnick."");
//si no es vacio quiere decir existe. procedo a agregar la informacion del jugador a mi base de datos
}else{
$ag = mysql_query("INSERT INTO pilotos (nick, nivel, avatar) VALUES ('".$name."', '".$levell."', '".$image."' )");
//esta es la funcion que obtiene su record en una determinada pista por POST
function xmlpost($url, $postDaten) {
$Abfrage = curl_init();
curl_setopt($Abfrage, CURLOPT_URL, $url);
curl_setopt($Abfrage, CURLOPT_HEADER, true);
curl_setopt($Abfrage, CURLOPT_RETURNTRANSFER, true);
curl_setopt($Abfrage, CURLOPT_POST, true);
curl_setopt($Abfrage, CURLOPT_POSTFIELDS, $postDaten);
$ausgAbfrage = curl_exec($Abfrage);
curl_close($Abfrage);
$xmlAbfrage = strstr($ausgAbfrage, '<?xml');
$arrayAbfrage = simplexml_load_string($xmlAbfrage);
return $arrayAbfrage;
}
//aquí hago un select de las pistas que tengo guardadas en mi base de datos
$sqlps = mysql_query("SELECT idpista FROM pistas");
//aquí hago un while de las pistas. como son 65 pistas entonces esto se repite 65 veces
while ($psq=mysql_fetch_array($sqlps)){
//estas son la variables con las que obtiene los datos de la pista. Aquí estoy haciendo las peticiones de las pistas en Multiplayer. $b es el id de la pista que lo obtiene como resutado del while - $et es el modo de juego: 2 multiplayer y 1 singleplayer, en este caso multiplayer. $lt es otro dato de las pistas que no es necesario explicarlo xD
$b=$psq['idpista'];
$et='2';
$lt='1';
$postString = 'eid='.$b.'&et='.$et.'<='.$lt.'&dn='.$getnick;
//aquí hago la peticion por POST, llamando a la funcion xmlpost y combinando la URL con la variable $postString que contiene las variables de la petición
$arrayLeaderboard = xmlpost('https://test.com/test', $postString);
//empiezo a recoger los datos del xml recibido
$xml = ($arrayLeaderboard);
foreach ($xml->worldLeaderboard as $mensaje){
$arr = $mensaje->attributes();
$bb = ($arr["personaName"]);
$c = ($arr["eventDuration"]);
$car = utf8_decode($arr["carName"]);
$event = ($arr["eventId"]);
}
//si el dato $bb no está vacio quiere decir que tiene un record en esa pista. procedo a agregar los datos a mi base de datos
if ($bb != ''){
//compruebo si ya existe un registro de esa prueba para ese piloto
$consulta="SELECT pista FROM datos WHERE piloto='".$bb."' AND pista='".$event."' ";
$resultado=mysql_query($consulta) or die (mysql_error());
$ec=mysql_num_rows($resultado);
//si no existe, agrega el registro con los datos
if ($ec == 0){
$reg = mysql_query("INSERT INTO datos (piloto, pista, tiempo, coche) VALUES ('".$bb."', '".$event."', '".$c."', '".$car."' )");
//si ya existe lo actualiza
}else {
$que = mysql_query("UPDATE datos SET coche='".$car."', tiempo='".$c."' WHERE piloto='".$bb."' AND pista='".$event."' ");
}
//si el dato $bb es vacio quiere decir que no tiene un record, asi que no hace nada
}else{
}
//aquí hago exactamente lo mismo que lo anterior pero para el modo Singleplayer
$b2=$psq['idpista'];
$et2='1';
$lt2='1';
$postString2 = 'eid='.$b2.'&et='.$et2.'<='.$lt2.'&dn='.$getnick;
$arrayLeaderboard2 = xmlpost('https://test.com/test', $postString2);
$xml2 = ($arrayLeaderboard2);
foreach ($xml2->worldLeaderboard as $mensaje2){
$arr2 = $mensaje2->attributes();
$bb2 = ($arr2["personaName"]);
$c2 = ($arr2["eventDuration"]);
$car2 = utf8_decode($arr2["carName"]);
$event2 = ($arr2["eventId"]);
}
if ($bb2 != ''){
$consulta2="SELECT pista FROM datos WHERE piloto='".$bb2."' AND pista='".$event2."' ";
$resultado2=mysql_query($consulta2) or die (mysql_error());
$ec2=mysql_num_rows($resultado2);
if ($ec2 == 0){
$reg2 = mysql_query("INSERT INTO datos (piloto, pista, tiempo2, coche2) VALUES ('".$bb2."', '".$event2."', '".$c2."', '".$car2."' )");
}else {
$que2 = mysql_query("UPDATE datos SET coche2='".$car2."', tiempo2='".$c2."' WHERE piloto='".$bb2."' AND pista='".$event2."' ");
}
}else{
}
}
//al completar el while lo redirige a una página donde calcula los datos y le asigna puntajes y posiciones
header("Location: ../calcular/".$getnick."");
}
}
?>
Bueno eso es todo y estoy preparado para críticas. Esto es lo que mi conocimiento da, puede que haya fallado al escribir este código. Me falta conocimiento y experiencia por eso quiero saber sus opiniones.