Salut tout le monde,
Je vous partage aujourd'hui un script qui vous permettra de gérer des recherches de personnages via un formulaire tout simple.
Le code est orienté objet et j'utilise les fonctions MySQLi en procédural pour gérer la base de données.
Certains vont surement me demander pourquoi j'utilise MySQLi en procédural au lieu de l'utilisé orienté objet.
Et bien c'est juste que je sais qu'on a à faire à des débutants et j'essaye de simplifié au maximum.
Je partagerais une version orienté objet si vous le désirez ...
Passons au code !
class.dbhandler.php: (V1->MySQLi Procédural)
[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 = @mysqli_connect($hostname, $username, $password, $database);
if(!$this->connectionLink) {
die('Erreur: La connexion au serveur MySQL a échoué !');
}
$databaseLink = @mysqli_select_db($this->connectionLink, $database);
if(!$databaseLink) {
die('Erreur: La base de données "' . $database . '" est introuvable !');
}
}
/**
* @access public
* @param type $query
* @param type $assoc=false
*/
public function query($query, $assoc=false) {
$sqlQuery = @mysqli_query($this->connectionLink, $query);
if(!$sqlQuery) {
die('Erreur: L\'exécution de la requête "' . $query . '" a échoué !<br />Erreur MySQL: ' . mysqli_error($this->connectionLink) . '.');
}
if($assoc == false) {
return $sqlQuery;
} else {
return @mysqli_fetch_assoc($sqlQuery);
}
}
/**
* @access public
* @param type $string
*/
public function escape_string($string) {
return mysqli_real_escape_string($this->connectionLink, $string);
}
/**
* @access public
*/
public function __destruct() {
@mysqli_close($this->connectionLink);
}
}
?>[/code]
class.dbhandler.php: (V2->MySQLi orienté objet)
[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 échoué !');
}
}
/**
* @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écution de la requête "' . $query . '" a échoué !<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.search.php:
[code=php]<?php
Class Search {
private $cDB = null;
private $name = null;
/**
* @access public
* @param type $cDB
*/
public function __construct(&$cDB) {
$this->cDB = $cDB;
}
/**
* @access public
* @param type $name
*/
public function setName($name) {
$this->name = $this->cDB->escape_string($name);
}
/**
* @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` WHERE `name` LIKE '%" . $this->name . "%'";
$dataCharacters = $this->cDB->query($query, true);
return $dataCharacters['nombre'];
}
/**
* @access public
*/
public function getList() {
$query = "SELECT guid, name, race, class, gender, level FROM `characters` WHERE `name` LIKE '%" . $this->name . "%' ORDER BY name ASC";
$queryCharacters = $this->cDB->query($query);
while($dataCharacters = mysqli_fetch_assoc($queryCharacters)) {
$charactersList[] = $dataCharacters;
}
return $charactersList;
}
}
?>[/code]
Cette classe gère les recherches de personnages.
index.php:
[code=php]<?php
/**
* @title: Recherche de personnages
* @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 les recherches de personnages */
if(!@include_once('class.search.php')) {
die('Erreur: Le fichier "class.search.php" est introuvable !');
}
$search = new Search($cDB);
?>
<html>
<head>
<title>Recherche de personnages</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<form method="post" action="index.php">
<table border="0" align="center">
<tr>
<td>Nom du personnage</td>
<td> </td>
</tr>
<tr>
<td><input type="text" name="name" value="<?php echo $_POST['name']; ?>"/></td>
<td><input type="submit" value="Chercher"/></td>
</tr>
</table>
</form>
<br />
<?php if($_SERVER['REQUEST_METHOD'] == 'POST') { ?>
<?php $search->setName($_POST['name']); ?>
<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($search->getNbCharacters() != 0) { ?>
<?php foreach($search->getList() as $character) { ?>
<tr>
<td><a href="index.php?guid=<?php echo $character['guid']; ?>"><?php echo htmlentities($character['name']); ?></a></td>
<td align="center"><?php echo $character['level']; ?></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 $search->getRaceName($character['race'], $character['gender']); ?>"/></td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/class_<?php echo $character['class']; ?>.jpg" title="<?php echo $search->getClassName($character['class'], $character['gender']); ?>"/></td>
<td align="center"><img src="http://eu.media.blizzard.com/wow/icons/18/faction_<?php echo $search->getFactionId($character['race']); ?>.jpg" title="<?php echo $search->getFactionName($character['race']); ?>"/></td>
</tr>
<?php } ?>
<?php } else { ?>
<tr>
<td colspan="5" align="center">Aucun personnage n'a été trouver pour la recherche: "<font color="red"><?php echo $_POST['name']; ?></font>"</td>
</tr>
<?php } ?>
</table>
<?php } ?>
</body>
</html>[/code]
Cette page gère les classes, affiche le formulaire et les résultats des recherches.
Voilà c'est ici que ça se termine. Le script est relativement facile à comprendre.
Il peut facilement être modifié/adapté à un site.
Amicalement Allan.