PHP Joueurs en ligne + système de pagination // MaNGOS
Bonsoir à tous,

Je vous partage aujourd'hui un script qui vous permettra de lister les joueurs en ligne avec un système de pagination tout simple.
Le code est orienté objet et j'utilise les fonctions MySQLi orienté objet pour gérer la base de données.

Passons au code !

class.dbhandler.php:
[code=php]<?php

Class DatabaseHandler {

private $connectionLink = false;

/**
* @access public
* @param type $hostname
* @param type $username
* @param type $password
* @param type $database
*/
public function DatabaseHandler($hostname, $username, $password, $database) {
$this->connectionLink = new mysqli($hostname, $username, $password, $database);
if($this->connectionLink->connect_error) {
die('Erreur: La connexion au serveur MySQL a &eacute;chou&eacute; !');
}
}

/**
* @access public
* @param type $query
* @param type $assoc=false
*/
public function query($query, $assoc=false) {
$sqlQuery = $this->connectionLink->query($query);
if(!$sqlQuery) {
die('Erreur: L\'ex&eacute;cution de la requ&ecirc;te "' . $query . '" a &eacute;chou&eacute; !<br />Erreur MySQL: ' . $this->connectionLink->error . '.');
}
if($assoc == false) {
return $sqlQuery;
} else {
return $sqlQuery->fetch_assoc();
}
}

/**
* @access public
* @param type $string
*/
public function escape_string($string) {
return $this->connectionLink->real_escape_string($string);
}

/**
* @access public
*/
public function __destruct() {
$this->connectionLink->close();
}

}

?>[/code]
Cette classe gère les connexions au serveur MySQL et les requêtes SQL.

class.players.php:
[code=php]<?php

Class Players {

private $cDB = null;

private $page = null;
private $pagination = null;

/**
* @access public
* @param type $cDB
*/
public function __construct(&$cDB) {
$this->cDB = $cDB;

$this->pagination = 25;
}

/**
* @access public
* @param type $race
*/
public function getFactionId($race) {
switch($race) {
case 1:
case 3:
case 4:
case 7:
case 11:
case 22:
return 0;
break;

default:
return 1;
}
}

/**
* @access public
* @param type $race
*/
public function getFactionName($race) {
switch($race) {
case 1:
case 3:
case 4:
case 7:
case 11:
case 22:
return 'Alliance';
break;

default:
return 'Horde';
}
}

/**
* @access public
* @param type $race
* @param type $gender
*/
public function getRaceName($race, $gender) {
if($gender == 0) {
switch($race) {
case 1:
$RaceName = 'Humain';
break;
case 2:
$RaceName = 'Orc';
break;
case 3:
$RaceName = 'Nain';
break;
case 4:
$RaceName = 'Elfe de la nuit';
break;
case 5:
$RaceName = 'Mort-vivant';
break;
case 6:
$RaceName = 'Tauren';
break;
case 7:
$RaceName = 'Gnome';
break;
case 8:
$RaceName = 'Troll';
break;
case 9:
$RaceName = 'Gobelin';
break;
case 10:
$RaceName = 'Elfe de sang';
break;
case 11:
$RaceName = 'Draeneï';
break;
case 22:
$RaceName = 'Worgen';
break;

default:
$RaceName = 'NONE';
}
} else {
switch($race) {
case 1:
$RaceName = 'Humaine';
break;
case 2:
$RaceName = 'Orque';
break;
case 3:
$RaceName = 'Naine';
break;
case 4:
$RaceName = 'Elfe de la nuit';
break;
case 5:
$RaceName = 'Morte-vivante';
break;
case 6:
$RaceName = 'Taurène';
break;
case 7:
$RaceName = 'Gnome';
break;
case 8:
$RaceName = 'Trollesse';
break;
case 9:
$RaceName = 'Gobeline';
break;
case 10:
$RaceName = 'Elfe de sang';
break;
case 11:
$RaceName = 'Draeneï';
break;
case 22:
$RaceName = 'Worgen';
break;

default:
$RaceName = 'NONE';
}
}
return htmlentities($RaceName);
}

/**
* @access public
* @param type $class
* @param type $gender
*/
public function getClassName($class, $gender) {
if($gender == 0) {
switch($class) {
case 1:
$ClassName = 'Guerrier';
break;
case 2:
$ClassName = 'Paladin';
break;
case 3:
$ClassName = 'Chasseur';
break;
case 4:
$ClassName = 'Voleur';
break;
case 5:
$ClassName = 'Prêtre';
break;
case 6:
$ClassName = 'Chevalier de la mort';
break;
case 7:
$ClassName = 'Chaman';
break;
case 8:
$ClassName = 'Mage';
break;
case 9:
$ClassName = 'Démoniste';
break;
case 11:
$ClassName = 'Druide';
break;

default:
$ClassName = 'NONE';
}
} else {
switch($class) {
case 1:
$ClassName = 'Guerrière';
break;
case 2:
$ClassName = 'Paladin';
break;
case 3:
$ClassName = 'Chasseuse';
break;
case 4:
$ClassName = 'Voleuse';
break;
case 5:
$ClassName = 'Prêtresse';
break;
case 6:
$ClassName = 'Chevalier de la mort';
break;
case 7:
$ClassName = 'Chamane';
break;
case 8:
$ClassName = 'Mage';
break;
case 9:
$ClassName = 'Démoniste';
break;
case 11:
$ClassName = 'Druidesse';
break;

default:
$ClassName = 'NONE';
}
}
return htmlentities($ClassName);
}

/**
* @access public
*/
public function getNbPlayers() {
$query = "SELECT COUNT(*) AS nombre FROM `characters` WHERE `online` = '1'";
$dataPlayers = $this->cDB->query($query, true);
return $dataPlayers['nombre'];
}

/**
* @access public
*/
public function getList() {
if(isset($_GET['page']) && is_numeric($_GET['page'])) {
$this->page = $_GET['page'];
} else {
$this->page = 1;
}
$query = sprintf("SELECT guid, name, race, class, gender, level FROM `characters` WHERE `online` = '1' ORDER BY name ASC LIMIT %s,%s", ($this->page - 1) * $this->pagination, $this->pagination);
$queryPlayers = $this->cDB->query($query);
while($dataPlayers = $queryPlayers->fetch_assoc()) {
$playersList[] = $dataPlayers;
}
return $playersList;
}

/**
* @access public
*/
public function getPages() {
$pages = ceil($this->getNbPlayers() / $this->pagination);
for($i = 1; $i <= $pages; $i++) {
if($i == $this->page) {
echo '[' . $i . ']&nbsp;';
} else {
echo '<a href="?page=' . $i . '">[' . $i . ']</a>&nbsp;';
}
}

}

}

