Foros del Web » Programando para Internet » PHP »

Problema al mostrar inventario (Mirar abajo de todo)

Estas en el tema de Problema al mostrar inventario (Mirar abajo de todo) en el foro de PHP en Foros del Web. Alguien me podria dar una idea de como puedo hacer un inventario en PHP y MYSQL? Tengo una tabla que tiene todos los objetos existentes ...
  #1 (permalink)  
Antiguo 24/02/2009, 12:42
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Problema al mostrar inventario (Mirar abajo de todo)

Alguien me podria dar una idea de como puedo hacer un inventario en PHP y MYSQL?
Tengo una tabla que tiene todos los objetos existentes en el juego y quiero saber como hacer para que cada usuario tenga un inventario de 1000 objetos como maximo.

¡¡Gracias!!
Cualquier idea vale.

Última edición por lauchalp95; 24/02/2009 a las 19:05
  #2 (permalink)  
Antiguo 24/02/2009, 12:58
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Inventario en PHP (Denme una ideita)

Tienes que añadir los objetos en la tabla de usuarios

Usuario | Objeto1 | Objeto2 | Objeto3 | ...
Nombre -- 1 --------5--------- 0

Total de objetos = Suma de "ObjetosN" con SUM() en MySQL

Cuando vayas a incrementarle un objeto, compruebas si Total de objetos >= 1000, entonces decides si lo incrementas o muestras que el inventario está lleno.

Suerte
  #3 (permalink)  
Antiguo 24/02/2009, 13:00
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

No entendi mucho..-
Me lo explicas mejor? :(
  #4 (permalink)  
Antiguo 24/02/2009, 13:09
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Inventario en PHP (Denme una ideita)

Has dicho que cada usuario debe tener sus objetos. Esto significa que hay una tabla de usuarios:

usuarios
Usuario (VARCHAR)
Password (VARCHAR)

Y para cada usuario se deben memorizar cuáles (y cuántos) objetos tiene:

usuarios
Usuario(VARCHAR)
Password(VARCHAR)
Objeto1 (INT)
Objeto2 (INT)
Objeto3 (INT)
...

Ahora puedes saber cuantos objetos tiene el usuario haciendo: Objeto1 + Objeto2 + Objeto3 + ... (Si solo hay objetos de un tipo, entonces limítalo a Objeto1 nada más)
Código PHP:
<?
$usuario 
"PEPE";
$total_objetos mysql_result(mysql_query("SELECT SUM(Objeto1, Objeto2, Objeto3) as total_objetos from usuarios where usuario='".$usuario."'"),0);
?>
Supongamos que el usuario tiene 512 objetos en total y quiere hacerse con uno más:
Código PHP:
<?php

$usuario 
"PEPE";

if (
$total_objetos >= 1000)
{
   echo 
"El inventario esta lleno. Solo puedes tener 1000 objetos.";
  
} else {
    
mysql_query("UPDATE usuarios SET objeto1 = objeto1+1 where usuario ='".$pepe."'");
}

?>

PD: Los códigos son solo para orientar, es fácil que no te funcionen.
  #5 (permalink)  
Antiguo 24/02/2009, 13:15
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

Sigo sin entender..
Si solo hay 3 campos..
COmo puede tener 1000 objetos?
  #6 (permalink)  
Antiguo 24/02/2009, 13:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Inventario en PHP (Denme una ideita)

campos=columnas=3=X
filas=objetos=???=Y

vertical y horizontal, son 3 campos en horizontal... y pueden ser 10,000 filas... en vertical (algo simple, debiste ir a la escuela)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 24/02/2009, 13:24
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

No entiendo..
Pero que no entiendo..
Bueno chao..
Gracias igual--
  #8 (permalink)  
Antiguo 24/02/2009, 13:25
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Inventario en PHP (Denme una ideita)

Cita:
Iniciado por lauchalp95 Ver Mensaje
Sigo sin entender..
Si solo hay 3 campos..
COmo puede tener 1000 objetos?
¿Sabes cómo funciona la base de datos? Deberías leer algo de documentación de MySQL.
  #9 (permalink)  
Antiguo 24/02/2009, 13:26
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Inventario en PHP (Denme una ideita)

Cita:
Tienes que añadir los objetos en la tabla de usuarios

Usuario | Objeto1 | Objeto2 | Objeto3 | ...
Nombre -- 1 --------5--------- 0


Lo que tienes es que tener una tabla con los usuarios:

ID | Usuario
1 pepe
2 juan
3 alberto
...

En otra tienes los objetos:

ID | Objeto
1 objeto1
2 objeto2
3 objeto3

Y en otra tabla haces tus relaciones:

ID | id_usuario | id_objeto
1 1 1
2 1 3
3 1 2

Eso quiere decir que el usuario con ID 1, pepe, tiene objeto1, objeto2 y objeto3.
Todo eso sin crear 1,000 campos en una base de datos

Ese es el concepto de las relaciones 1:M y las base de datos relacionales.
  #10 (permalink)  
Antiguo 24/02/2009, 13:27
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Inventario en PHP (Denme una ideita)

RonRuby eso es lo mismo que he hecho yo, pero separando los objetos en otra tabla aparte. Si no lo entiende con una tabla, imagínate con 3.

Solo espero que a alguien mínimamente documentado le haya servido mi aporte.
  #11 (permalink)  
Antiguo 24/02/2009, 13:37
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Inventario en PHP (Denme una ideita)

Cita:
Iniciado por david_M_G Ver Mensaje
RonRuby eso es lo mismo que he hecho yo, pero separando los objetos en otra tabla aparte. Si no lo entiende con una tabla, imagínate con 3.

Solo espero que a alguien mínimamente documentado le haya servido mi aporte.
Pero hacerlo con 1 tabla significa que para 1,000 objetos diferentes, tendrias que crear 1,000 Columnas en la base de datos. Lo cual no es muy OPTIMO (Aparte de un suicidio)
  #12 (permalink)  
Antiguo 24/02/2009, 13:40
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

Si, veo que ya entiendo..
¡¡Gracias :)!!
  #13 (permalink)  
