[POO] Classe SQL et Classe Membre
Bonjour à tous,
Je viens vous voir pour avoir votre avis sur 2 classes que j'ai codées (je patauge un peu dans la POO pour l'instant à vrai dire :?).
Ma première classe est une classe SQL et la deuxième une classe Membre (elles ne sont pas complète pour l'instant mais fonctionnent correctement).
Voici mon fichier index.php :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php
/*
Nom :: index.php
*/
function __autoload($class_name)
{
require_once './class/'.$class_name.'.class.php';
}
session_start();
$sql = new SQL();
$membre = new Membre($sql);
if ( $membre->etat() )
{
echo $membre->pseudo; // simple exemple
}
else
{
// redirection vers une page de connection
}
?> |
Voici ma classe SQL :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
| <?php
class SQL // Classe SQL permettant de simplifier la connection à une BDD et toutes les opérations qui s'y rapportent
{
//-- Paramètres de connection à MySQL
private $user = 'xxxx';
private $password = 'xxxxx';
private $database = 'xxxx';
private $server = 'xxxx.xxxx.xxxxx';
private $connection_id; // Vaut le link de la connection au serveur MySQL
private $connecte = FALSE; // Etat de la connection
private $message_erreur; // Message d'erreur à afficher en cas de problème
private $resultat=array(); // Contient les résultats de toutes les requêtes
private $erreur_base = 'Une erreur est survenue lors de l\'exécution de cette page. Si après le problème persiste, veuillez contacter le webmaster de ce site.'; // Message de base pour une erreur
private $mysql_error_etat = TRUE; // Affiche ou non en plus du message d'erreur le mysql_error()
private $mysql_error; // Contient le mysql_error()
public $reussi = FALSE; // Résultat d'une fonction retournant un boléen
function __construct() // Fonction __construct() permettant de se connecter à la BDD
{
$this->connection_id = @mysql_connect($this->server,$this->user,$this->password); // On définit $this->connection_id comme link de la connection
if ( $this->connection_id ) // Si la connection réussi
{
if ( @mysql_select_db($this->database,$this->connection_id) ) // Si la sélection de la BDD réussi
{
$this->connecte = TRUE;
$this->reussi = TRUE;
}
else // Sinon
{
$this->connecte = FALSE;
$this->reussi = FALSE;
$this->message_erreur = 'La base sélectionnée est inaccessible';
$this->erreur(); // On affiche une erreur
}
}
else // Sinon
{
$this->connecte = FALSE;
$this->reussi = FALSE;
$this->message_erreur = 'Impossible de se connecter au serveur MySQL';
$this->erreur(); // On affiche une erreur
}
return $this->reussi; // On retourne TRUE ou FALSE
}
public function erreur() // Fonction permettant l'affichage d'une erreur (l'avantage étant de pouvoir styliser celle-ci plus facilement)
{
if ( $this->mysql_error_etat ) // Si on décide d'afficher mysql_error()
{
$fin_erreur = '<br /><br /><b>Erreur MySQL</b> : '.$this->mysql_error;
}
echo $this->message_erreur.$fin_erreur; // On affiche le message d'erreur
}
public function requete($requete,$i) // Fonction permettant d'exécuter une requête (il faut passer $i (un numéro) en paramètre)
{
if ( $this->connecte == TRUE ) // Si on est connecté à la BDD
{
$this->resultat[$i] = @mysql_query($requete,$this->connection_id); // On exécute la requête que l'on place dans le tableau $this->resultat pour pouvoir la récupérer plus tard
if ( !$this->resultat[$i] ) // Si la requête échoue
{
$this->reussi = FALSE;
$this->message_erreur = $this->erreur_base;
$this->mysql_error = mysql_error($this->connection_id); // On place le mysql_error() correspondant dans $this->mysql_error
$this->erreur(); // On retourne une erreur
}
else // Sinon
{
$this->reussi = TRUE;
}
return $this->reussi; // On retourne TRUE ou FALSE
}
}
public function fetch($i) // Fonction permettant d'organiser les données obtenues par un SELECT dans un array associatif
{
if ( $this->resultat[$i] ) // Si on trouve un résultat d'une requête correspondant à la clé $i dans le tableau $this->resultat
{
return @mysql_fetch_assoc($this->resultat[$i]); // On retourne le array associatif correspondant
}
}
public function nbre_res($i) // Fonction permettant de retourner le nombre de lignes obtenues par un SELECT
{
if ( $this->resultat[$i] ) // Si on trouve un résultat d'une requête correspondant à la clé $i dans le tableau $this->resultat
{
return @mysql_num_rows($this->resultat[$i]); // On retourne le nombre de lignes correspondant
}
}
}
?> |
Et voici enfin ma classe Membre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| <?php
class Membre // Classe Membre
{
public $id; // Id du membre
public $pseudo; // Pseudo du membre
public $email; // Email du membre
public $niveau; // Niveau du membre
public $etat = FALSE; // Etat (connecté ou non) du membre
private $informations=array(); // Tableau de ses informations
private $sql; // Récupère l'objet sql
function __construct($sql) // Fonction __construct() s'exécutant à chaquel nouvel appel à la classe Membre (new Membre())
{
$this->sql = $sql; // Récupère l'objet sql
if ( isset($_SESSION['id']) ) // Si le membre est déjà connecté
{
$sql = $this->sql->requete("SELECT * FROM membres WHERE id='".$_SESSION['id']."'",1); // On exécute une requête (classe SQL) permettant de récupérer les infos du membre
$this->informations = $this->sql->fetch(1); // On récupère ses informations
$this->id = $this->informations['id']; // On update la variable id
$this->pseudo = $this->informations['pseudo']; // ...
$this->email = $this->informations['email']; // ...
$this->niveau = $this->informations['niveau']; // ...
$this->etat = TRUE; // Le membre est connecté
}
else // Sinon
{
$this->etat = FALSE; // Le membre n'est pas connecté
}
}
public function etat() // Fonction permettant de récupérer l'état d'un membre (inutile pour le moment puisque $this->etat est publique)
{
return $this->etat;
}
private function update_infos() // Fonction permettant d'update seulement depuis l'intérieur de la classe les infos du membre
{
$sql = $this->sql->requete("SELECT * FROM membres WHERE id = '".$this->id."'",1); // On sélectionne tous le membre ayant pour pseudo $pseudo et mdp hashé en sha1 $motdepasse
$this->informations = $this->sql->fetch(1); // On récupère ses informations
$this->id = $this->informations['id']; // On update la variable id
$this->pseudo = $this->informations['pseudo']; // ...
$this->email = $this->informations['email']; // ...
$this->niveau = $this->informations['niveau']; // ...
$this->etat = TRUE; // Le membre est connecté
}
public function connection($pseudo,$motdepasse) // Fonction permettant de connecter un membre
{
$sql = $this->sql->requete("SELECT * FROM membres WHERE pseudo = '".$pseudo."' && motdepasse = '".sha1($motdepasse)."'",1); // On sélectionne tous le membre ayant pour pseudo $pseudo et mdp hashé en sha1 $motdepasse
$reussi = $this->sql->nbre_res(1);
if ( $reussi == 1 ) // Si il y a un membre correspondant à ces informations
{
$this->informations = $this->sql->fetch(1); // On récupère ses informations
$this->id = $this->informations['id']; // On update la variable id
$this->pseudo = $this->informations['pseudo']; // ...
$this->email = $this->informations['email']; // ...
$this->niveau = $this->informations['niveau']; // ...
$this->etat = TRUE; // Le membre est connecté
$_SESSION['id'] = $this->id;
}
return $this->etat; // On retourne TRUE ou FALSE
}
public function inscription($pseudo,$motdepasse,$email) // Fonction permettant l'inscription d'un membre
{
$sql = $this->sql->requete("INSERT INTO membres (id,pseudo,motdepasse,email) VALUES ('','".$pseudo."','".sha1($motdepasse)."','".$email."')",1); // On insère ses informations dans la BDD
if ( $sql ) // Si tout s'est bien passé
{
return TRUE; // On retourne TRUE
}
else
{
return FALSE; // On retourne FALSE
}
}
public function modification($modifications,$id) // Fonction permettant la modification des informations d'un membre à partir d'un array de la sorte : array('cle'=>'valeur','...');
{
$requete = 'UPDATE TABLE membres SET '; // Début de la requête
$c=0;
foreach($modifications as $cle=>$valeur) // On décompose l'array
{
$c++;
$requete .= ( $c == 1 ) ? $cle.' = '.$valeur : ', '. $cle.' = '.$valeur; // Si c'est le premier passage on ne met pas de virgule devant, sinon oui
}
$requete .= ' WHERE id="'.$id.'"'; // Fin de la requête
$sql = $this->sql->requete($requete);
if ( $sql ) // Si tout s'est bien passé
{
foreach($modifications as $cle=>$valeur) // On modifie les informations du membre dans la classe
{
$this->$cle = $valeur;
$this->informations[$cle] = $valeur;
}
return TRUE;
}
else
{
return FALSE;
}
}
public function deconnection() // Fonction permettant la déconnection du membre
{
unset($_SESSION);
unset($this->informations);
unset($this->pseudo);
unset($this->email);
unset($this->id);
unset($this->niveau);
session_destroy();
$this->etat = FALSE;
}
}
?> |
Si vous souhaitez plus d'informations ou si j'ai oublié quelque chose, n'hésitez pas. J'aimerai avoir votre avis car comme ce sont des codes d'essai j'aimerai prendre des bonnes habitudes dès le début.
Merci à vous !