TourDeJeu, le portail des jeux en ligne alternatifs, les articles 
TourDeJeu, le réseau des jeux en ligne alternatifs : jeux web multijoueurs, jeux par forum. En savoir +
En ligne : 490 jeux, 7155 news, 26679 commentaires
 

Recherche de jeu par critères - Un jeu au hasard !

Les Focus

Tech. : Le programmeur écologique
Tech. : automatisation et mails
Salon MondeDuJeu 2002
Revue de presse des JpC
Humour : 1001 raisons pour jouer
Ludique : le joueur parfait
Ludique : découverte du JpC
PHP : accès base de données
PHP : structure du site
Ludique : JpC et Temps réel
Jeux de rôles sans règles
Humour : astrologie du JpC
Tech. : Bases de données
MJ : les joueurs multiples
PHP : utilité pour un JpC
PHP : c'est quoi ?
Tech. : l'analyse des ordres
Ludique : débutants et vétérans
Tech. : archi Ultraball 2100
Ludique : les jeux de pronos
Tech. : le site Web d'un JpC
Humour : football et wargame
Présentation de TourDeJeu

Accès la base de données MySQL pour son jeu PHP

Valeurs codées et liste déroulantes

Toujours sur le même modèle, on crée la liste des parties. Les paramètres de création sont le nombre maxi de places, le type, et la rivière sur laquelle aura lieu la partie. L'état de la partie est systématiquement "en création". Comment gérer les valeurs codées de type et d'état des parties ?

On pourrait stocker dans la table directement le libellé complet "en création" / "en cours", etc. Mais c'est sujet à erreur (il faut toujours utiliser strictement le même libellé), et on ne disposerait pas de la liste des valeurs possibles. On pourrait ne stocker qu'un code (C pour création, etc) et soit coder en dur la traduction dans les pages PHP, soit stocker la traduction dans une table des codes.

Il est possible d'utiliser directement une fonctionnalité de MySQL : les colonnes de type ENUM. Lors de la définition de la table, on précise les différentes valeurs possibles, de façon ordonnée, et MySQL numérotera ces valeurs. On pourra utiliser soit le libellé soit le numéro lors des lectures et écritures de la colonne.

DROP TABLE IF EXISTS fish_partie;
CREATE TABLE fish_partie (
   ID tinyint(3) unsigned NOT NULL auto_increment,
   idriviere tinyint(3) unsigned DEFAULT '0' NOT NULL,
   datedebut date DEFAULT '0000-00-00' NOT NULL,
   datefin date DEFAULT '0000-00-00' NOT NULL,
   nbplace tinyint(3) unsigned DEFAULT '0' NOT NULL,
   typepartie enum ("Débutants", "Vétérans", "Mixte"),
   etat enum ("En création", "En cours","Terminée"),
   PRIMARY KEY (ID)
);

Pas de nom pour les parties, on utilise l'identifiant généré par MySQL. Pour le connaître, on peut appeler fonction :

$id = mysql_insert_id();

juste après l'exécution de la requête d'INSERT.

Pour le nombre de places, on utilise un champs libre.

Pour le type de partie, on utilise une liste déroulante à partir des valeurs d'enum de la colonne. J'ai créé une fonction pour générer cela à partir du nom de la colonne et de la table.

Pour la rivière, une liste déroulante aussi, mais qui doit être rempli dynamiquement à partir de la table des rivières. Pour cela, il faut donc faire une requête de lecture sur celle-ci, et afficher les lignes récupérées en option de la liste déroulante. On met en valeur l'identifiant de la rivière, et en affichage dans la liste, son nom :

Rivière : <select name="i_riviere">
<?php
// lecture sur la table des rivières
// la même que dans listerivière, mais en triant sur le nom
$req = mysql_query("SELECT id, nom FROM fish_riviere order by nom");

   // boucle de lecture des rivières
   while ($myrow = mysql_fetch_array($req)) {
      // affichage de la ligne dans la liste déroulante
      echo "<option value=\"".$myrow["id"]."\"> .$myrow["nom"]."</option> ";
   }
?>
</select>

Pour l'affichage de la liste des parties, on affiche le nom de la rivière, et non son identifiant. Pour cela, on fait une jointure dans l'ordre SELECT :

$req = mysql_query("SELECT fish_partie.id, datedebut, datefin, fish_riviere.nom,
		typepartie, etat, nbplace FROM fish_partie, fish_riviere where
		fish_partie.idriviere = fish_riviere.id order by fish_partie.id");

Retour au sommaire de l'article 

(c) TourDeJeu 2000-2020