Poster une réponse 
 
Note de cette discussion :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Résolu] Systeme Inventaire
Auteur Message
Tekmerak Hors ligne
Membre

Messages : 24
Inscription : Aug 2008
Réputation : 0
Message : #1
[Résolu] Systeme Inventaire
Bonjour, j'ai commencer a faire un mmropg en php il y a quelque temp, sa avance tranquillement. Mais je bloque sur l'inventaire.

Alors voila la situation :

dans la table session j'ai 22 emplacement objet.
Et j'ai une table base_objet qui contient les caracteristique de chaque objet du jeux.

Je voudrais faire un menue defilant qui affiche toute les armes dans l'inventaire du perso. Mais mon code ne marche evidamment pas : rien n'aparait.

Esque quelqun pourrais m'aider svp?

Voici mon code :
Code PHP :
<?php
        session_start
();
   
?>    

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>acceuil</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <link rel="stylesheet" media="screen" type="text/css" title="css de l'acceuil" href="acceuil.css" /> 
   </head>
   
 
   <body>
 
       
 
     
 
       <!-- Les includes-->
 
       <?php include("include_haut_session.php"); ?>
 
       <!-- Le corps -->
 
       <div id="corps">
           <h1>Fiche perso</h1>
       
           <p>
Main droite : <?php echo $_SESSION['main_droite']; ?> <br /><br />
               Main gauche: <?php echo $_SESSION['main_gauche']; ?> <br /><br />
               Tete: <?php echo $_SESSION['tete']; ?> <br /><br />
               Torse: <?php echo $_SESSION['torse']; ?><br /><br />
               Bras: <?php echo $_SESSION['bras']; ?><br /><br />
               Main: <?php echo $_SESSION['main']; ?><br /><br />
               Taille: <?php echo $_SESSION['taille']; ?><br /><br />
               Jambe: <?php echo $_SESSION['jambe']; ?><br /><br />
               Pied: <?php echo $_SESSION['pied']; ?><br /><br />
           </p>
           






 
            <form method="post" action="traitement_changement_equipement.php">
           <p>
  Main droite:
       <select name="main_droite">
 <?php
$numero 
1;

while (
$numero <= 22)
{
 
$objet =  'objet_' .$numero  ;
 
$_SESSION[$objet] = $objet ;
$reponse mysql_query("SELECT * FROM base_objet WHERE nom = $objet")or die('Erreur MySQL:'.mysql_error());
$donnees mysql_fetch_array($reponse);

if (
$donnees['type'] = "arme" )


   
?><option value="<?php echo $donnees['nom']?>"> <?php echo $donnees['nom'] ; ?></option> <?php 

}
else
{
}
$numero++;
}



?>
</select>
       <br />
       <br />       
        
        <input type="submit" value="Valider" /><br /><br />
         
       </div>
 
         <?php include("include_bas.php"); ?>
       
                 </body>
</html> 
(Ce message a été modifié le : 08-16-2008 12:37 PM par Tekmerak.)
08-15-2008 07:36 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Eluox Hors ligne
Membre

Messages : 935
Inscription : Oct 2007
Réputation : 8
Message : #2
RE: Systeme Inventaire
Bonjour 2

Pourrait tu mettre ton code entre les balises
Code :
[php][/php]
Pour plus de lisibilité stp 1

Merci !)

[Image: eluox010.png]
(Ce message a été modifié le : 08-15-2008 07:58 PM par Eluox.)
08-15-2008 07:57 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Sephi-Chan Hors ligne
Administrateur
*******

Messages : 4,492
Inscription : Aug 2006
Message : #3
RE: Systeme Inventaire
Et tu as donc pensé qu'en venant ici comme un cheveux sur la soupe, la communauté allait résoudre ton problème… Je t'invite donc à prendre connaissance de nos règles, de nos pratiques, etc.

À défaut de résoudre ton problème, je voudrais te mettre en garde contre les requêtes SQL placées dans des boucles. Ici, tu fais 22 requêtes.

Si tu veux lister toutes les armes dans ton champ de sélection, je t'invite plutôt à faire :

Code PHP :
<?php 
$ressource 
mysql_query("SELECT * FROM base_objet WHERE `type` = 'arme';"); 
?>

<select name="main_droite">
<?php while($donnee mysql_fetch_assoc($ressource)): ?>

    <option value="<?php echo $donnee['nom']; ?>"><?php echo $donnee['nom']; ?></option>
    
<?php endwhile; ?>    
</select> 

