PHP Personnages + système de pagination // MaNGOS
Bonsoir à tous,

Je vous partage aujourd'hui un script qui vous permettra de lister les personnages 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.characters.php:
[code=php]<?php

Class Characters {

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 getNbCharacters() {
$query = "SELECT COUNT(*) AS nombre FROM `characters`";
$dataCharacters = $this->cDB->query($query, true);
return $dataCharacters['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` ORDER BY name ASC LIMIT %s,%s", ($this->page - 1) * $this->pagination, $this->pagination);
$queryCharacters = $this->cDB->query($query);
while($dataCharacters = $queryCharacters->fetch_assoc()) {
$charactersList[] = $dataCharacters;
}
return $charactersList;
}

/**
* @access public
*/
public function getPages() {
$pages = ceil($this->getNbCharacters() / $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 personnages et le système de pagination.

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

/**
* @title: Personnages + 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 personnages */
if(!@include_once('class.characters.php')) {
die('Erreur: Le fichier "class.characters.php" est introuvable !');
}
$characters = new Characters($cDB);

?>
<html>
<head>
<title>Personnages</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($characters->getNbCharacters() != 0) { ?>
<?php foreach($characters->getList() as $character) { ?>
<tr>
<tdPincha href="index.php?guid=<?php echo $character['guid']; ?>"><?php echo htmlentities($character['name']); ?Pinch/aPinch/td>
<td align="center"><?php echo $character['level']; ?Pinch/td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/race_<?php echo $character['race'] . '_' . $character['gender']; ?>.jpg" title="<?php echo $characters->getRaceName($character['race'], $character['gender']); ?>"/Pinch/td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/class_<?php echo $character['class']; ?>.jpg" title="<?php echo $characters->getClassName($character['class'], $character['gender']); ?>"/Pinch/td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/faction_<?php echo $characters->getFactionId($character['race']); ?>.jpg" title="<?php echo $characters->getFactionName($character['race']); ?>"/Pinch/td>
</tr>
<?php } ?>
<tr>
<td colspan="5" align="right"><?php echo $characters->getPages(); ?Pinch/td>
</tr>
<?php } else { ?>
<tr>
<td colspan="5" align="center"><font color="red">Il n'y a pas de personnages sur le royaume !</fontPinch/td>
</tr>
<?php } ?>
</table>
</body>
</html>[/code]
Cette page gère les classes et affiche la liste des personnages 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