Borisigna nos enseña a hacer un webgame

ATENCIÓN: Nos mudamos a http://juegodenavegador.host22.com/index.php


No estás conectado. Conéctate o registrate

Problema de nuevo con el constructor

Ir abajo  Mensaje [Página 1 de 1.]

1 Problema de nuevo con el constructor el Mar Mayo 11, 2010 8:49 pm

kingnano


Buenas de nuevo, ya solucione el problema anterior, pero ahora me tira un error en la lines que les pongo en negrita,

<?php
session_start();
if(!isset($_SESSION['usuario']))
{
header("Location: index.php");
}
else
{
$usuario = $_SESSION['usuario'];
require('seguridad.php');
conectar_base_datos();
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario = '$usuario'");
$row = mysql_fetch_array($consulta);
echo "Bienvenido: <b>$row[7]</b>";
}
?>
<html>
<head><title>Construcción</title>
</head>
<body>
<?php
if(!isset($_GET['ev']))
{
header("Location: main.php");
}
$ev = $_GET['ev'];
if($ev == "Establo" || $ev == "Molino" || $ev == "Campo" || $ev == "Granero" || $ev == "Mercado")
{
$usuario = $_SESSION['usuario'];
$ev = $_GET['ev'];
$peticion_datos_ev = mysql_query("SELECT * FROM edificios WHERE usuario = '$usuario' and edificio = '$ev'");
$ev_array = mysql_fetch_array($peticion_datos_ev);
echo "<center><h1>$ev_array[2]</h1></center>";
echo "<table align='center' border='1'>";
echo "<tr><td><b>Nivel:</b></td><td>$ev_array[3]</td></tr>";
echo "<tr><td><b>Capacidad:</b></td><td>$ev_array[5]</td></tr>";
echo "<tr><td><b>Precio siguiente Nivel:</b></td><td>$ev_array[4]</td></tr>";
echo "</table>";
$peticion_evento = mysql_query("SELECT * FROM evento WHERE usuario = '$usuario' and evento = '$ev'");
if(mysql_num_rows($peticion_evento) > 0)
{
echo "<center><b>Una ampliación en curso:</b> <a href='timer_proceso3.php?ev=$ev'>Ver</a></center>";
}
else
{
echo "<center><a href='timer_proceso3.php?ev=$ev&p=t'>Subir Nivel</a></center>";
}
}
else
{
header("Location: main.php");
}
?>
<center><a href='Pagina%20web%20juego/main.php'>Principal</a></center>
</body>
</html>


Errores que salen: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a8761820/public_html/constructor.php on line 40

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a8761820/public_html/constructor.php on line 32

Espero que alguien sepa porque es.

Tambien lo pueden ver registrandose: http://virgendegracia.hostoi.com/Aqui

validan el email y despues no les sale nada tengo que editarlo

2 Re: Problema de nuevo con el constructor el Mar Mayo 11, 2010 11:15 pm

Skinet


El primer error se debe a que mysql_num_rows a devuelto un valor vacio o un valor igual a 0.

El segundo es porque el array esta vacio.

No he mirado muchos los codigos si te soy sincero porque veo una locura mezclar codigo php y codigo html todo junto pero el problema de los errores que te tira es debido a las consultas a la base de datos ya que devuelven valores que no son los que deberias de pasarles a esas funciones.

3 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 8:17 am

Rvega_91


Admin
Tal como dijo Borisigna en otro post:

Debe ser que las bases de datos no estan bien.

Yo puse los siguientes campos.

Tabla evento:

id - usuario - tiempo - evento

Tabla edificios:

id - usuario - edificio - nivel - costo - capacidad

En el mismo orden que los he puesto. Verifica además que las bases de datos contengan datos (ingresa datos falsos solo para probar).

Fijate si tienes las mismas tablas.
Igualmente, esta tarde pondré el constructor.php a mi web.

Skinet, creo que para crear los juegos estos basados en navegador, hace falta si o si mezclar php y html, hasta donde tengo entendido.

4 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 4:20 pm

spanisher


Pues yo te aconsejaría que hicieras lo que dice Rvega_91, sobre todo mira el orden de los campos en tus tablas, tiene que ser igual que el de la BBDD de Borisigna.

No es que sea una locura mezclar html y php, lo que pasa es que no es ordenado. Por eso existen los patrones de diseño, pero yo estoy intentando aplicar el modelo vista controlador (MVC) y me es muy difícil en PHP y en web modular. Un lío.

Lo que si veo una locura es acceder a la información de los campos de la BBDD por su número de columna en puesto de su nombre de columna.

Si se hace como hasta ahora por su número de columna, si se te ocurre insertar una columna nueva por en medio, se te desmontan todas las consultas.

En cambio si accedes por el nombre de la columna, no pasa nada por el orden en que las tengas puestas o si ingresas nuevas columna en medio, porque siempre cogerá el valor por el nombre de la columna.

No se si me explico.

Saludos.

5 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 5:20 pm

Skinet


Yo en el juego que tengo por navegador que es de libre distribución llamado Soul Adventure las consultas a la base de datos la mayoria se controlan mediante la id de la tabla, mientras la id sea un campo autoincremental no ahi ningun problema.

Sobre lo dices Rvega_91 los juegos de navegador es igual a cualquier aplicación a nivel de navegador tu la puedes hacer como quieras pero si siges unos cuantos parametros de organización si alguien quiere utilizar tu codigo para otra cosa o simplemente lo abandonas y alguien quiere seguir con el son importantes factores como:


  • Identar el codigo
  • Comentar el codigo
  • Separacion del codigo php del html para su mejor comprensión