?>[/code]
Cette classe gère la liste des joueurs en ligne et le système de pagination.

index.php:
[code=php]<?php

/**
* @title: Joueurs en ligne + système de pagination
* @author: Allan
* @emulator: MaNGOS
* @version: 3.3.5
*/

/* Accès MySQL pour la base de données des personnages */
$characters = array();
$characters = array(
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => '',
'database' => 'characters'
);

/* On charge le gestionnaire de bases de données */
if(!@include_once('class.dbhandler.php')) {
die('Erreur: Le fichier "class.dbhandler.php" est introuvable !');
}

/* On ouvre la connexion MySQL */
if(!defined('DATABASE_HANDLER')) {
$cDB = new DatabaseHandler($characters['hostname'], $characters['username'], $characters['password'], $characters['database']);
}

/* On charge la classe qui gère la liste des joueurs */
if(!@include_once('class.players.php')) {
die('Erreur: Le fichier "class.players.php" est introuvable !');
}
$players = new Players($cDB);

?>
<html>
<head>
<title>Joueurs en ligne</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<table border="1" align="center">
<tr>
<td>Nom du personnage</td>
<td>Niveau</td>
<td>Race</td>
<td>Classe</td>
<td>Faction</td>
</tr>
<?php if($players->getNbPlayers() != 0) { ?>
<?php foreach($players->getList() as $player) { ?>
<tr>
<td><a href="index.php?guid=<?php echo $player['guid']; ?>"><?php echo htmlentities($player['name']); ?></a></td>
<td align="center"><?php echo $player['level']; ?></td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/race_<?php echo $player['race'] . '_' . $player['gender']; ?>.jpg" title="<?php echo $players->getRaceName($player['race'], $player['gender']); ?>"/></td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/class_<?php echo $player['class']; ?>.jpg" title="<?php echo $players->getClassName($player['class'], $player['gender']); ?>"/></td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/faction_<?php echo $players->getFactionId($player['race']); ?>.jpg" title="<?php echo $players->getFactionName($player['race']); ?>"/></td>
</tr>
<?php } ?>
<tr>
<td colspan="5" align="right"><?php echo $players->getPages(); ?></td>
</tr>
<?php } else { ?>
<tr>
<td colspan="5" align="center"><font color="red">Il n'y a pas de joueur en ligne sur le royaume !</font></td>
</tr>
<?php } ?>
</table>
</body>
</html>[/code]
Cette page gère les classes et affiche la liste des joueurs en ligne avec son système de pagination.

Voilà c'est ici que ça se termine. Le script est relativement facile à comprendre.
Il peut facilement être modifié/adapté à un site.

Amicalement Allan.

Retourner en haut Accueil