Bonjour à tous,
Voici un exemple d'utilisation un peu différent de se que l'on à l'habitude de voir, dans la gestion mysql.
Cet source est base sur un tuto de Grafikart
http://www.grafikart.fr/tutoriels/poo-models-php-90
/*
Dans ce tutoriel vidéo vous apprendrez à utiliser la Programmation Orienté Objet en PHP pour créer des "models". Ces objets vous permettront de communiquer plus facilement avec votre base de donnée à travers des fonction de sauvegarde, de suppression et de lecture.
Tuto codé avec l'extension "mysql"
J'ai changer l'extension "mysql" en "mysqli"
Et j'ai apporté quelques améliorations sur le code lui même
J'ai fait un exemple simple pour chaque fonction.
Je n'est pas fourni les vérifications de formulaire etc, sa sera à vous de le faire si vous voulez réutilisé se script.
Actuellement la class model contient :
Une lecture d'un enregistrement
Une lecture de plusieurs enregistrements
Une vérification d'existance de l'enregistrement choisi
Une insertion d'enregistrement
Une modification d'enregistrement
Une suppression d'enregistrement
Source / Exemple :
<?php
class Model {
//Déclaration des attributs public
public $cnx;
public $table;
public $id;
public $rep_sql;
//Déclaration des attributs private de connec
private $_hote = "localhost";
private $_identifiant = "root";
private $_mot_de_passe = "";
private $base_de_donnees = "coeur_of_prog";
private $port = 3306;//default : 3306
/*//////////////////////////////////////////////////////////////////////////////////////////////////////////
Constructeur de connexion bdd
//////////////////////////////////////////////////////////////////////////////////////////////////////////*/
function __construct() {
//Déclenchement de la connexion
//echo 'Constructeur déclenché !';
$this->cnx = new mysqli(
$this->_hote,$this->_identifiant,
$this->_mot_de_passe,$this->base_de_donnees,
$this->port
);
if (mysqli_connect_errno()) {
echo '<div class="admin-no">Échec de la connexion : '.mysqli_connect_error().'</div>';
exit();
}
}
/*/////////////////////////////////////////////////////////////////////////////////////////////////////
Chargement du model
///////////////////////////////////////////////////////////////////////////////////////////////////*/
static function load($name){
require("$name.php");
return new $name();
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Existance de l'id
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function existance($id) {
if (!empty($id) && is_numeric($id)) {
$sql = 'SELECT id FROM '.$this->table.' WHERE id='.$id;
if($this->cnx){
if($req = $this->cnx->query($sql)) {
//On verifie si l'id existe dans la table RETURN TRUE OU FALSE
if ($req->num_rows != 0) { return TRUE; } else { return FALSE; }
} else {
//return $this->rep_sql = 1;
echo '<div class="admin-no">Requête concernée : "',$query,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
//return $this->rep_sql = 2;
echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
} else {
//return $this->rep_sql = 3;
echo '<div class="admin-no">Votre demande n\'est pas valide</div>';
//$mess_erreur_existance
exit();
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Lecture
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function read($fields=null) {
if($fields==null){ $fields = "*"; }//si les champs sont null je select tt
$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE id='.$this->id;
if($this->cnx){
if($req = $this->cnx->query($sql)) {
if ($req->num_rows != 0) {//on verifie que la table n'est pas vide
$data = $req->fetch_array();
foreach($data as $k=>$v){
$this->$k = $v;
}
return $this->rep_sql = 1;//Affichage tbl
//echo '<div class="admin-ok">Requête réussi</div>';
$this->free_result();//on libere la memoire
} else {
return $this->rep_sql = 2;
//echo '<div class="admin-no">Aucune informations</div>';
//$mess_erreur_no_infos
exit();
}
} else {
return $this->rep_sql = 3;
//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
return $this->rep_sql = 4;
//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Affichage liste
$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE '.$conditions.' ORDER BY '.$order.' '.$limit;
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function find($data=array()){
if(isset($data["conditions"]) && isset($data["fields"]) && isset($data["order"])) {
$conditions = $data["conditions"];
$fields = $data["fields"];
$order = $data["order"];
$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE '.$conditions.' ORDER BY '.$order;
}
if(isset($data["limit"])) { //si on fixe une limit
$limit = "LIMIT ".$data["limit"];
$sql .= ' '.$limit;
}
if($this->cnx) {
if($req = $this->cnx->query($sql)) {
if ($req->num_rows != 0) {//on verifie que la table n'est pas vide
$d = array();
while($data = $req->fetch_array()){
$d[] = $data;
}
return $d;
return $this->rep_sql = 1;//Affichage tbl
//echo '<div class="admin-ok">Requête réussi</div>';
$this->free_result();//on libere la memoire
} else {
return $this->rep_sql = 2;
//$mess_erreur_no_infos
exit();
}
} else {
return $this->rep_sql = 3;
//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
return $this->rep_sql = 4;
//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Update
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function update($data){
//est-ce que c defini et est-ce que c different de vide
if(isset($data['id']) && !empty($data['id']) && is_numeric($data['id'])){
$sql ='UPDATE '.$this->table.' SET ';
foreach($data as $k=>$v){
if($k!='id'){
$sql .= ''.$k.'="'.$v.'",';
}
}
$sql = substr($sql,0,-1);
$sql .= 'WHERE id='.$data['id'];
if($this->cnx){
if($req = $this->cnx->query($sql)) {
$this->id = $data['id'];//on recup l'id modif
return $this->rep_sql = 1;
//echo '<div class="admin-ok">Requête réussi</div>';
//$mess_modif_reussi
} else {
return $this->rep_sql = 2;
//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
return $this->rep_sql = 3;
//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
}//if(isset($data['id']) && !empty($data['id']) && is_numeric($data['id'])){
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Insertion
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function save($data){
$sql = 'INSERT INTO '.$this->table.' (';
//unset($data['id']); //Destruction de l'id
foreach($data as $k=>$v){
$sql .= ''.$k.',';
}
$sql = substr($sql,0,-1);
$sql .= ') VALUES (';
foreach($data as $v){
$sql .= '"'.$v.'",';
}
$sql = substr($sql,0,-1);
$sql .= ')';
if($this->cnx){
if($req = $this->cnx->query($sql)) {
$this->id = $this->cnx->insert_id;//on recup l'id inserer
return $this->rep_sql = 1;
//echo '<div class="admin-ok">Requête réussi</div>';
//$mess_insert_reussi
} else {
return $this->rep_sql = 2;
//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
return $this->rep_sql = 3;
//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Suppression
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function del($id){
if($this->cnx){
if ($this->existance($id) == TRUE) {
$sql = 'DELETE FROM '.$this->table.' WHERE id='.$id;
if($req = $this->cnx->query($sql)) {
return $this->rep_sql = 1;
//echo '<div class="admin-ok">Requête réussi</div>';
//$mess_suppr_reussi
} else {
return $this->rep_sql = 2;
//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
//$mess_erreur_requete
exit();
}
} else {
return $this->rep_sql = 3;
//echo '<div class="admin-no">ID n\'existe pas ou plus</div>';
//$mess_erreur_existance
exit();
}
} else {
return $this->rep_sql = 4;
//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
//$mess_erreur_connec_bdd
exit();
}
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Destructeur de connexion bdd
/////////////////////////////////////////////////////////////////////////////////////////////*/
function __destruct() {
//Déclenchement de la deconnexion
//echo "Destructeur déclenché !";
$this->cnx->close();
}
}//class Model {
?>
Conclusion :
Pour l'installation :
Dans le fichier "model/model.php" en haut les informations de connec à la bdd
Un exemple de la base est disponible dans le fichier "base_coeur_of_prog.sql"
BDD => coeur_of_prog
Voila j'attends vos commentaires sur l'utilisation de cet technique.
Et sur la façon dont celle ci est codé.
PS : Pensez à activé l'extension "Mysqli"
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.