Accueil > > > MODEL SQL AVEC MYSQLI
MODEL SQL AVEC MYSQLI
Information sur la source
Description
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-9 0 /* 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
- <?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 {
- ?>
<?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"
Historique
- 15 mai 2010 11:19:42 :
- Mise à jour de plusieurs éléments dans le code cf commentaires du 15/05/2010
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Class POO retourné le nom de l'objet [ par MeTh ]
Bonjour,Comment retourné le nom de l'objet déclaré?exemple :$monobjet = new GridR();comment recuperé $monobjet dans ma class?Merci
templates avec poo [ par lesnes ]
bonjours je reprogramme totalement mon site en poo et je souhaiterai utiliser les templates mais l'on ne peut pas faire appel a une class exterieur a
pb avec CREATE DATABASE [ par Joleroy ]
Bonjour a tous,J' ai ecrit ce petit bout de code qui crée un utilisateur, lui creer un base de donnée, et lui donne des droit sur cette 
Problème code Mysql [ par Thomas46 ]
Bonjour, Voilà j'ai un petit problème avec mon code et je ne trouve pas l'erreur, je cherche encore et encore mais toujours le même r&
Probleme en POO [ par pablor44 ]
Bonjour,alors voilà je vous explique mon probleme, je suis en train d'ecrire une classe en php pour mon site et je me retrouve dans la situation
Erreur MySQL [ par coockiesch ]
Salut! Je viens d'installer, sur mon ordi, Apache2, MySQL, PHP5 et PhpMyAdmin. On m'a demandé de choisir l'extension mysqli, je choisi mysqli (pa
Gestion membres via POO [ par FhX ]
Je me posais la question justement. Pour pouvoir faire une interface membre (donc : admin + membre + visiteur), dois-je faire ca en une seule classe ?
Probleme avec mysqli et php5 [ par saccomabi ]
Bonjour,mon probleme est de ne pas pouvoir dans mon script php utilisé la class mysqlidans mon php.ini je pense que c'est bonj
logiciel POO [ par kowal2205 ]
Je me pose la question de la création de mes classes dans un projet de taille moyenne car je ne trouve pas de logiciel à mon pied qui me per
Reflexion sur un schema de POO (gestion d'emploi du temps d'une UFR) [ par Franquito ]
Bonjour à tous ! Je dois réaliser un schema pour une application de programation orienté objet. L'application fait la gestion d'emploi du temps d'un
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|