Ainsi, tu as une simple requête qui liste toutes les armes dans un champ select, et le code est beaucoup plus simple et propre.

En revanche, si tu veux n'afficher que les armes en possession du personnage, il faut que tu nous expliques comment tu stockes l'inventaires du personnage.


Sephi-Chan

www.sephi-chan.fr
(Ce message a été modifié le : 08-15-2008 08:01 PM par Sephi-Chan.)
08-15-2008 07:58 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Tekmerak Hors ligne
Membre

Messages : 24
Inscription : Aug 2008
Réputation : 0
Message : #4
RE: Systeme Inventaire
Merci pour la deuxieme partit de ton message.

Comme je l'ai dit, j'ai une table session du perso ou je ne stock que le nom des objet (22 emplacement en tout)

et une table base_objet qui contient tout les objet du jeux avec comme caracteristique : nom, poid, prix, type, type2, valeur et description

Edit: j'ai supprimer ma reaction a ton Ton agressif, car j'ai feuilleter plus profondement le forum pour mieu comprendre vos coutume et j'ai vu ta proposition de filtrage de membre. J'en deduit que je n'ai aucune chance de gagner ton estime.
(Ce message a été modifié le : 08-15-2008 08:18 PM par Tekmerak.)
08-15-2008 08:06 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Sephi-Chan Hors ligne
Administrateur
*******

Messages : 4,492
Inscription : Aug 2006
Message : #5
RE: Systeme Inventaire
Mon but est que l'intégration de chaque membre se fasse correctement et qu'au final, tout le monde y gagne. L'idée du filtrage n'était qu'une mascarade pour pousser les membres à participer au débat activement. 2

Quant à ta place dans mon estime, je pense qu'on s'en fiche pas mal ; si tu t'investis un peu dans la communauté, il n'y aura pas de problèmes entre nous. 16

Pour en revenir à ton problème, je te conseille pour opter pour une méthode plus propre : l'utilisation d'une table qui relie des objets à un personnage. Faire cela t'apportera une notion supplémentaire et fondamentale pour créer un jeu : les jointures SQL.

Pour mettre une telle chose en place, il te faut une table Personnages, qui contient les informations propres à… un personnage.
Il te faudra également une table Objets, qui contiendra contre toute attente les informations relatives aux objets.
Et enfin, tu auras besoin d'une table Personnage_a_objet qui contiendra une entrée par objet que porte chaque personnage.

Cette technique suppose que tu utilises des identifiants numériques plutôt que des noms. En gros, tes tables Personnages et Objets auront un champ id qui sera une clé primaire (primary key) de type Int, avec l'attribut Unsigned et l'option auto_increment. Tu peux nommer ce champ personnage_id pour la table Personnages et objet_id pour la table Objets.

