Connexion
Posté : 06 oct. 2009, 14:53
Bonjour,
Aujourd'hui, j'ai décider de me mettre au PHPOO. Donc pour commencer, j'ai chercher comment faire un module de connexion.
Ah oui, j'ai oublié de dire que j'ai quelques petites connaissance en POO dû à Java
Donc j'ai chercher un module sur internet et j'ai trouver un exemple qui fonctionne très bien. Je l'ai adapté à mon projet et j'ai même créé une fonction supplémentaire me permettant de sortir une requête sous forme d'array.
Voici ce que ça donne :
Classe Connexion :
J'ai donc créer un autre module de connexion et un autre index, fait par moi même cette fois ci.
Ma classe Connexion :
Bon, je comprend bien que le premier que j'ai trouvé sur le net est beaucoup plus sophistiqué et plus performant je pense.
Cependant, j'aimerais comprendre la différence, la fonctionnalité qui y diffère?
Pouvez vous m'éclaircir sur ce point?
Merci d'avance
Albat90
Aujourd'hui, j'ai décider de me mettre au PHPOO. Donc pour commencer, j'ai chercher comment faire un module de connexion.
Ah oui, j'ai oublié de dire que j'ai quelques petites connaissance en POO dû à Java
Donc j'ai chercher un module sur internet et j'ai trouver un exemple qui fonctionne très bien. Je l'ai adapté à mon projet et j'ai même créé une fonction supplémentaire me permettant de sortir une requête sous forme d'array.
Voici ce que ça donne :
Classe Connexion :
<?php
class Connexion {
private $id;
private $host;
private $user;
private $pass;
private $base;
private static $instance;
private function __construct($host, $user, $pass, $base)
{
$this->setHost($host);
$this->setUser($user);
$this->setPass($pass);
$this->setBase($base);
try {
$this->id = $this->connect($this->host, $this->user, $this->pass);
}
catch (Exception $e) {
header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'");
// DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
}
try {
$this->selection($base, $this->id);
}
catch (Exception $e) {
header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'");
// DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
}
}
private function setHost($host)
{
if (!isset($host))
header("Location:./erreur.php?erreur='serveur_vide'&code='1'");
else
$this->host = $host;
}
private function setUser($user)
{
if (!isset($user))
header("Location:./erreur.php?ereur='user_vide'&code='1'");
else
$this->user = $user;
}
private function setPass($pass)
{
if (!isset($pass))
header("Location:./erreur.php?erreur='pass_vide'&code='1'");
else
$this->pass = $pass;
}
private function setBase($base)
{
if (!isset($base))
header("Location:./erreur.php?erreur='base_vide'&code='1'");
else
$this->base = $base;
}
private function selection ($base, $db)
{
$ret = mysql_select_db($base, $db);
if (isset($ret) && empty($ret))
throw new Exception("selection_base_impossible");
return $ret;
}
private function connect($host, $user, $pass)
{
$ret = mysql_connect($host, $user, $pass) or die();
if (isset($ret) && empty($ret))
throw new Exception("connexion_base_impossible");
return $ret;
}
public static function getConnexion($host, $user, $pass, $base)
{
if ((!isset($instance)))
$instance = new Connexion($host, $user, $pass, $base);
return $instance;
}
public function execute($requete)
{
if (!isset($this->id) && empty($this->id))
$this->getConnexion($host, $user, $pass, $base);
else {
if (!isset($requete) && empty($requete))
header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
else {
try {
mysql_query($requete) or die("Erreur" . mysql_error());
}
catch(Exception $e) {
header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
}
}
}
}
public function getNbLignes()
{
if (!isset($this->id) && empty($this->id))
$this->getConnexion($host, $user, $pass, $base);
else
return mysql_affected_rows($this->id);
}
public function select($req)
{
if (!isset($this->id) && empty($this->id))
$this->getConnexion($host, $user, $pass, $base);
else {
if (!isset($req) && empty($req))
header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
else {
try {
$resultat = mysql_query($req);
}
catch(Exception $e) {
header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
}
return $resultat;
}
}
}
public function resultab($req)
{
if (!isset($this->id) && empty($this->id))
$this->getConnexion($host, $user, $pass, $base);
else {
if (!isset($req) && empty($req))
header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
else {
try {
$i = 0;
$sql = $this -> select($req);
while($result = mysql_fetch_array($sql)){
$resultat[$i] = $result[0];
$i++;
}
}
catch(Exception $e) {
header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
}
return $resultat;
}
}
}
public function __destruct()
{
if ( !isset($this->instance) && empty($this->instance))
{
try
{
mysql_close($this->id);
}
catch(Exception $e)
{
header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
}
}
else
header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
}
}
?>
Et voici l'index :
<?php
require('classe/connexion.php');
$connexion = Connexion::getConnexion("localhost", "root", "", "projet");
$sql = "SELECT nom_client FROM client";
$result = $connexion -> resultab($sql);
$i = 0;
while($i != count($result)){
echo $result[$i].'<br />';
$i++;
}
?>
Bon, c'est bien beau tout ça. Mais pour moi c'est de la bidouille et j'aime bien comprendre ce que je fais.J'ai donc créer un autre module de connexion et un autre index, fait par moi même cette fois ci.
Ma classe Connexion :
<?php
class Connexion
{
public function __construct($host, $login, $pass, $base)
{
$connect = mysql_connect($host, $login, $pass);
mysql_select_db($base, $connect);
}
public function lire($champ, $table)
{
$sql = "SELECT $champ FROM $table";
$query = mysql_query($sql) or die('impossible');
$i=0;
while($data = mysql_fetch_array($query))
{
$result[$i] = $data[0];
$i++;
}
return $result;
}
}
?>
Mon index :
<?php
require('classe/Connexion.php');
$connexion = new Connexion("localhost", "root", "", "projet");
$result = $connexion -> lire("nom_client","client");
$i=0;
while($i != count($result))
{
echo $result[$i].'<br />';
$i++;
}
?>
Voila, quand je charge les deux pages, j'ai exactement le même résultat.Bon, je comprend bien que le premier que j'ai trouvé sur le net est beaucoup plus sophistiqué et plus performant je pense.
Cependant, j'aimerais comprendre la différence, la fonctionnalité qui y diffère?
Pouvez vous m'éclaircir sur ce point?
Merci d'avance
Albat90