Antiguo 24/02/2009, 13:46
 
Fecha de Ingreso: mayo-2007
Mensajes: 49
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Inventario en PHP (Denme una ideita)

creo que en cierta manera estaría algo complicado como dice ronruby, ya que seria una relación de 1:M, entonces con dos tablas únicas y una llave foránea seria necesario.

tabla usuario:

username(llave primaria), password

tabla Productos:

nombre, descripcion, usuario(llave foránea)

en la tabla producto puedes usar un id o un nombre de producto como la llave primaria, eso dependería de las características de tu inventario.

De esta manera tendriamos un usuario con muchos productos y el producto solo pertenece a un usuario.

Lo que decía david_M_G era demasiado forzado y complicado, si quisieras agregar un limite mayor de productos tendrías que crear una infinidad de campos en tu DB.

espero te sirva suerte.
  #14 (permalink)  
Antiguo 24/02/2009, 13:48
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

Pd.: Me sirvieron todos los aportes,e stoy documentado, lo que pasa es que en este momento estoy medio mal animicamente, gracias a todos. Ya entendi todo
  #15 (permalink)  
Antiguo 24/02/2009, 13:48
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Inventario en PHP (Denme una ideita)

Cita:
creo que en cierta manera estaría algo complicado como dice ronruby, ya que seria una relación de 1:M, entonces con dos tablas únicas y una llave foránea seria necesario.
Pero es mas escalable. Se te hace mas facil a ti como administrador de el sistema agregar un nuevo producto. Y tambien para hacer inventario.
  #16 (permalink)  
Antiguo 24/02/2009, 13:50
 
Fecha de Ingreso: junio-2004
Ubicación: Argentina
Mensajes: 150
Antigüedad: 20 años, 5 meses
Puntos: 2
Respuesta: Inventario en PHP (Denme una ideita)

Crear 1.000 columnas seria una locura, mejor seria crear una columna “INVENTARIO”, y añadir los ID’s de los ítems separados por algún carácter, y luego parsearlo desde PHP.

Id_usuario inventario
1 1;3;5

saludos.
  #17 (permalink)  
Antiguo 24/02/2009, 13:51
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

Muchas gracias a todos!
  #18 (permalink)  
Antiguo 24/02/2009, 13:52
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Inventario en PHP (Denme una ideita)

Cita:
Iniciado por FedericoC Ver Mensaje
Crear 1.000 columnas seria una locura, mejor seria crear una columna “INVENTARIO”, y añadir los ID’s de los ítems separados por algún carácter, y luego parsearlo desde PHP.

