Foros del Web » Programando para Internet » PHP »

Haber si me podeis echar una manita

Estas en el tema de Haber si me podeis echar una manita en el foro de PHP en Foros del Web. Hola ando liao aqui con un jueguecito y me surgen una dudilla.. Tengo este codigo: integracion.php Código PHP: <?php //Lugar en el World Map function  ubicacion_mapa ( $usuario , ...
  #1 (permalink)  
Antiguo 11/06/2011, 07:50
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Información Haber si me podeis echar una manita

Hola ando liao aqui con un jueguecito y me surgen una dudilla..

Tengo este codigo:

integracion.php

Código PHP:
<?php
//Lugar en el World Map
function ubicacion_mapa($usuario,$nombre_registrado)
{
  
$x rand(50,58);
  
$y rand(50,52);
  
$consulta mysql_query("SELECT * FROM mapa2 WHERE x = '$x' and y = '$y'");
  
$array mysql_fetch_assoc($consulta);
  
$existe $array["usuario"];
  if(
$existe == "-"//Si el usuario en la base de datos es - se inserta si no empieza de nuevo la función.
  
{
    
$nombre_aldea "Solar de $nombre_registrado";
    
$tipo 0//Aquí indicamos con el 0 que salga la textura del cesped.
    
mysql_query("UPDATE mapa2 SET usuario = '$nombre_registrado', nombre = '$nombre_aldea', tipo = '$tipo' WHERE x = '$x' and y = '$y'");
    
//actualizar_edificios($usuario);
  
}
  else
  {
    
ubicacion_mapa($usuario,$nombre_registrado);
  }
}
lo llamo desde registro.php con esto:

Código PHP:
else {
                    
//require("".$documentroot."/validacion.php");
                    
$cod_unico_usuario substr(md5(rand()), 016);
                    
$validado "NO";
                    
/*if (enviar_correo($email, $usuario, $cod_unico_usuario)) {
                        echo "<center>Un correo de validación fue enviado a $email</center>";
                    } else {*/
                        
$fecha_ingreso date("Y-m-d h:i:s");
                        
$last_update time();
                        
mysql_query("INSERT INTO usuarios (usuario,email,contrasena,fecha_ingreso,cod_unico_usuario,validado,nombre_registrado, dinero, last_update) VALUES ('$usuario','$email','$contrasena','$fecha_ingreso','$cod_unico_usuario','$validado','$nombre_registrado', 100, $last_update)") or die("Error de registro");
            include(
"".$documentroot."/includes/integracion.php");
            
ubicacion_mapa($usuario,$nombre_registrado);
                        echo 
"<center><h2>Usuario Registrado Correctamente</h2><a href='index.php'>Volver</a></center>";
                } 
y el problema es que si no hay huecos disponibles se me queda cargando y me dice el error de ejecucion de 30 segundos ese... como hago para si no hay huecos disponibles me salga el aviso en lugar de que se quede cargando hasta que da el error?
  #2 (permalink)  
Antiguo 11/06/2011, 07:53
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Haber si me podeis echar una manita

Puedes poner un tercer parámetro (por ejemplo), que se vaya incrementando en cada ejecución... y q si alguna vez llega a "X" ejecuciones, te devuelva un error en vez de volver a llamar a la función

¿Eso no lo solucionaría?

Edit: Por cierto, no sería más "limpio" buscar primero si hay algún hueco disponible?
  #3 (permalink)  
Antiguo 11/06/2011, 08:13
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Haber si me podeis echar una manita

eso del parametro... no se yo... el caso es que el mapa seguira aumentando.... y cada vez mas casillas... es decir supongo que en algun momento se me ira de las manos... con lo que prefiero si es posible hacerlo automatico con la programacion y no tener que estar haciendolo de modo manual. El caso es que estoy aqui pensando haber como hacerlo... :D
  #4 (permalink)  
Antiguo 11/06/2011, 08:20
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Haber si me podeis echar una manita

No sé, parece algo estilo travian (xD)


No te valdría un
"SELECT * FROM `mapa2` WHERE `usuario`='-' ORDER BY rand() LIMIT 1" ? -> con esto obtienes un "hueco" disponible, de forma aleatoria

Esq no se pq usas una función "recurrente" para encontrar el hueco de forma aleatoria!
  #5 (permalink)  
Antiguo 11/06/2011, 08:28
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Haber si me podeis echar una manita

el caso es que el siguiente veras :D, la base de datos tiene 10.000 registros, el mapa es de 100 cuadritos por 100 cuadritos, he empezado la creacion del mapa desde el centro es decir por el registro 5000 o asi para poder ir creando el mapa hacia ambos lados :D, las coordenadas van por x, y de hay viene esto :
$x = rand(50,58);
$y = rand(50,52);

los numeros entre parentesis son las casillas que ya he creado el mapa y van teniendo cosas.. :P por eso al registrarse un usuario se le asigna alguna casilla aleatroria entre esas coordenadas...

uff que lioo jajajaj ya toy mas mareao aun :P
  #6 (permalink)  
Antiguo 11/06/2011, 10:52
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Haber si me podeis echar una manita

Vale.

Y el problema que tienes, era el max_time_execution está a 30. Puedes cambiarlo únicamente para este script, poniendo al principio:
Código PHP:
ini_set("max_execution_time",0); 
Así no se "detendrá" hasta que encuentre un hueco, por ejemplo.



Ahora, sigo pensando q lo más limpio es buscar primero si hay algun hueco disponible (si de 100 huecos, por ejemplo, hay 5 disponible.... q te salgan por random es complicado!).
  #7 (permalink)  
Antiguo 12/06/2011, 18:18
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Haber si me podeis echar una manita

haber estoy pensando que lo que necesito para saber el numero de resultados haria falta algo asi, habria que realizar una consulta que buscara entre los resultados algo como esto:

$consulta = mysql_query("SELECT * FROM mapa2 WHERE x = '$x' and y = '$y'"); pero que la busqueda la hiciese del modo que en x buscase entre 50 y 58 y que en y buscase entre 50 y 52, es decir habria que hacer como una especie de bucle.... que cada consulta fuese:

x=50 y=50
x=50 y=51
y asi sucesivamente.... y detectar cuantos huecos tiene de nombre '-'

espero no haberos liao mucho pero necesito una idea de como puedo hacer eso...
  #8 (permalink)  
Antiguo 12/06/2011, 19:45
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Haber si me podeis echar una manita

creo que ya lo he conseguio, he hecho esto y "creo" segun las comprobaciones que he estao haciendo que me da el numero correctamente:

Código PHP:
$consulta mysql_query("SELECT x FROM mapa2 WHERE x BETWEEN 50 and 58 and y BETWEEN 50 and 52 and nombre='Terreno Libre' ");
                
$numero mysql_num_rows($consulta);
    echo 
"X = $numero"
no me pegueis si lo que tengo hecho es una barbaridad ya que lo he hecho sin saber y con lo que he ido consiguiendo por google :D, haber si me dais vuestra opinion.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:20.