Ta table de relation (Personnage_a_objet contiendra alors deux champs, personnage_id et objet_id. Dès qu'un personnage obtient un objet, une entrée est créée dans cette table avec comme valeurs l'identifiant du personnage et celui de l'objet qu'il a acquis.

Ensuite, concrètement, comment tu vas utiliser ça ?

Pour sélectionner les objets d'un personnage, il te suffira d'avoir l'identifiant de ton personnage et de faire :
Code PHP :
$ressource mysql_query("
SELECT O.*
FROM personnages P
JOIN Personnage_a_objet PaO
ON PaO.personnage_id = P.personnage_id
JOIN Objets O
ON O.objet_id = PaO.objet_id
WHERE P.personnage_id = $idDeTonPersonnage;
"
); 

Et tu peux même ajouter une condition sur le type d'objet ! Exemple :
Code PHP :
$ressource mysql_query("
SELECT O.*
FROM personnages P
JOIN Personnage_a_objet PaO
ON PaO.personnage_id = P.personnage_id
JOIN Objets O
ON O.objet_id = PaO.objet_id
WHERE P.personnage_id = $idDeTonPersonnage
AND O.type = 'arme';
"
); 

Voici comment il faut comprendre cette requête :
  • Sélectionne rien dans la table Personnages à laquelle je ferais desormais référence par la lettre P car c'est plus rapide à écrire ;
  • Sélectionne tout dans la table Objets à laquelle je ferais appel plus tard, sous le nom de O ;
  • Va regarder dans la table Personnage_a_objet que j'appellerais PaO et donne-moi les entrées qui ont le même personnage_id que le personnage_id de mon personnage ;
  • Va regarder dans la table Objets (que j'appelle O) et donne moi les entrées dont le objet_id est le même que celui des entrées que je t'ai demandé il y a un instant ;
  • Ne prends que les entrées de Personnages dont l'identifiant est $idDeTonPersonnage ;
  • (Ne prends que les objets dont le type est "arme";)

Voilà, j'espère que tu as compris le principe car les jointures sont indispensables dans la réalisation d'une application (même un banal système d'articles avec commentaires). Si tu ne comprends pas, n'hésite pas à poser des questions.


Sephi-Chan

www.sephi-chan.fr
(Ce message a été modifié le : 08-15-2008 08:54 PM par Sephi-Chan.)
08-15-2008 08:33 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Tekmerak Hors ligne
Membre

Messages : 24
Inscription : Aug 2008
Réputation : 0
Message : #6
RE: Systeme Inventaire
Quand j'ai dit estime je voulais pas vraiment dire estime, j'ai pas trouvé le mot approprié.

Sinon, pour ce que tu me propose (sa fait 20 min que j'attend l'edit alors je commence a commenter).

Question bete: avec ton systeme de Personnage_a_objet sa risque pas de faire beaucoup beaucoup d'entré ?
Sinon, j'avoue que je n'y avais pas penser et que sa a l'air pas mal. J'attend le suite de l'explication.

Edit: tu a edit pendant que je repondait...

Et bien, j'ai pas tout compris mais apres plusieur relecture sa devrai passer.
Merci
(Ce message a été modifié le : 08-15-2008 08:56 PM par Tekmerak.)
08-15-2008 08:54 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Sephi-Chan Hors ligne
Administrateur
*******

Messages : 4,492
Inscription : Aug 2006
Message : #7
RE: Systeme Inventaire
Estime ou pas, on s'en fout. 10

En fait, ça fait effectivement beaucoup d'entrée, mais tu t'en fiches car ce n'est que de l'espace de stockage dans la base de données. De plus, les chiffres occupent très peu d'espace (cf. MySQL - Capacités des colonnes et Types numériques) mais sont bien plus facile à traiter pour un système informatique qu'une chaîne de caractères, donc au final, plus performantes.


Sephi-Chan

www.sephi-chan.fr
08-15-2008 09:20 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Tekmerak Hors ligne
Membre

Messages : 24
Inscription : Aug 2008
Réputation : 0
Message : #8
RE: Systeme Inventaire
ok, sinon j'ai compris (enfin je crois).
08-15-2008 10:15 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Sephi-Chan Hors ligne
Administrateur
*******

Messages : 4,492
Inscription : Aug 2006
Message : #9
RE: Systeme Inventaire
Le mieux pour assimiler l'utilisation des jointures, c'est de les pratiquer à fond. C'est tellement essentiel comme notion.

Si tu estimes ton sujet résolu, n'oublie pas de mettre un marqueur [Résolu] en début de titre de ton sujet. 16


Sephi-Chan

www.sephi-chan.fr
08-15-2008 10:41 PM
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Tekmerak Hors ligne
Membre

Messages : 24
Inscription : Aug 2008
Réputation : 0
Message : #10
RE: Systeme Inventaire
Faut croire que j'ai pas compris parceque sa marche pas ;(.
J'ai modif ma base de donné afin que sa colle avec ta methode, puis j'ai hadapté ton code a mes nom ( personnage_id = personnage de meme pour objet_id , personnages=session et pao = inventaire (plus claire je trouve)) Mais soit je me suis tromper en hadaptant soit c'est un autre probleme toujour est il que sa marche pas.

J'ai passer deux heures (et c'est pas une facon de parler) a chercher l'erreur et je trouve rien.

Esque tu (ou quelqu'un d'autre) peut m'aider svp ? (j'ai honte)

Code PHP :
<form method="post" action="traitement_changement_equipement.php">
           <
p>
  
Main droite:
       <?
php 
       $_SESSION
['id'] = $id;
$ressource mysql_query("
SELECT objet.*
FROM session 
JOIN inventaire
ON inventaire.personage = session.id
JOIN Objet
ON Objet.id = inventaire.objet
WHERE session.id = $id
AND objet.type = 'arme'
;
"
); 
?>

<select name="main_droite">
<?php while($donnee mysql_fetch_assoc($ressource)): ?>

    <option value="<?php echo $donnee['nom']; ?>"><?php echo $donnee['nom']; ?></option>
    
<?php endwhile; ?>    
</select> 
08-15-2008 11:29 PM
Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse 



ContactJeuWeb (JeuPHP) - Crée ton jeu par navigateurRetourner en hautRetourner au contenuVersion bas-débit (Archivé)Syndication RSS