Id_usuario inventario
1 1;3;5

saludos.
Buena idea, pero a la hora de mostrar, por ejemplo, que usuarios compraron que productos, se arma un lio.

Ya dejemos el tema morir

Cita:
Pd.: Me sirvieron todos los aportes,e stoy documentado, lo que pasa es que en este momento estoy medio mal animicamente, gracias a todos. Ya entendi todo
xD Me alegra saber que entendiste todo.
  #19 (permalink)  
Antiguo 24/02/2009, 14:30
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Concordar ID con Objeto

Creo que me hare conocido por mis problemas ya x.x
Ya lo pense mucho y pues no me sale hacerlo.

Tengo una tabla objetos y otra inventario
Objetos:
Nombre
ID
Imagen
inventario:
ID USUARIO
ID OBJETO

Y tengo la pagina inventario.php que cree una tabla dinamica en la cual dice que objetos tenes.
Pero solo sale el ID, y yoquiero que salga el NOMBRE del objeto ( y la imagen).
¿Como hago para transformar el ID con el nombre?
Creo que es con un while o un for.. pero ni idea.. Gracias
  #20 (permalink)  
Antiguo 24/02/2009, 14:32
 
Fecha de Ingreso: mayo-2007
Mensajes: 49
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Concordar ID con Objeto

Creo que debe ser alguna mala selección de tabla, muestra un poco de tu código y podremos corregirlo.
  #21 (permalink)  
Antiguo 24/02/2009, 14:34
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Concordar ID con Objeto

Código PHP:
Ver original
  1. $colname_usuarios = "-1";
  2. if (isset($_SESSION['MM_Username'])) {
  3.   $colname_usuarios = $_SESSION['MM_Username'];
  4. }
  5. mysql_select_db($database_Noone, $Noone);
  6. $query_usuarios = sprintf("SELECT id, usuario FROM usuarios WHERE usuario = %s", GetSQLValueString($colname_usuarios, "text"));
  7. $usuarios = mysql_query($query_usuarios, $Noone) or die(mysql_error());
  8. $row_usuarios = mysql_fetch_assoc($usuarios);
  9. $totalRows_usuarios = mysql_num_rows($usuarios);
  10.  
  11. mysql_select_db($database_Noone, $Noone);
  12. $query_objetos = "SELECT * FROM objetos";
  13. $objetos = mysql_query($query_objetos, $Noone) or die(mysql_error());
  14. $row_objetos = mysql_fetch_assoc($objetos);
  15. $totalRows_objetos = mysql_num_rows($objetos);
  16.  
  17. mysql_select_db($database_Noone, $Noone);
  18. $query_relacion = "SELECT * FROM inventario WHERE id_u = $row_usuarios[id] ORDER BY id_o ASC";
  19. $relacion = mysql_query($query_relacion, $Noone) or die(mysql_error());
  20. $row_relacion = mysql_fetch_assoc($relacion);
  21. $totalRows_relacion = mysql_num_rows($relacion);
  #22 (permalink)  
Antiguo 24/02/2009, 14:36
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Inventario en PHP (Denme una ideita)

Tal y como lo he entendido no se trata de 1000 objetos distintos, sino de 1000 objetos en total. Por eso hice 3 columnas (Objeto1, Objeto2 y Objeto3) no mil.

p.ej: 300 + 300 + 400 = 1000
  #23 (permalink)  
Antiguo 24/02/2009, 14:44
 
Fecha de Ingreso: mayo-2007
Mensajes: 49
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Concordar ID con Objeto

Creo que seria mejor que hicieras un join algo como esto:

Código PHP:

mysql_select_db
($database_Noone$Noone);
$query_relacion "SELECT * FROM inventario INNER JOIN objetos ON inventario.id_objeto = objetos.id WHERE inventario.id_u = $row_usuarios[id]  ORDER BY inventario.id_o ASC";
$relacion mysql_query($query_relacion$Noone) or die(mysql_error());
$row_relacion mysql_fetch_assoc($relacion);
$totalRows_relacion mysql_num_rows($relacion); 
Con esto te ahorras el seleccionar todos los objetos de la BD ya que estarías filtrando solo aquellos objetos que pertenezcan a tu usuario.

Creo que de esa manera debe de funcionar, prueba con el join, si no te funciona puedes cambiar los valores para validar la relacion.