Como bien dice spanisher el sistema MVC(Model-View-Controler) es bastante utilizado aunque cuesta controlarlo un poco,siempre queda la opcion de usar un Framework para php como por ejemplo codeigniter.

Sin embargo para hacer mas facil todo y poder separar el codigo html del php se puede usar un sistema de templates simple ya creado que abundan en la red como por ejemplo TemplatePower.

En general lo que se consigue con esto que una funcion se encarge de llamar al codigo html a mostrar y otra funcion se encarge de interpretar los datos que tu pasas a ese template.

Es algo complejo pero cuando le pillas el tranquillo es algo que a la larga viene bastante bien.

6 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 5:50 pm

BORISIGNA


Admin
Bueno, me parecen muy buenas las discusiones de algunos en el foro, veo que están bastante instruidos en el tema de PHP, especialmente cuando hablamos de eficiencia de código.

Me gustaría que sus códigos los fueran publicando en una sección del foro, ya que a muchos nos puede interesar para aprender un poco más afondo esto de programar un browser game.

Lo otro es que traten de explicar más sus mensajes, ya que a veces utilizan términos avanzados que no todos los de este foro pueden entender, recuerden que hay varios que no saben aún ni como conectar a una base de datos.

Por otro lado, mis códigos son asquerosamente sucios, y como ya se ha discutido por más de una vez, especialmente por spanisher, los códigos son lejos, muy optimizables (les hace falta una wash/clean). Un ejemplo claro es que es mucho mejor acceder a los campos de la base de datos con el nombre de la columna y no por el número, tal como explicó spanisher.

Finalmente, espero que cuando terminemos esta carrera inicial de crear un web game, podamos abrir un foro de creación avanzada y, si es posible, hacer un proyecto en conjunto como un grupo que partió de la nada Smile

http://juegodenavegador.wordpress.com

7 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 6:29 pm

spanisher


Me parece una gran idea Borisigna lo del proyecto conjunto Smile

Yo en cuanto pueda colgaré la clase Usuario, de momento estoy liado con poder coordinar el MVC, la web modular y las Clases jeje...

Me trae de cabeza todo esto, sigo buscando soluciones óptimas y eficaces para el futuro.

Por cierto, me ha gustado lo del templatePower, ya he buscado información y a lo mejor me decido por ahí más adelante.

Y otra cosa, espero que las críticas se tomen como constructivas ya que así lo son.

A todos nos enseñaron como extraer valores de la BBDD por número de columna... y luego nos hicieron ver la luz al enseñarnos a extraer los datos por nombre de columna clown

Pero siempre hay que aprender desde el principio.

Por eso Gaspar, te aconsejo que aprendas lo básico de MySQL y PHP antes de meterte en un lío tan GRANDE como es hacer un juego de navegador (para empezar).

Hay que empezar con cosas más sencillas. Pienso.

Saludos!



Última edición por spanisher el Miér Mayo 12, 2010 7:21 pm, editado 1 vez

8 xd el Miér Mayo 12, 2010 6:29 pm

Gaspar


ami casi ni me ayuda Razz y solo me aparese error Razz

9 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 7:47 pm

Rvega_91


Admin
Yo de PHP se podría decir que apenas se nada, y para ir aprendiendo yo creo que la mejor manera es mirando los códigos que Borisigna está subiendo al blog y aprender a leerlos y comprender cada parte del mismo, y también ir mirando guias por google a la vez, ya que todo esto ayuda mucho.

Ahora mismo no me veo capaz de hacer códigos tan complejos como estos, pero si me veo capaz de coger un código de este tipo y entenderlo y hacerle pequeñas modificaciones a gusto personal, y todo esto gracias a que no solo he copiado > pegado el código, si no que he me lo he leído todo y si no entendía una función lo he preguntado por el foro o mirado por Google.

10 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 9:40 pm

kingnano


Ostrassssssss. Muchas gracias, tenia mal puestas las tablas. Muchas, muchas gracias.

11 Re: Problema de nuevo con el constructor el Miér Mayo 12, 2010 9:42 pm

kingnano


Gaspar, contactame por mp y dime cual es el error que lo mismo me ha pasado a mi y te lo puedo solucionar

12 Re: Problema de nuevo con el constructor el Jue Mayo 13, 2010 2:44 am

spanisher


Bueno, la solución para poder acceder a los campos de las tablas por su nombre en puesto de por su número es bien sencilla.

Aquí pongo un ejemplo:

Accediendo por su número de columna:
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario = '$us'");
$row = mysql_fetch_array($consulta);
echo "Bienvenido: $row[7]";


Accediendo por el nombre de columna:
$consulta = mysql_query("SELECT * FROM usuarios WHERE usuario = '$us'");
$row = mysql_fetch_assoc($consulta);
echo "Bienvenido: $row['nombre_registrado']";

como veis el cambio es solo al ejecutar la consulta.

mysql_fetch_array nos ofrece el resultado de los números de las columnas, mientras que mysql_fetch_assoc nos lo ofrece por el nombre de las columnas.

Claro, de la segunda manera te ahorras muchos problemas, porque puedes tener los campos de tus tablas en diferente orden del los que lo tenga Borisigna (que normalmente es lo que nos pasa a todos jeje).

Además al ver el código es mucho más sencillo de entender. Digamos que siempre sabes con que trabajas.

No se si este mensaje debería estar en otro lado Shocked

13 Re: Problema de nuevo con el constructor el Jue Mayo 13, 2010 7:13 am

BORISIGNA


Admin
No te preocupes spanisher, esta bien que esté en este lugar, ya que de aquí apareció la duda.

Me comprometo desde ahora en adelante hacer las consultas a las bases de datos por medio de mysql_fetch_assoc() y por nombre del registro.

http://juegodenavegador.wordpress.com

Contenido patrocinado


Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.