Suerte.
  #24 (permalink)  
Antiguo 24/02/2009, 15:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Inventario en PHP (Denme una ideita)

Temas unidos porfavor NO dupliques temas.
  #25 (permalink)  
Antiguo 24/02/2009, 19:02
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Inventario en PHP (Denme una ideita)

Bien ahora mi problema es que quiero mostrar el inventrio del usuario-
Tengo.:
tabla objetos:
id
nombre
img
tabla relacion:
id_obj
id_usu
Y quiero que al ingresar a la pagina de inventario muestro los de uno, para eso hize este code:

Código PHP:
Ver original
  1. <?php
  2. # FileName="Connection_php_mysql.htm"
  3. # Type="MYSQL"
  4. # HTTP="true"
  5. $hostname_Noone = "X";
  6. $database_Noone = "X";
  7. $username_Noone = "X";
  8. $password_Noone = "X";
  9. $Noone = mysql_pconnect($hostname_Noone, $username_Noone, $password_Noone) or trigger_error(mysql_error(),E_USER_ERROR);
  10. ?>
  11. <?php
  12. if (!function_exists("GetSQLValueString")) {
  13. function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
  14. {
  15.   if (PHP_VERSION < 6) {
  16.     $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  17.   }
  18.  
  19.   $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  20.  
  21.   switch ($theType) {
  22.     case "text":
  23.       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  24.       break;    
  25.     case "long":
  26.     case "int":
  27.       $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  28.       break;
  29.     case "double":
  30.       $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  31.       break;
  32.     case "date":
  33.       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  34.       break;
  35.     case "defined":
  36.       $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  37.       break;
  38.   }
  39.   return $theValue;
  40. }
  41. }
  42.  
  43. $colname_usuarios = "-1";
  44. if (isset($_SESSION['MM_Username'])) {
  45.   $colname_usuarios = $_SESSION['MM_Username'];
  46. }
  47. mysql_select_db($database_Noone, $Noone);
  48. $query_usuarios = sprintf("SELECT id, usuario FROM usuarios WHERE usuario = %s", GetSQLValueString($colname_usuarios, "text"));
  49. $usuarios = mysql_query($query_usuarios, $Noone) or die(mysql_error());
  50. $row_usuarios = mysql_fetch_assoc($usuarios);
  51. $totalRows_usuarios = mysql_num_rows($usuarios);
  52.  
  53. mysql_select_db($database_Noone, $Noone);
  54. $query_objetos = "SELECT * FROM objetos";
  55. $objetos = mysql_query($query_objetos, $Noone) or die(mysql_error());
  56. $row_objetos = mysql_fetch_assoc($objetos);
  57. $totalRows_objetos = mysql_num_rows($objetos);
  58.  
  59. mysql_select_db($database_Noone, $Noone);
  60. $query_relacion = "SELECT * FROM inventario  WHERE id_u = $row_usuarios[id]  ORDER BY id_o ASC";
  61. $relacion = mysql_query($query_relacion, $Noone) or die(mysql_error());
  62. $row_relacion = mysql_fetch_assoc($relacion);
  63. $totalRows_relacion = mysql_num_rows($relacion);  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. ?>
  71. <html>
  72. <table border="1">
  73.   <?php do { ?>
  74.     <tr>
  75.       <td><?php echo $row_relacion['id_o']; ?></td>
  76.     </tr>
  77.     <?php } while ($row_relacion = mysql_fetch_assoc($relacion)); ?>
  78. </table>
  79. </html>

Y asi , se me visualiza el ID del objeto.
Lo que yo quiero es que se visualize el nombre y su imagen
  #26 (permalink)  
Antiguo 24/02/2009, 20:38
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Problema al mostrar inventario (Mirar abajo de todo)

Utiliza un JOIN, seria algo como:

SELECT * FROM objectos INNER JOIN tabla_relacion ON tabla_relacion.id_obj = objectos.id WHERE tabla_relacion.id_usu = %s
Donde %s vendria siendo el valor que recoges de la SESSION:
$colname_usuarios = $_SESSION['MM_Username'];
  #27 (permalink)  
Antiguo 24/02/2009, 21:09
 
Fecha de Ingreso: julio-2006
Mensajes: 254
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Problema al mostrar inventario (Mirar abajo de todo)

OK;Intentare
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 21:42.